Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal_I2C.h> // Biblioteca LCD I2C
- #include <TimerOne.h> // Biblioteca do timer1
- #include <Limits.h>
- const int temperatura = 0;
- const int buzzer = A2;
- int SistemaOnOff = 8;
- int pinoativaluz = A1; //Pino ligado ao acionamento da lampada
- int pinopir = 7; //Pino ligado ao sensor
- int acionamento; //Variavel para guardar valor do sensor
- int ConRegre = 240; //variavel com o valor definido de 30 segundos
- int ConRegreReg = ConRegre; //receble valor de referencia
- int MenuCarga = 1;
- int ConfigTemp = 29;
- int percentc1 = 100; // valor máximo que pode atingir
- int percentc2 = 100;
- int percentc3 = 100;
- int percentc4 = 100;
- int val1 = 0;// variavel que recebe valores entre 0 e 100
- int val2 = 0;
- int val3 = 0;
- int val4 = 0;
- int str1 = 0; // Variavel string para receber dados do teclado
- int str2 = 0;
- int str3 = 0;
- int str4 = 0;
- int str5 = 0;
- #define bLeft 10 // Os pinos analógicos podem ser
- #define bRight 11 // usados como digitais, bastando
- //#define bUp 13
- #define bUp 3 // <----------- mudei era 13
- #define bDown 12
- #define bLeft0 90 // Valor de referencia que a
- #define bRight0 91 // funcaoo CheckButton() passa
- #define bUp0 92 // indicando que um botão foi
- #define bDown0 93 // solto
- boolean aLeft, aRight, aUp, aDown; // Grava o ultimo valor lidos nos botoes.
- const int sensorTemp = 0;
- int valorSensorTemp = 0;
- int menorValorTemp = INT_MAX;
- int state = 1; // variável que guarda posição atual do menu
- //LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
- LiquidCrystal_I2C lcd(0x39, 2, 1, 0, 7, 6, 5, 4, 3, POSITIVE); // <--------- Meu LCD
- byte seta_direita[8] = {0x00, 0x04, 0x02, 0x1F, 0x02, 0x04, 0x00, 0x00}; //cria seta direita
- byte seta_esquerda[8] = {0x00, 0x04, 0x08, 0x1F, 0x08, 0x04, 0x00, 0x00}; //cria seta esquerda
- byte seta_abaixo[8] = {0x00, 0x04, 0x04, 0x15, 0x0E, 0x04, 0x00, 0x00}; // cria seta abaixo
- byte seta_acima[8] = {0x00, 0x04, 0x0E, 0x15, 0x04, 0x04, 0x00, 0x00}; // cria seta acima
- //----------------------------------
- void callback() // Cada vez que "estoura" o timer 1 chama esta rotina
- {
- ConRegre--;
- if (ConRegre <= 0) ConRegre = 0; // Se chegar em zero, fica em zero
- }
- //--------------------------------
- void setup()
- {
- Serial.begin(9600);
- Timer1.initialize(1000000); // initialize timer1, and set a 1 second period
- Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
- lcd.begin(16, 2); // Iniciando a biblioteca do LCD
- lcd.print("INICIANDO... ");
- delay(500);
- lcd.createChar(1, seta_direita); // vai criar novos caracteres
- lcd.createChar(2, seta_esquerda);
- lcd.createChar(3, seta_abaixo);
- lcd.createChar(4, seta_acima);
- pinMode(bLeft, INPUT_PULLUP); // Botões
- pinMode(bRight, INPUT_PULLUP);
- pinMode(bUp, INPUT_PULLUP);
- pinMode(bDown, INPUT_PULLUP);
- pinMode(A3, OUTPUT);
- pinMode(buzzer, OUTPUT);
- pinMode(pinoativaluz, OUTPUT); //Define pino como saida
- pinMode(pinopir, INPUT); //Define pino sensor como entrada
- pinMode(SistemaOnOff, OUTPUT);
- digitalWrite(SistemaOnOff, HIGH); //Comuta para o controle digital digital
- digitalWrite(pinoativaluz, HIGH);
- }
- //----------------------------------
- void loop()
- {
- if (MenuCarga == 1)
- {
- Controla_Vent_Temp();
- }
- acionamento = digitalRead(pinopir); //Le o valor do sensor
- if (acionamento != 0)
- {
- digitalWrite(pinoativaluz, HIGH); //aciona a luz se estiver desligada
- ConRegre = ConRegreReg; // reseta o contador para o valor definido pela variável ConRegreReg
- }
- if (ConRegre <= 0)
- {
- digitalWrite(pinoativaluz, LOW); // desliga a luz ao final da contagem
- }
- ////////////////////////////////////////////////////cod. sensor
- switch (state)
- {
- case 1: //MENU 1 - CONTROLE (LIGADO/DESLIGADO)
- if (digitalRead(8) == HIGH) // Se o sistema estiver ligado
- {
- lcd.setCursor(0, 1);
- lcd.print("LIGADO "); // Print LIGADO
- }
- else // Se o sistema estiver desligado
- {
- lcd.setCursor(0, 1);
- lcd.print("DESLIGADO "); // Print DESLIGADO
- }
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(2);
- break;
- case bDown:
- lcd.clear();
- Set_state(12);
- break;
- case bLeft:
- digitalWrite(8, LOW);
- lcd.setCursor(0, 1);
- lcd.print("DESLIGADO ");
- tone(buzzer, 1500, 50);
- break;
- case bRight:
- digitalWrite(8, HIGH);
- lcd.setCursor(0, 1);
- lcd.print("LIGADO ");
- tone(buzzer, 1500, 50);
- break;
- default:
- Set_state(1);
- break;
- }
- break;
- case 2: //ILUMINACAO
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(3);
- break;
- case bDown:
- lcd.clear();
- Set_state(1);
- break;
- case bLeft:
- lcd.clear();
- // ???? O que fazer aqui? <----------------
- tone(buzzer, 1500, 50);
- break;
- case bRight:
- lcd.clear();
- // ???? O que fazer aqui? <----------------
- tone(buzzer, 1500, 50);
- break;
- default:
- Set_state(2);
- break;
- }
- break;
- case 3: //ILUMINACAO - CONFIGURA TEMPO
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(4);
- break;
- case bDown:
- lcd.clear();
- Set_state(2);
- break;
- case bLeft:
- if (ConRegreReg >= 30)
- {
- ConRegreReg = ConRegreReg - 30;
- }
- ConRegre = ConRegreReg;
- tone(buzzer, 1500, 50);
- break;
- case bRight:
- ConRegreReg = ConRegreReg + 30;
- ConRegre = ConRegreReg;
- tone(buzzer, 1500, 50);
- break;
- default:
- Set_state(3);
- break;
- }
- break;
- case 4: //ILUMINACAO - MONITORACAO
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(5);
- break;
- case bDown:
- lcd.clear();
- Set_state(3);
- break;
- default:
- Set_state(4);
- break;
- }
- break;
- case 5: //CARGA
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(6);
- break;
- case bDown:
- lcd.clear();
- Set_state(4);
- break;
- default:
- Set_state(5);
- break;
- }
- break;
- case 6: //CARGA - 1
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(7);
- break;
- case bDown:
- lcd.clear();
- Set_state(5);
- break;
- case bLeft:
- if (val1 < 100 )
- {
- val1 = val1 + 5;
- str1 = val1;
- tone(buzzer, 1500, 50);
- }
- break;
- case bRight:
- if (val1 > 0) {
- val1 = val1 - 5;
- str1 = val1;
- tone(buzzer, 1500, 50);
- }
- break;
- default:
- Set_state(6);
- break;
- }
- break;
- case 7: //CARGA - 2
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(8);
- break;
- case bDown:
- lcd.clear();
- Set_state(6);
- break;
- case bLeft:
- if (val2 < 100 )
- {
- val2 = val2 + 5;
- str2 = val2;
- tone(buzzer, 1500, 50);
- }
- break;
- case bRight:
- if (val2 > 0) {
- val2 = val2 - 5;
- str2 = val2;
- tone(buzzer, 1500, 50);
- }
- break;
- default:
- Set_state(7);
- break;
- }
- break;
- case 8: //CARGA - 3
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(9);
- break;
- case bDown:
- lcd.clear();
- Set_state(7);
- break;
- case bLeft:
- if (val3 < 100 )
- {
- val3 = val3 + 1;
- str3 = val3;
- tone(buzzer, 1500, 50);
- }
- break;
- case bRight:
- if (val3 > 0) {
- val3 = val3 - 1;
- str3 = val3;
- tone(buzzer, 1500, 50);
- }
- break;
- default:
- Set_state(8);
- break;
- }
- break;
- case 9: //CARGA - 4
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(10);
- break;
- case bDown:
- lcd.clear();
- Set_state(8);
- break;
- case bLeft:
- if (val4 < 100 )
- {
- val4 = val4 + 1;
- str4 = val4;
- tone(buzzer, 1500, 50);
- }
- break;
- case bRight:
- if (val4 > 0) {
- val4 = val4 - 1;
- str4 = val4;
- tone(buzzer, 1500, 50);
- }
- break;
- default:
- Set_state(9);
- break;
- }
- break;
- case 10: //CARGA - MONITOR TEMPERATURA
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(11);
- break;
- case bDown:
- lcd.clear();
- Set_state(9);
- break;
- case bLeft:
- lcd.clear();
- tone(buzzer, 1500, 50);
- break;
- case bRight:
- if (MenuCarga == 1)
- {
- lcd.clear();
- tone(buzzer, 1500, 50);
- }
- else if (MenuCarga == 0)
- {
- lcd.clear();
- tone(buzzer, 1500, 50);
- }
- break;
- default:
- Set_state(10);
- break;
- }
- break;
- case 11: //MENU CARGA - ATIVA AUTOMACAO DE ATIVACAO DO DIMMER AUTOMATICAMENTE
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(12);
- break;
- case bDown:
- lcd.clear();
- Set_state(10);
- break;
- case bLeft:
- MenuCarga = 1;
- lcd.setCursor(0, 1);
- lcd.print("LIGADO ");
- tone(buzzer, 1500, 50);
- break;
- case bRight:
- MenuCarga = 0;
- lcd.setCursor(0, 1);
- lcd.print("DESLIGADO ");
- tone(buzzer, 1500, 50);
- break;
- default:
- Set_state(11);
- if (MenuCarga == 1)
- {
- lcd.setCursor(0, 1);
- lcd.print("LIGADO ");
- }
- if (MenuCarga == 0)
- {
- lcd.setCursor(0, 1);
- lcd.print("DESLIGADO ");
- }
- }
- break;
- case 12: //MENU CARGA - CONFIGURA TEMPO
- switch (CheckButton())
- {
- case bUp:
- lcd.clear();
- Set_state(1);
- break;
- case bDown:
- lcd.clear();
- Set_state(11);
- break;
- case bLeft:
- ConfigTemp++;
- lcd.setCursor(0, 1);
- lcd.print(ConfigTemp);
- tone(buzzer, 1500, 50);
- break;
- case bRight:
- ConfigTemp--;
- lcd.setCursor(0, 1);
- lcd.print(ConfigTemp);
- tone(buzzer, 1500, 50);
- break;
- default:
- Set_state(12);
- lcd.setCursor(0, 1);
- lcd.print(ConfigTemp);
- lcd.write(B11011111); //Simbolo de graus celsius
- lcd.print("C");
- }
- default: ;
- }
- }
- //----------------------------------
- char CheckButton() // Checa botões acionados aLeft Inical = 0
- {
- if (aLeft != digitalRead(bLeft)) // Se aLeft diferente de bLeft
- { // Faça
- aLeft = !aLeft; // Inverste aLeft
- if (aLeft) return bLeft0; // Se aLeft diferente de 0 retorne bLeft0 (90)??
- else return bLeft; // Se aLeft igual a 0 retorne bLeft
- }
- else // Se aLeft igual de bLeft
- if (aRight != digitalRead(bRight)) // Se aRight diferente de bRight
- { // Faça
- aRight = !aRight; // Inverste aRight
- if (aRight) return bRight0; // Se aRight diferente de 0 retorne bRight0 (91)??
- else return bRight; // Se aRight igual a 0 retorne bRight
- }
- else // Se aRight igual de bRight
- if (aUp != digitalRead(bUp)) // Se aUp diferente de bUp
- { // Faça
- aUp = !aUp; // Inverste aUp
- if (aUp) return bUp0; // Se aUp diferente de 0 retorne bUp0 (92)??
- else return bUp; // Se aUp igual a 0 retorne bUp
- }
- else // Se aUp igual de bUp
- if (aDown != digitalRead(bDown)) // Se aDown diferente de bDown
- { // Faça
- aDown = !aDown; // Inverste aDown
- if (aDown) return bDown0; // Se aDown diferente de 0 retorne bDown0 (93)??
- else return bDown; // Se aDown igual a 0 retorne bDown
- }
- else // Se aDown igual de bDown
- return 0; // Retorne 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("CONTROLE ");
- lcd.write(3);
- lcd.write(2);
- lcd.write(1);
- break;
- case 2: //==================== state 2
- lcd.setCursor(0, 0);
- lcd.print("ILUMINACAO ");
- lcd.setCursor(13, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(1);
- lcd.setCursor(0, 1);
- lcd.print("T. CONF:");
- lcd.print(ConRegreReg);
- lcd.print("s");
- break;
- case 3: //==================== state 3
- lcd.setCursor(0, 0);
- lcd.print("CONF. TEMPO ");
- lcd.setCursor(12, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(2);
- lcd.write(1);
- lcd.setCursor(0, 1);
- lcd.print("TEMPO: ");
- lcd.print(ConRegreReg);
- lcd.print("s ");
- break;
- case 4: //==================== state 4
- lcd.setCursor(0, 0);
- lcd.print("MONIT. TEMPO ");
- lcd.setCursor(14, 0);
- lcd.write(2);
- lcd.write(1);
- lcd.setCursor(0, 1);
- lcd.print("TEMPO: ");
- lcd.print(ConRegre);
- lcd.print("s");
- break;
- case 5: //==================== state 5
- lcd.setCursor(0, 0);
- lcd.print("CARGAS");
- lcd.setCursor(13, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(1);
- lcd.setCursor(0, 1);
- lcd.print("CONFIGURACAO");
- break;
- case 6: //==================== state 6
- percentc1 = val1 * 100 / 100;
- lcd.setCursor(0, 0);
- lcd.print("CARGA 1");
- lcd.setCursor(12, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(2);
- lcd.write(1);
- lcd.setCursor(0, 1);
- lcd.print(percentc1, DEC); // mostra o valor de "variavel"
- lcd.print(" % ");
- break;
- case 7: //==================== state 7
- percentc2 = val2 * 100 / 100;
- lcd.setCursor(0, 0);
- lcd.print("CARGA 2");
- lcd.setCursor(12, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(2);
- lcd.write(1);
- lcd.setCursor(0, 1);
- lcd.print(percentc2, DEC); // mostra o valor de "variavel"
- lcd.print(" % ");
- break;
- case 8: //==================== state 8
- percentc3 = val3 * 100 / 100;
- lcd.setCursor(0, 0);
- lcd.print("CARGA 3");
- lcd.setCursor(12, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(2);
- lcd.write(1);
- lcd.setCursor(0, 1);
- lcd.print(percentc3, DEC); // mostra o valor de "variavel"
- lcd.print(" % ");
- break;
- case 9: //==================== state 9
- percentc4 = val4 * 100 / 100;
- lcd.setCursor(0, 0);
- lcd.print("CARGA 4");
- lcd.setCursor(12, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(2);
- lcd.write(1);
- lcd.setCursor(0, 1);
- lcd.print(percentc4, DEC); // mostra o valor de "variavel"
- lcd.print(" % ");
- break;
- case 10: //==================== state 10
- lcd.clear(); //limpa o display do LCD.
- lcd.setCursor(0, 0);
- lcd.print("TEMPERATURA ");
- lcd.setCursor(14, 0);
- lcd.write(2);
- lcd.write(1);
- lcd.setCursor(0, 1);
- atualizaTemperatura(); //-------------------- Chama rotina de temperatura
- lcd.print(menorValorTemp); // Imprime menor valor
- lcd.write(B11011111); //Simbolo de graus celsius
- lcd.print("C");
- delay(250);
- break;
- case 11: //==================== state 11
- lcd.setCursor(0, 0);
- lcd.print("AUTOMACAO ");
- lcd.setCursor(12, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(2);
- lcd.write(1);
- break;
- case 12: //==================== state 12
- lcd.setCursor(0, 0);
- lcd.print("AJUSTE TEMP ");
- lcd.setCursor(12, 0);
- lcd.write(4);
- lcd.write(3);
- lcd.write(2);
- lcd.write(1);
- break;
- default:;
- }
- }
- //-------------------------------------------
- void atualizaTemperatura()
- {
- menorValorTemp = INT_MAX; //Inicializando com o maior valor int possÃvel
- for (int i = 1; i <= 8; i++)
- {
- valorSensorTemp = analogRead(sensorTemp); //Lendo o valor do sensor de temperatura.
- valorSensorTemp *= 0.54 ; //Transformando valor lido no sensor de temperatura em graus celsius aproximados.
- if (valorSensorTemp < menorValorTemp) //Mantendo sempre a menor temperatura lida
- {
- menorValorTemp = valorSensorTemp;
- }
- }
- }
- //--------------------------------------------
- void Controla_Vent_Temp() // define qual valor a variavel str1 vai receber de acordo com a temperatura
- {
- int verificasistema = digitalRead(8); // le o valor na saida se está ou não ativado
- int verificaLuz = digitalRead(A1); // le o valor na saida do luzes
- if (verificasistema == HIGH) // verifica se o sistema está ou não operante
- {
- if (verificaLuz == HIGH) // verifica se a luz esta ou não ligado
- {
- atualizaTemperatura(); // chama a rotina de temperatura
- }
- if (menorValorTemp <= ConfigTemp) // compara a temperatura (LM35) menorValorTemp função do sensor e ConfigTemp variável definida pelo usuario
- {
- str5 = 0;
- }
- if (menorValorTemp >= 35)
- {
- str5 = 90;
- }
- else if (menorValorTemp < 34 && menorValorTemp > 32 )
- {
- str5 = 60;
- }
- else if (menorValorTemp < 31 && menorValorTemp > 30 )
- {
- str5 = 40;
- }
- }
- if (verificasistema == LOW)
- {
- str5 = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement