// Integrantes:
// Alane Rocha 1 - RM561052
// Maria Eduarda Araujo Penas 2 - RMxxxx
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Definições de LEDs
#define LED_BLUE 3
#define LED_RED 4
#define LED_YELLOW 5
#define LED_GREEN 6
// Definições de botões (conforme diagrama)
#define BTN1 7
#define BTN2 11
#define BTN3 13
#define BTN4 8
// Potenciômetro
#define POT A0
// Variáveis globais usadas em todos os exercícios
int contador = 0;
int placar1 = 0;
int placar2 = 0;
int modo = 0; // 0 = ajuste temperatura | 1 = ajuste umidade
int setTemp = 25;
int setUmid = 50;
// Estados anteriores dos botões (para borda de subida)
int lastBtn1 = HIGH, lastBtn2 = HIGH, lastBtn3 = HIGH, lastBtn4 = HIGH;
void setup() {
Serial.begin(9600);
// Configura LEDs
pinMode(LED_BLUE, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
// Configura botões (com pull-up interno)
pinMode(BTN1, INPUT_PULLUP);
pinMode(BTN2, INPUT_PULLUP);
pinMode(BTN3, INPUT_PULLUP);
pinMode(BTN4, INPUT_PULLUP);
dht.begin();
}
void loop() {
// Descomente o exercício que deseja rodar:
// ex01();
// ex02();
// ex03();
ex04();
// ex05();
}
///////////////////// Exercício 1 /////////////////////
void ex01() {
int btnState = digitalRead(BTN1);
if (btnState == LOW && lastBtn1 == HIGH) { // borda de subida
contador++;
Serial.print("Contador: ");
Serial.println(contador);
if (contador < 5) {
for (int i = 0; i < contador; i++) {
digitalWrite(LED_BLUE, HIGH);
delay(200);
digitalWrite(LED_BLUE, LOW);
delay(200);
}
} else {
digitalWrite(LED_BLUE, HIGH);
Serial.println("Meta atingida!");
}
}
lastBtn1 = btnState;
}
///////////////////// Exercício 2 /////////////////////
void ex02() {
int btn1 = digitalRead(BTN1);
int btn2 = digitalRead(BTN2);
int reset = digitalRead(BTN3);
if (btn1 == LOW && lastBtn1 == HIGH) placar1++;
if (btn2 == LOW && lastBtn2 == HIGH) placar2++;
if (reset == LOW && lastBtn3 == HIGH) {
placar1 = 0; placar2 = 0;
digitalWrite(LED_BLUE, LOW);
digitalWrite(LED_RED, LOW);
}
if (placar1 >= 10) {
digitalWrite(LED_BLUE, HIGH);
digitalWrite(LED_RED, LOW);
Serial.println("Vencedor: Jogador 1!");
} else if (placar2 >= 10) {
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_BLUE, LOW);
Serial.println("Vencedor: Jogador 2!");
} else {
blinkLed(LED_BLUE, placar1);
blinkLed(LED_RED, placar2);
}
lastBtn1 = btn1;
lastBtn2 = btn2;
lastBtn3 = reset;
}
///////////////////// Exercício 3 /////////////////////
void ex03() {
int btn1 = digitalRead(BTN1);
int btn2 = digitalRead(BTN2);
int reset = digitalRead(BTN3);
int compare = digitalRead(BTN4);
if (btn1 == LOW && lastBtn1 == HIGH) placar1++;
if (btn2 == LOW && lastBtn2 == HIGH) placar2++;
if (reset == LOW && lastBtn3 == HIGH) {
placar1 = 0; placar2 = 0;
digitalWrite(LED_BLUE, LOW);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
}
if (compare == LOW && lastBtn4 == HIGH) {
if (placar1 > placar2) digitalWrite(LED_BLUE, HIGH);
else if (placar2 > placar1) digitalWrite(LED_RED, HIGH);
else {
digitalWrite(LED_BLUE, HIGH);
digitalWrite(LED_RED, HIGH);
}
}
blinkLed(LED_BLUE, placar1);
blinkLed(LED_RED, placar2);
lastBtn1 = btn1;
lastBtn2 = btn2;
lastBtn3 = reset;
lastBtn4 = compare;
}
///////////////////// Exercício 4 /////////////////////
// variáveis globais
int estado_led = 0;
void ex04() {
int btn1 = digitalRead(BTN1);
int btn2 = digitalRead(BTN2);
int btn3 = digitalRead(BTN3);
int btn4 = digitalRead(BTN4);
if (btn1 == LOW && lastBtn1 == HIGH) estado_led = 1;
if (btn2 == LOW && lastBtn2 == HIGH) estado_led = 2;
if (btn3 == LOW && lastBtn3 == HIGH) estado_led = 3;
if (btn4 == LOW && lastBtn4 == HIGH) estado_led = 0; // reset
digitalWrite(LED_BLUE, estado_led == 1);
digitalWrite(LED_RED, estado_led == 2);
digitalWrite(LED_YELLOW, estado_led == 3);
digitalWrite(LED_GREEN, estado_led == 4); // opcional
lastBtn1 = btn1;
lastBtn2 = btn2;
lastBtn3 = btn3;
lastBtn4 = btn4;
}
///////////////////// Exercício 5 /////////////////////
void ex05() {
int btnMode = digitalRead(BTN1);
int btnSave = digitalRead(BTN2);
int valorPot = analogRead(POT);
// alterna modo
if (btnMode == LOW && lastBtn1 == HIGH) {
modo = !modo;
Serial.print("Modo alterado: ");
Serial.println(modo == 0 ? "Temperatura" : "Umidade");
}
if (modo == 0) {
int ajusteTemp = map(valorPot, 0, 1023, 15, 35);
Serial.print("Ajustando Temp: ");
Serial.println(ajusteTemp);
if (btnSave == LOW && lastBtn2 == HIGH) {
setTemp = ajusteTemp;
Serial.print("SetPoint Temp salvo: ");
Serial.println(setTemp);
}
} else {
int ajusteUmid = map(valorPot, 0, 1023, 20, 80);
Serial.print("Ajustando Umid: ");
Serial.println(ajusteUmid);
if (btnSave == LOW && lastBtn2 == HIGH) {
setUmid = ajusteUmid;
Serial.print("SetPoint Umid salvo: ");
Serial.println(setUmid);
}
}
float t = dht.readTemperature();
float h = dht.readHumidity();
Serial.print("Temp: "); Serial.print(t);
Serial.print(" | Umid: "); Serial.println(h);
if (t > setTemp) {
digitalWrite(LED_RED, HIGH);
Serial.println("ALARME! TEMPERATURA ALTA!");
} else digitalWrite(LED_RED, LOW);
if (h < setUmid) {
digitalWrite(LED_BLUE, HIGH);
Serial.println("ALARME! UMIDADE BAIXA!");
} else digitalWrite(LED_BLUE, LOW);
lastBtn1 = btnMode;
lastBtn2 = btnSave;
delay(500);
}
//////////////////// Função Auxiliar ////////////////////
void blinkLed(int led, int vezes) {
for (int i = 0; i < vezes; i++) {
digitalWrite(led, HIGH);
delay(200);
digitalWrite(led, LOW);
delay(200);
}
}