2024-06-03 16:27:41 +08:00
|
|
|
/* Scheduler include files. */
|
|
|
|
#include "FreeRTOS.h"
|
|
|
|
#include "task.h"
|
|
|
|
#include "semphr.h"
|
2024-06-03 18:59:42 +08:00
|
|
|
#include "queue.h"
|
2024-06-03 16:27:41 +08:00
|
|
|
|
|
|
|
/* Standard demo includes. */
|
|
|
|
#include "TimerDemo.h"
|
|
|
|
#include "QueueOverwrite.h"
|
|
|
|
#include "EventGroupsDemo.h"
|
|
|
|
#include "IntSemTest.h"
|
|
|
|
#include "TaskNotify.h"
|
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
#include "main.hpp"
|
2024-06-03 16:27:41 +08:00
|
|
|
#include "lwipopts.h"
|
2024-06-03 18:59:42 +08:00
|
|
|
#include "common.hpp"
|
2024-09-08 18:39:35 +08:00
|
|
|
#include "DS18B20.hpp"
|
2024-06-03 18:59:42 +08:00
|
|
|
#include "ZC13.hpp"
|
2024-06-04 15:45:40 +08:00
|
|
|
#include "ZE07CO.hpp"
|
2024-06-03 18:59:42 +08:00
|
|
|
#include "MHZ14B.hpp"
|
2024-06-07 00:10:17 +08:00
|
|
|
#include "HC-12.hpp"
|
2024-06-03 16:27:41 +08:00
|
|
|
|
|
|
|
#ifndef PICO_DEFAULT_LED_PIN
|
2024-06-11 09:28:38 +08:00
|
|
|
#warning pio/hello_pio example requires a board with a regular LED
|
|
|
|
#define PICO_DEFAULT_LED_PIN 25
|
2024-06-03 16:27:41 +08:00
|
|
|
#endif
|
|
|
|
|
|
|
|
void Led_Blinky(void *pvParameters)
|
|
|
|
{
|
|
|
|
(void)pvParameters;
|
|
|
|
|
|
|
|
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
|
|
|
gpio_init(LED_PIN);
|
|
|
|
gpio_set_dir(LED_PIN, GPIO_OUT);
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
_printTaskStackHighWaterMark("Led_Blinky");
|
2024-06-03 16:27:41 +08:00
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
float TEMPERATURE;
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-06-03 16:27:41 +08:00
|
|
|
while (1) {
|
|
|
|
vTaskDelay(pdMS_TO_TICKS(500));
|
|
|
|
gpio_put(LED_PIN, 1);
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-06-03 16:27:41 +08:00
|
|
|
vTaskDelay(pdMS_TO_TICKS(500));
|
|
|
|
gpio_put(LED_PIN, 0);
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
// 从队列接收数据
|
|
|
|
if (xQueueReceive(xQueue, &TEMPERATURE, portMAX_DELAY) == pdPASS) {
|
|
|
|
// 处理接收到的数据
|
|
|
|
printf("%f\n", TEMPERATURE);
|
|
|
|
}
|
2024-08-11 22:11:50 +08:00
|
|
|
_printTaskStackHighWaterMark("Led_Blinky");
|
2024-06-03 16:27:41 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-06-04 15:45:40 +08:00
|
|
|
void CPU(void *pvParameters)
|
2024-06-03 16:27:41 +08:00
|
|
|
{
|
|
|
|
(void)pvParameters;
|
|
|
|
|
|
|
|
adc_init();
|
|
|
|
adc_set_temp_sensor_enabled(true);
|
|
|
|
adc_select_input(4); // Input 4 is the onboard temperature sensor.
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-08-11 22:11:50 +08:00
|
|
|
_printTaskStackHighWaterMark("CPU_");
|
2024-06-03 16:27:41 +08:00
|
|
|
|
|
|
|
while (1) {
|
|
|
|
const float conversionFactor = 3.3f / (1 << 12);
|
|
|
|
|
|
|
|
float adc = (float)adc_read() * conversionFactor;
|
|
|
|
float tempC = 27.0f - (adc - 0.706f) / 0.001721f;
|
|
|
|
|
2024-06-04 15:45:40 +08:00
|
|
|
printf("CPU temperature %.02f°C %.02f°F\n", tempC, (tempC * 9 / 5 + 32));
|
2024-08-11 22:11:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
char ONBOARD_TEMPERATURE_TEMP[BUFER] = { 0 };
|
|
|
|
sprintf(ONBOARD_TEMPERATURE_TEMP, "Onboard temperature %.02f°C %.02f°F\n", tempC, (tempC * 9 / 5 + 32));
|
|
|
|
_HC_12(ONBOARD_TEMPERATURE_TEMP);
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-08-11 22:11:50 +08:00
|
|
|
_printTaskStackHighWaterMark("CPU_");
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-06-04 15:45:40 +08:00
|
|
|
vTaskDelay(pdMS_TO_TICKS(3000)); // 非阻塞延时
|
2024-06-03 16:27:41 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-09-08 18:39:35 +08:00
|
|
|
int main(int argc, char *argv[])
|
2024-06-03 16:27:41 +08:00
|
|
|
{
|
|
|
|
stdio_init_all();
|
2024-06-03 18:59:42 +08:00
|
|
|
sleep_ms(3000);
|
2024-06-03 16:27:41 +08:00
|
|
|
//set_sys_clock_khz(250000, true);
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-06-04 15:45:40 +08:00
|
|
|
if (watchdog_caused_reboot()) { // 判断是否从看门狗启动或者正常启动
|
|
|
|
printf("Rebooted by Watchdog!\n");
|
|
|
|
} else {
|
|
|
|
printf("Clean boot\n");
|
|
|
|
}
|
|
|
|
watchdog_enable(8300, 1); // 8秒检测是否重新加载看门狗计数器. (不更新计数器则重启硬件, 最高8秒)
|
2024-08-11 22:11:50 +08:00
|
|
|
//watchdog_start_tick(12);
|
2024-06-04 15:45:40 +08:00
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
// 创建队列
|
|
|
|
xQueue = xQueueCreate(10, sizeof(long));
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-06-07 00:10:17 +08:00
|
|
|
_HC_12_INIT();
|
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
// 创建任务
|
2024-06-03 16:27:41 +08:00
|
|
|
BaseType_t xReturned;
|
2024-06-04 15:45:40 +08:00
|
|
|
TaskHandle_t CPU_xHandle = NULL;
|
2024-06-03 16:27:41 +08:00
|
|
|
TaskHandle_t Led_Blinky_xHandle = NULL;
|
2024-06-03 18:59:42 +08:00
|
|
|
TaskHandle_t DS18B20_xHandle = NULL;
|
|
|
|
TaskHandle_t CH4_xHandle = NULL;
|
2024-06-04 15:45:40 +08:00
|
|
|
TaskHandle_t CO_xHandle = NULL;
|
2024-06-03 18:59:42 +08:00
|
|
|
TaskHandle_t CO2_xHandle = NULL;
|
2024-08-11 22:11:50 +08:00
|
|
|
|
2024-06-04 15:45:40 +08:00
|
|
|
|
|
|
|
// 板载CPU温度
|
|
|
|
xReturned = xTaskCreate(CPU, "CPU task", 512, NULL, tskIDLE_PRIORITY, &CPU_xHandle);
|
|
|
|
if (xReturned == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY) {
|
|
|
|
printf("CPU() Task Error!");
|
|
|
|
}
|
2024-06-03 16:27:41 +08:00
|
|
|
|
|
|
|
// 板载LED闪烁
|
|
|
|
xReturned = xTaskCreate(Led_Blinky, "Blinky task", 512, NULL, tskIDLE_PRIORITY, &Led_Blinky_xHandle);
|
2024-06-04 09:54:09 +08:00
|
|
|
if (xReturned == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY) {
|
2024-06-04 15:45:40 +08:00
|
|
|
printf("Blinky() Task Error!");
|
2024-06-03 16:27:41 +08:00
|
|
|
}
|
2024-06-04 15:45:40 +08:00
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
// DS18B20
|
|
|
|
xReturned = xTaskCreate(DS18B20, "DS18B20 task", 1024, NULL, tskIDLE_PRIORITY, &DS18B20_xHandle);
|
2024-06-04 09:54:09 +08:00
|
|
|
if (xReturned == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY) {
|
2024-06-03 18:59:42 +08:00
|
|
|
printf("DS18B20() Task Error!");
|
|
|
|
}
|
2024-06-04 15:45:40 +08:00
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
// CH4
|
2024-08-11 22:11:50 +08:00
|
|
|
xReturned = xTaskCreate(CH4, "CH4 task", 2048, NULL, tskIDLE_PRIORITY, &CH4_xHandle);
|
2024-06-04 09:54:09 +08:00
|
|
|
if (xReturned == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY) {
|
2024-06-03 18:59:42 +08:00
|
|
|
printf("CH4() Task Error!");
|
|
|
|
}
|
2024-08-11 22:11:50 +08:00
|
|
|
|
2024-06-04 15:45:40 +08:00
|
|
|
// CO
|
|
|
|
xReturned = xTaskCreate(CO, "CO task", 2048, NULL, tskIDLE_PRIORITY, &CO_xHandle);
|
|
|
|
if (xReturned == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY) {
|
|
|
|
printf("CO() Task Error!");
|
|
|
|
}
|
2024-08-11 22:11:50 +08:00
|
|
|
|
2024-06-03 18:59:42 +08:00
|
|
|
// CO2
|
2024-08-11 22:11:50 +08:00
|
|
|
xReturned = xTaskCreate(CO2, "CO2 task", 2048, NULL, tskIDLE_PRIORITY, &CO2_xHandle);
|
2024-06-04 09:54:09 +08:00
|
|
|
if (xReturned == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY) {
|
2024-06-03 18:59:42 +08:00
|
|
|
printf("CO2() Task Error!");
|
|
|
|
}
|
2024-08-11 22:11:50 +08:00
|
|
|
|
2024-06-04 09:54:09 +08:00
|
|
|
|
2024-06-03 16:27:41 +08:00
|
|
|
vTaskStartScheduler();
|
2024-06-04 15:45:40 +08:00
|
|
|
while (1) {};
|
2024-06-03 16:27:41 +08:00
|
|
|
return 0;
|
|
|
|
}
|