Lập trình FreeRTOS VỚI ESP32 theo yêu cầu
Lập trình FreeRTOS VỚI ESP32 theo yêu cầu
DHT dht(15,DHT22);
LiquidCrystal_I2C lcd(0x27,16,2);
Buzzer buzzer(25);
float t = 0;
float h = 0;
#define btn_sem 12
#define led_sem 13
#define btn_on 27
#define btn_off 14
#define ledd 26
void Phatnhac() {
while(1){
buzzer.begin(100); // Khởi
tạo Buzzer tần số
Serial.println("Khởi tạo Buzzer thành công");
buzzer.begin(100);
buzzer.sound(NOTE_F7, 80); buzzer.sound(NOTE_G7, 80);
buzzer.sound(NOTE_A7, 80); buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_C8, 240);
buzzer.sound(NOTE_A7, 80); buzzer.sound(NOTE_G7, 160);
buzzer.sound(NOTE_C8, 160); buzzer.sound(NOTE_G7, 160);
buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_D7, 80); buzzer.sound(NOTE_A7, 240);
buzzer.sound(NOTE_F7, 80); buzzer.sound(NOTE_G7, 80);
buzzer.sound(NOTE_E7, 320);
buzzer.sound(NOTE_E7, 160); buzzer.sound(NOTE_D7, 160);
buzzer.sound(NOTE_E7, 160); buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_G7, 80);
buzzer.sound(NOTE_C7, 160); buzzer.sound(NOTE_F7, 160);
buzzer.sound(NOTE_G7, 80); buzzer.sound(NOTE_A7, 80);
buzzer.sound(NOTE_AS7, 160);
buzzer.sound(NOTE_AS7, 80); buzzer.sound(NOTE_A7, 80);
buzzer.sound(NOTE_G7, 80); buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_G7, 320);
buzzer.sound(NOTE_F7, 80); buzzer.sound(NOTE_G7, 80);
buzzer.sound(NOTE_A7, 80); buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_C8, 240);
buzzer.sound(NOTE_A7, 80); buzzer.sound(NOTE_G7, 160);
buzzer.sound(NOTE_C8, 160); buzzer.sound(NOTE_G7, 160);
buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_D7, 80); buzzer.sound(NOTE_D7, 160);
buzzer.sound(NOTE_E7, 80); buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_C7, 320);
buzzer.sound(NOTE_C7, 160); buzzer.sound(NOTE_D7, 80);
buzzer.sound(NOTE_E7, 160); buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_G7, 80);
buzzer.sound(NOTE_C7, 160); buzzer.sound(NOTE_F7, 160);
buzzer.sound(NOTE_G7, 80); buzzer.sound(NOTE_A7, 80);
buzzer.sound(NOTE_AS7, 160);
buzzer.sound(NOTE_AS7, 80); buzzer.sound(NOTE_A7, 80);
buzzer.sound(NOTE_G7, 80); buzzer.sound(NOTE_F7, 80);
buzzer.sound(NOTE_F7, 430);
buzzer.end(2000);
void setup() {
Sem_Hanle = xSemaphoreCreateCounting(5,0); // cấp tối đa 5 sem, khởi
tạo = 0;
Serial.begin(9600);
//lcd.clear();
lcd.init();
lcd.backlight();
pinMode(btn_sem,INPUT_PULLUP);
pinMode(led_sem,OUTPUT);
pinMode(btn_on,INPUT_PULLUP);
pinMode(btn_off,INPUT_PULLUP);
pinMode(ledd,OUTPUT);
dht.begin();
Mytimer = xTimerCreate("Mytimer", pdMS_TO_TICKS(1000), pdTRUE, 0,
hienthiLCD);
if (Mytimer == NULL) {
Serial.println("Timer creation failed!");
} else {
xTimerStart(Mytimer, portMAX_DELAY);
Serial.println("Timer started!");
}
void loop() {}
while (1){
Phatnhac();
}
}
while (1){
TASK1 = xTaskGetCurrentTaskHandle();
if(digitalRead(btn_sem)==0){
Serial.printf("GIVE SEM\n");
xSemaphoreGive(Sem_Hanle);
Serial.print("So semaphore da give la: ");
Serial.println(uxSemaphoreGetCount(Sem_Hanle));
while (digitalRead(btn_sem)==0){
vTaskDelay(pdMS_TO_TICKS(30));
}
}
vTaskDelay(pdMS_TO_TICKS(30));
}
}
while (1){
TASK2 = xTaskGetCurrentTaskHandle();
if(xSemaphoreTake(Sem_Hanle, pdMS_TO_TICKS(portMAX_DELAY))== pdTRUE )
{
Serial.print("so semaphore con lai la: ");
Serial.println(uxSemaphoreGetCount(Sem_Hanle));
for(uint8_t i = 0; i < 3; i++){
digitalWrite(led_sem,1);
vTaskDelay(pdMS_TO_TICKS(500));
digitalWrite(led_sem,0);
vTaskDelay(pdMS_TO_TICKS(500));
}
}
}
}
if (xMytimer != NULL) {
lcd.setCursor(0, 0);
lcd.printf("Temp:%.1fC",t);
lcd.setCursor(0,1);
lcd.printf("Humid:%.1f%%",h);
}
}