// >>>>> PROJETO TERMÔMETRO <<<<<
const int LM35 = 0; // label que define o pino analog usado.
const int Led1 = 2; // pino do LED1
const int Led2 = 4; // pino do LED2
const int Led3 = 6; // pino do LED3
const int Led4 = 8; // pino do LED4
const int buzzer = 12;
const int buttonPin = 13;
float temperatura = 0; // inicializa a variável usada para armazenar o valor de temperatura
int ADClido = 0; // inicializa a variável usada para armazenar o valor lido em analog e já convertido pelo ADC
unsigned long last_temp_buzzer = 0;
unsigned long temp_buzzer;
unsigned long last_temp_print = 0;
unsigned long temp_print;
int controle_buzzer = 0;
int controle_print = 0;
int cont = 0;
// inicializando as variaveis do debouncing
int reading_button;
int lastButtonState = LOW;
int buttonState = LOW;
unsigned long lastDebTime = 0;
unsigned long debounceDelay = 50;
void setup(){
Serial.begin(9600);
analogReference(INTERNAL); // Se estiver usando Arduino Mega, use INTERNAL
pinMode(buzzer, OUTPUT); // definindo os pinos do buzzer e LEDs como saída
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
pinMode(Led4, OUTPUT);
}
void loop(){
ADClido = analogRead(LM35); // lê o valor analógico do sensor e já converte e armaneza valores entre 0 e 1023.
temperatura = ADClido * 0.1075268817; // define o valor de temperatura para o ADClido
if (controle_print == 0){ //se o controle for 0
last_temp_print = millis(); // inicia a contagem do tempo
controle_print = 1; // garante que só entra aqui uma vez a cada 500 ms
}
temp_print = millis() - last_temp_print;
if (temp_print >= 500){ //se tiver passado 500 ms
Serial.print((String)"Temperatura = " + temperatura + " *C" + "\n");
controle_print = 0;
}
if (temperatura < 20.0){
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
}
else if ((temperatura >= 20.0) && (temperatura <= 25.0)){ // caso para temperatura ambiente
digitalWrite(Led1, HIGH);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
}
else if ((temperatura > 25.0) && (temperatura <= 30.0)){
digitalWrite(Led1, HIGH);
digitalWrite(Led2, HIGH);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
}
else if ((temperatura > 30.0) && (temperatura < 40.0)){
digitalWrite(Led1, HIGH);
digitalWrite(Led2, HIGH);
digitalWrite(Led3, HIGH);
digitalWrite(Led4, LOW);
}
else if (temperatura >= 40.0){ // temp acima de 40.0
digitalWrite(Led1, HIGH);
digitalWrite(Led2, HIGH);
digitalWrite(Led3, HIGH);
digitalWrite(Led4, HIGH);
//acionando o buzzer se a temperatura for acima de 40
if (controle_buzzer == 0){ //se o controle for 0
last_temp_buzzer = millis(); // inicia a contagem do tempo
controle_buzzer = 1; // garante que só entra aqui uma vez a cada 3 segundos
}
temp_buzzer = millis() - last_temp_buzzer;
if ((temp_buzzer >= 3000)&&(temp_buzzer < 4000)){ //se tiver passado 3 segundos
digitalWrite(buzzer, HIGH);
}
if (temp_buzzer >= 4000){ // aqui terá passado 1 segundo com ele em HIGH!
digitalWrite(buzzer, LOW);
controle_buzzer = 0;
}
}
reading_button = digitalRead(buttonPin); // lê o estado do botão e coloca na variável definida
if (reading_button != lastButtonState) { // se o estado do botão mudou, entra nesse laço
lastDebTime = millis(); // reseta o debouncing timer --> o last debouncing time passa a ser o momento atual (usa millis)
}
if ((millis() - lastDebTime) > debounceDelay) { // se o intervalo de tempo entre o momento em que o botão foi apertado inicialmente e o momento atual
//for maior do que o debounce delay, entra nesse laço, pois já tem tempo o suficiente para não estar mais ocorrendo o bouncing
if (reading_button != buttonState) { //se o estado do botão na variável buttonState for diferente do estado lido na variável reading
buttonState = reading_button; // reading será o novo buttonState
if (buttonState == HIGH) { // se o botão estiver em estado HIGH, ou seja, estiver apertado
cont ++; //incrementa o contador
Serial.println((String)"O botão foi apertado " + cont + " vez(es)" + "\n");
Serial.println((String)"O sensor está medindo " + temperatura + " *C" + "\n");
}
}
}
lastButtonState = reading_button; // atribui a leitura atual para o estado passado do botão, para que fique registrado para o próximo loop.
}