#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <U8g2lib.h>
#if CONFIG_FREERTOS_UNICORE
#define ARDUINO_RUNNING_CORE 0
#else
#define ARDUINO_RUNNING_CORE 1
#endif
#define BTN_PIN 5
#define LED_RED 1
#define LED_BLUE 4
#define LED_GREEN 0
//创建任务函数F
void Task1(void *pvParameters);
void Task2(void *pvParameters);
//U8G2_SSD1306_128X64_NONAME_F_SW_I2C display(U8G2_R0,/*clock=*/ 9,/* data=*/ 8,/*reset=*/ U8X8_PIN_NONE);
U8G2_SSD1306_128X64_NONAME_F_SW_I2C display(U8G2_R0,9, 8 , U8X8_PIN_NONE);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(BTN_PIN, INPUT_PULLUP);
pinMode(LED_RED, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
display.begin();
//display.setFont(u8x8_font_pxplusibmcgathin_f);
display.setFont(u8g2_font_unifont_t_chinese1);
display.drawStr(20,30,"你好,新世界!");
xTaskCreatePinnedToCore(
Task1, "Task1" // 任务名称
,
1024 // 任务栈大小
,
NULL // 任务参数指针
,
2 // 任务优先级大小 -- 值越大优先级越大
,
NULL // 任务句柄指针
,
ARDUINO_RUNNING_CORE); // 处理器核心编号
xTaskCreatePinnedToCore(
Task2, "Task2" // 任务名称
,
1024 // 任务栈大小
,
NULL // 任务参数指针
,
1 // 任务优先级大小 -- 值越大优先级越大
,
NULL // 任务句柄指针
,
ARDUINO_RUNNING_CORE); // 处理器核心编号
}
void loop() {
// 空闲
Serial.println("loop");
/*
display.clearBuffer();
display.setCursor(0,7);
display.print(">>");
display.sendBuffer();
*/
//display.firstPage();
do {
//display.setFont(u8g2_font_ncenB14_tr);
display.setFont(u8x8_font_pxplusibmcgathin_f);
display.drawStr(0,15,"Hello World!");
} while ( display.nextPage() );
delay(100);
}
void Task1(void *pvParameters) { // 任务1
for (;;) {
//
Serial.println("task1");
digitalWrite(LED_RED, HIGH);
vTaskDelay(pdMS_TO_TICKS(1000));
digitalWrite(LED_RED, LOW);
vTaskDelay(pdMS_TO_TICKS(1000));
if (digitalRead(BTN_PIN) == LOW) {
Serial.println("GPIO_BTN is LOW. Deleting task...");
vTaskDelete(NULL); // 删除当前任务
}
}
}
void Task2(void *pvParameters) { // 任务2
for (;;) {
Serial.println("task2");
digitalWrite(LED_BLUE, HIGH);
vTaskDelay(pdMS_TO_TICKS(2000));
digitalWrite(LED_BLUE, LOW);
vTaskDelay(pdMS_TO_TICKS(2000));
}
}