/***************************************************************
FIAP
Tecnologia em Análise e Desenvolvimento de Sistemas
DISRUPTIVE ARCHITECTURES: IOT, IOB e Generative IA
Professor: André Tritiack
Turma: 2TDSP
****************************************************************
Elaborado por:
Nome: Matheus Felipe Camarinha Duarte - RM:552295
****************************************************************/
#include <DHT.h>
// Configurações de pinos (Questão 01):
#define pinoDHT 2
#define tipoDHT DHT22
#define LED_VERDE 9
#define LED_AMARELO 11
#define LED_VERMELHO 13
#define LED_AZUL 7
#define BTN1 5
#define BTN2 6
#define BTN3 8
#define BTN4 10
#define POT A0
DHT dht(pinoDHT, tipoDHT);
// Declaração de variáveis globais:
float temp, umid;
int contBTN1 = 0, contBTN2 = 0, contBTN3 = 0, contBTN4 = 0;
int limite_inf = 200, limite_sup = 800;
bool estado_critico = false;
void setup() {
questao01();
questao02_pt1();
}
void loop() {
questao02_pt2();
questao03();
questao04();
questao05();
questao06();
questao07();
}
// Questão 01:
void questao01() {
// Configuração dos pinos de I/Os digitais:
pinMode(BTN1, INPUT_PULLUP);
pinMode(BTN2, INPUT_PULLUP);
pinMode(BTN3, INPUT_PULLUP);
pinMode(BTN4, INPUT_PULLUP);
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_AMARELO, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
pinMode(LED_AZUL, OUTPUT);
Serial.begin(9600); // bits/s
Serial.println("2TDSPF Matheus Felipe Camarinha Duarte - RM: 552295"); // Substitua pelos RMs
}
// Questão 02 parte 1:
void questao02_pt1() {
for (int i = 0; i < 5; i++) {
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_AMARELO, LOW);
delay(300);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, HIGH);
delay(300);
}
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, LOW);
}
// Questão 02 parte 2:
void questao02_pt2() {
digitalWrite(LED_VERDE, HIGH);
delay(300);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, HIGH);
delay(300);
digitalWrite(LED_AMARELO, LOW);
digitalWrite(LED_VERMELHO, HIGH);
delay(300);
digitalWrite(LED_VERMELHO, LOW);
digitalWrite(LED_AZUL, HIGH);
delay(300);
digitalWrite(LED_AZUL, LOW);
delay(3000);
}
// Questão 03:
void questao03() {
if (digitalRead(BTN1) == LOW) {
// Semáforo
Serial.println("Semáforo - Verde");
digitalWrite(LED_VERDE, HIGH);
delay(1000);
digitalWrite(LED_VERDE, LOW);
Serial.println("Semáforo - Amarelo");
digitalWrite(LED_AMARELO, HIGH);
delay(1000);
digitalWrite(LED_AMARELO, LOW);
Serial.println("Semáforo - Vermelho");
digitalWrite(LED_VERMELHO, HIGH);
delay(1000);
digitalWrite(LED_VERMELHO, LOW);
}
if (digitalRead(BTN2) == LOW) {
// Alerta - LED amarelo piscando
Serial.println("Alerta! LED amarelo piscando.");
digitalWrite(LED_AMARELO, HIGH);
delay(500);
digitalWrite(LED_AMARELO, LOW);
delay(500);
}
}
// Questão 04:
void questao04() {
if (digitalRead(BTN3) == LOW) {
delay(200); // debounce
if (digitalRead(BTN3) == HIGH) {
// Soltando o botão
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_AMARELO, HIGH);
digitalWrite(LED_VERMELHO, HIGH);
digitalWrite(LED_AZUL, HIGH);
}
}
if (digitalRead(BTN4) == LOW) {
delay(200); // debounce
if (digitalRead(BTN4) == HIGH) {
// Soltando o botão
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, LOW);
digitalWrite(LED_VERMELHO, LOW);
digitalWrite(LED_AZUL, LOW);
}
}
}
// Questão 05:
void questao05() {
if (digitalRead(BTN1) == LOW) {
contBTN1++;
}
if (digitalRead(BTN2) == LOW) {
contBTN2++;
}
if (digitalRead(BTN3) == LOW) {
contBTN3++;
}
if (digitalRead(BTN4) == LOW) {
contBTN4++;
}
if (contBTN1 >= 5 || contBTN2 >= 5 || contBTN3 >= 5 || contBTN4 >= 5 || (contBTN1 + contBTN2 + contBTN3 + contBTN4) >= 12) {
contBTN1 = 0;
contBTN2 = 0;
contBTN3 = 0;
contBTN4 = 0;
}
}
// Questão 06:
void questao06() {
int valor = analogRead(POT);
Serial.print("Valor do POT: ");
Serial.println(valor);
if (valor < 200) {
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_AMARELO, LOW);
digitalWrite(LED_VERMELHO, LOW);
digitalWrite(LED_AZUL, LOW);
} else if (valor >= 200 && valor < 500) {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, HIGH);
digitalWrite(LED_VERMELHO, LOW);
digitalWrite(LED_AZUL, LOW);
} else if (valor >= 500 && valor < 800) {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, LOW);
digitalWrite(LED_VERMELHO, HIGH);
digitalWrite(LED_AZUL, LOW);
} else if (valor >= 800 && valor < 1023) {
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_AMARELO, HIGH);
digitalWrite(LED_VERMELHO, HIGH);
delay(500);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARELO, LOW);
digitalWrite(LED_VERMELHO, LOW);
delay(500);
} else if (valor == 1023) {
digitalWrite(LED_AZUL, HIGH);
Serial.println("Situação Crítica");
estado_critico = true;
}
if (estado_critico) {
while (true) {
if (digitalRead(BTN1) == LOW || digitalRead(BTN2) == LOW || digitalRead(BTN3) == LOW || digitalRead(BTN4) == LOW) {
break;
}
}
estado_critico = false;
}
}
// Questão 07:
void questao07() {
int valor = analogRead(POT);
if (valor > limite_sup) {
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_VERMELHO, HIGH);
} else if (valor < limite_inf) {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_VERMELHO, LOW);
}
}