#include <dht.h>
#include <LiquidCrystal_I2C.h>
#include <Arduino_FreeRTOS.h>
void led1(void *param);
void led2(void *param);
dht DHT;
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
#define DHT22_PIN 3
#define BUTTON_PIN 2
struct {
uint32_t total;
uint32_t ok;
uint32_t crc_error;
uint32_t time_out;
uint32_t connect;
uint32_t ack_l;
uint32_t ack_h;
uint32_t unknown;
} stat = { 0, 0, 0, 0, 0, 0, 0, 0};
LiquidCrystal_I2C lcd(0x27,16,2);
const int photoPin = A0;
const int led1Pin = 13;
const int led2Pin = 12;
float temp;
int bri;
TaskHandle_t Handle_aTask;
TaskHandle_t Handle_bTask;
void setup() {
Serial.begin(115200);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(photoPin, INPUT);
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN),isr,FALLING);
lcd.init();
lcd.backlight();
lcd.setBacklight(HIGH);
xTaskCreate(led2,"Task A",1024,NULL,tskIDLE_PRIORITY + 0,&Handle_aTask);
xTaskCreate(led1,"Task B",1024,NULL,tskIDLE_PRIORITY + 0,&Handle_bTask);
vTaskStartScheduler();
}
void isr()
{
if(digitalRead(BUTTON_PIN)==HIGH)
{
led2=FALSE;
led1=FALSE;
}
else
{
led2=TRUE;
led1=TRUE;
}
}
// Temperature warning
void led2(void *param)
{
(void) param;
while(1)
{
int chk = DHT.read22(DHT22_PIN);
temp=DHT.temperature;
lcd.setCursor(0,0);
lcd.print(temp);
if (temp>=40)
{
digitalWrite(led2Pin, HIGH);
vTaskDelay(250/portTICK_PERIOD_MS);
digitalWrite(led2Pin, LOW);
vTaskDelay(250/portTICK_PERIOD_MS);
}
else
{
digitalWrite(led2Pin, LOW);
}
vTaskDelay(50/portTICK_PERIOD_MS);
}
}
// Light control
void led1(void *param)
{
(void) param;
while(1)
{
bri = analogRead(photoPin);
if(bri>=450)
{
digitalWrite(led1Pin, HIGH);
}
else
{
digitalWrite(led1Pin, LOW);
}
vTaskDelay(50/portTICK_PERIOD_MS);
}
}
void loop()
{
}