#include <Arduino_FreeRTOS.h>
#include <Servo.h>
#define WHITE_PIN 6
#define RED_PIN 5
#define YELLOW_PIN 4
#define GREEN_PIN 3
#define SERVO_PIN 7
int leds[] = {GREEN_PIN,YELLOW_PIN,RED_PIN,WHITE_PIN}; //{VERDE, AMARELO, VERMELHO, BRANCO}
Servo servo;
float temperature = 0;
const float BETA = 3950;
void setup() {
Serial.begin(9600);
for(int i = 0; i < 4; i++) pinMode(leds[i], OUTPUT);
pinMode(A1, INPUT);
servo.attach(SERVO_PIN);
servo.write(90);
xTaskCreate(getTemperature, "temperature", 128, NULL, 1, NULL);
xTaskCreate(temperatureLEDs, "leds", 128, NULL, 1, NULL);
xTaskCreate(openBarn, "barn", 128, NULL, 1, NULL);
}
void openBarn(void *parameters) {
while(1){
if(!analogRead(A1) && temperature >= 18 && temperature <= 28){
servo.write(0);
delay(5000);
}
servo.write(90);
}
}
void getTemperature(void *parameters) {
while(1) {
offLeds();
digitalWrite(YELLOW_PIN, !digitalRead(YELLOW_PIN));
int analogValue = analogRead(A0);
temperature = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
delay(500);
digitalWrite(YELLOW_PIN, !digitalRead(YELLOW_PIN));
delay(500);
}
}
void offLeds() {
for(int i = 0; i < 3; i++) {
if(!(leds[i]==YELLOW_PIN))digitalWrite(leds[i], LOW);
}
}
void temperatureLEDs(void *parameters) {
while(1) {
offLeds();
if(temperature >= 18 && temperature <= 28) {
digitalWrite(GREEN_PIN, HIGH);
}
else if(temperature > 28){
digitalWrite(WHITE_PIN, HIGH);
digitalWrite(RED_PIN, HIGH);
Serial.println("Ventilador Ligado");
}else{
Serial.println("Aquecedor Ligado");
digitalWrite(RED_PIN, HIGH);
}
}
}
void loop () {
}