Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Keypad.h>//biblioteca para controle do teclado de membrana.
- #include <DallasTemperature.h>//biblioteca para controle da temperatura que o sensor está medindo.
- #include <Wire.h>//biblioteca para controle da temperatura que o sensor está medindo.
- #include <LiquidCrystal_I2C.h>//biblioteca para utilização do display 16x2 com o modulo I2C.
- int menortemp=999;//controle de temperatura.
- int menortemp2=999;//controle de temperatura.
- int tempatual=0;//controle de temperatura.
- int tempatual2=0;//controle de temperatura.
- int controleTempo=0;//controle de tempo de banho.
- int total;
- int resistencia=13;//porta digital que contola as ações referentes a resistencia.
- int valvulaQuente=10;//porta digital que contola as ações referentes a valvula de agua quente.
- int valvulaFria=11;//porta digital que contola as ações referentes a valvula de agua fria.
- int buzzer=12;//porta digital que contola as ações referentes ao buzzer.
- int minB=35;//variavel de controle dos minutos de banho.
- int tempoPadrao=0;//tempo padrão do banho.
- int banho=10;//variavel de exibição de tempo.
- int termino=0,termino2=0;//controle de ações.
- int imprimeTemp=1;
- int controle=0,controle2=0,controle3=0;
- int o=1;
- float temp1 = 0;
- float temp2 = 0;
- long previousMillis = 0; // Variável de controle do tempo
- long redLedInterval = 5000; // Tempo em ms do intervalo a ser executado
- #define bMenu 5 // Os pinos analógicos podem ser
- #define bChange 6 // usados como digitais, bastando
- #define bUp 13 // referenciá-los por A0, A1..
- #define bDown A5
- #define bMenu0 90 // Valor de referência que a
- #define bChange0 91 // função CheckButton() passa
- #define bUp0 92 // indicando que um botão foi
- #define bDown0 93 // solto
- boolean aMenu, aChange, aUp, aDown; // Grava o ultimo valor lidos nos botões.
- int variavel; // variavel a ser alterada pelo menu
- char state = 1; // variável que guarda posição atual do menu
- OneWire oneWire(14);
- DallasTemperature sensors(&oneWire);//endereço de memoria que auxiliará o sensor a medir as temperaturas.
- DeviceAddress address1 = {0x28, 0xFF, 0x2C, 0xA0, 0x94, 0x16, 0x5, 0xF7};//dirección del sensor 1
- DeviceAddress address2 = {0x28, 0xFF, 0xED, 0x93, 0x94, 0x16, 0x5, 0xD8};//dirección del sensor 2
- const byte LINHAS = 4;
- const byte COLUNAS = 4;
- //Matriz de caracteres
- char matriz_teclas[LINHAS][COLUNAS] =
- {
- {'1','2','3','A'},
- {'4','5','6','B'},
- {'7','8','9','C'},
- {'*','0','#','D'},
- };
- //Definicao dos pinos das linhas
- byte PinosLinhas[LINHAS] = {4, 5, 6, 7};
- //Definicao dos pinos das colunas
- byte PinosColunas[COLUNAS] = {8, 9, 10,11};
- unsigned long numeroSelecionado = 35;//variavel de conversão do teclado de caracter para inteiro.
- unsigned long tempoSelecionado = 0;//variavel de conversão do teclado de caracter para inteiro.
- Keypad teclado = Keypad( makeKeymap(matriz_teclas), PinosLinhas,
- PinosColunas, LINHAS, COLUNAS);
- LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);//caminho trilhado para ativação do display.
- void setup() {
- lcd.begin(16,2);
- Serial.begin(9600);
- //splash
- lcd.setCursor(0,0);
- lcd.print("CHUVEIRO AUTOMAT");
- lcd.setCursor(0,1);
- lcd.print("TCC 2 - WEMERSON");
- delay(2000);
- lcd.clear();
- // Configura o status das portas digitais
- pinMode(resistencia,OUTPUT);
- pinMode(valvulaQuente,OUTPUT);
- pinMode(valvulaFria,OUTPUT);
- pinMode(buzzer,OUTPUT);
- digitalWrite(resistencia,HIGH);
- digitalWrite(valvulaQuente,HIGH);
- digitalWrite(valvulaFria,HIGH);
- digitalWrite(buzzer,LOW);
- tempoPadrao=(10*60);//definindo o tempo padrão do banho convertendo 10 minutos para 600 segundos.
- }
- void loop() {
- sensors.requestTemperatures(); //envía el comando para obtener las temperaturas
- temp1= sensors.getTempC(address1);//Se obtiene la temperatura en °C del sensor 1
- temp2= sensors.getTempC(address2);//Se obtiene la temperatura en °C del sensor 2
- switch (state) {
- case 1: //DIGITE A TEMPERATURA
- switch (CheckButton()) {
- case bMenu:
- tone(PinoBuzzer, 1500, 50);
- digitalWrite(A0, HIGH);
- Set_state(2);
- break;
- case bDown:
- lcd.clear();
- tone(PinoBuzzer, 1500, 50);
- Set_state(6);
- break;
- default:
- Set_state(1);
- }
- break;
- case 2: //DIGITE TEMPO DE BANHO
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(PinoBuzzer, 1500, 50);
- digitalWrite(A0, LOW);
- startTime = millis(); // guarde o tempo de partida
- Set_state(3);
- break;
- case bChange:
- lcd.clear();
- tone(PinoBuzzer, 1500, 50);
- digitalWrite(A0, LOW);
- Set_state(1);
- break;
- default:
- Set_state(2);
- }
- break;
- case 3: //MONITOR DE BANHO
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(PinoBuzzer, 1500, 50);
- Set_state(4);
- break;
- case bChange:
- lcd.clear();
- digitalWrite(A0, HIGH);
- tone(PinoBuzzer, 1500, 50);
- Set_state(2);
- break;
- default:
- Set_state(3);
- }
- break;
- case 4: //FIM DE BANHO
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(PinoBuzzer, 1500, 50);
- Set_state(1);
- break;
- case bChange:
- lcd.clear();
- tone(PinoBuzzer, 1500, 50);
- // Set_state(3);
- break;
- default:
- Set_state(4);
- }
- break;
- default: ;
- }
- }
- char CheckButton() {
- if (aMenu != digitalRead(bMenu)) {
- aMenu = !aMenu;
- if (aMenu) return bMenu0; else return bMenu;
- } else if (aChange != digitalRead(bChange)) {
- aChange = !aChange;
- if (aChange) return bChange0; else return bChange;
- } else if (aUp != digitalRead(bUp)) {
- aUp = !aUp;
- if (aUp) return bUp0; else return bUp;
- } else if (aDown != digitalRead(bDown)) {
- aDown = !aDown;
- delay(2000);
- if (aDown) return bDown0; else return bDown;
- } else
- return 0;
- }
- void Set_state(char index) {
- state = index; // Atualiza a variável state para a nova tela
- switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente
- case 1: //==================== state 1
- lcd.setCursor(0,0);
- lcd.print("DIGITE TEMP. OU ");
- lcd.setCursor(0,1);
- lcd.print("CONFIRME:");
- lcd.print(numeroSelecionado);
- lcd.write(223);
- lcd.print(" > A");
- break;
- case 2: //==================== state 2
- break;
- case 3: //==================== state 3
- break;
- case 4: //==================== state 4
- break;
- default: ;
- }
- }
- char teclaPressionada = teclado.getKey();//leitura da temperatura que o usuario deseja tomar o banho. 'A'
- if (teclaPressionada != 'A'){
- if(
- teclaPressionada == '0' ||
- teclaPressionada == '1' ||
- teclaPressionada == '2' || //verificação de qual tecla foi pressionada.
- teclaPressionada == '3' ||
- teclaPressionada == '4' ||
- teclaPressionada == '5' ||
- teclaPressionada == '6' ||
- teclaPressionada == '7' ||
- teclaPressionada == '8' ||
- teclaPressionada == '9'
- ){
- numeroSelecionado = numeroSelecionado * 10 + (teclaPressionada - 0x30);
- lcd.setCursor(11,1);
- lcd.print(numeroSelecionado);
- }
- // A funciona como enter: Continua o programa
- if(teclaPressionada == 'A'){
- if(numeroSelecionado<temp2 || numeroSelecionado>50) {
- lcd.clear();
- lcd.print("TEMP INVALIDA ");
- delay(3000);
- }
- }
- }
- else
- {
- lcd.setCursor(0,0);
- lcd.print("DIGITE TEMPO OU ");
- lcd.setCursor(0,1);
- lcd.print("CONFIRME:");
- lcd.print(numeroSelecionado);
- lcd.write(223);
- lcd.print(" > A");
- char teclaPressionada2 = teclado.getKey();//leitura do tempi que o usuario deseja tomar o banho caso não queira o tempo padrão.
- if(
- teclaPressionada2 == '0' ||
- teclaPressionada2 == '1' ||
- teclaPressionada2 == '2' ||
- teclaPressionada2 == '3' ||
- teclaPressionada2 == '4' ||
- teclaPressionada2 == '5' ||
- teclaPressionada2 == '6' ||
- teclaPressionada2 == '7' ||
- teclaPressionada2 == '8' ||
- teclaPressionada2 == '9'
- ){
- tempoSelecionado = tempoSelecionado * 10 + (teclaPressionada2 - 0x30);
- lcd.print("TEMPO ESCOLHIDO: ");
- lcd.print(tempoSelecionado);
- delay(1000);
- }
- if(tempoSelecionado>1200) {//caso o tempo seja maior q 20 minutos o sistema volta para o inicio para q ele digite novamente um tempo valido.
- lcd.clear();
- lcd.print("TEMPO INVALIDO");
- delay(3000);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement