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 pinoativaluz = A1; //Pino ligado ao acionamento da lampada
- int pinopir = 9; //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 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 LAMP = A3; // Pino de disparo do Triac
- int ConfigTemp = 29;
- ///////
- unsigned int dimming1 = 115; // Variavel para tempo de retardo. Valor Inicial Minimo
- unsigned int dimming2 = 115; // Variavel para tempo de retardo. Valor Inicial Minimo
- unsigned int dimming3 = 115; // Variavel para tempo de retardo. Valor Inicial Minimo
- unsigned int dimming4 = 115; // Variavel para tempo de retardo. Valor Inicial Minimo
- ///////
- int str1 = 0; // Variavel string para receber dados da Serial
- int str2 = 0; // Variavel string para receber dados da Serial
- int str3 = 0; // Variavel string para receber dados da Serial
- int str4 = 0; // Variavel string para receber dados da Serial
- ////////
- #define bMenu 10 // Os pinos analógicos podem ser
- #define bChange 11 // usados como digitais, bastando
- #define bUp 13 //
- #define bDown 12
- ////////
- #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.
- ////////
- const int sensorTemp = 0;
- int valorSensorTemp = 0;
- int menorValorTemp = INT_MAX;
- // Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos botões
- char state = 1; // variável que guarda posição atual do menu
- //LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // Declaração do objeto tipo lcd
- LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
- byte seta_direita[8] = { //cria seta direita
- B00000,
- B00100,
- B00010,
- B11111,
- B00010,
- B00100,
- B00000,
- B00000
- };
- byte seta_esquerda[8] = { //cria seta esquerda
- B00000,
- B00100,
- B01000,
- B11111,
- B01000,
- B00100,
- B00000,
- B00000
- };
- byte seta_abaixo[8] = { // cria seta abaixo
- B00000,
- B00100,
- B00100,
- B10101,
- B01110,
- B00100,
- B00000,
- B00000
- };
- byte seta_acima[8] = { // cria seta acima
- B00000,
- B00100,
- B01110,
- B10101,
- B00100,
- B00100,
- B00000,
- B00000
- };
- //----------------------------------
- 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()
- {
- pinMode(buzzer, OUTPUT);
- Timer1.initialize(1000000); // initialize timer1, and set a 1 second period
- Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
- attachInterrupt(0, zero_cross, RISING); // Enable interrupt no pino D2
- lcd.createChar(1, seta_direita); // vai criar novos caracteres
- lcd.createChar(2, seta_esquerda);
- lcd.createChar(3, seta_abaixo);
- lcd.createChar(4, seta_acima);
- lcd.begin(16, 2); // Iniciando a biblioteca do LCD
- lcd.print("INICIANDO... ");
- delay(5000);
- pinMode(bMenu, INPUT); // Botões
- pinMode(bChange, INPUT);
- pinMode(bUp, INPUT);
- pinMode(bDown, INPUT);
- pinMode(A3, OUTPUT);
- pinMode(LAMP, OUTPUT); // Define o pino(A3) LAMP como saída
- digitalWrite(bMenu, HIGH); // Aciona o pull-up interno
- digitalWrite(bChange, HIGH); // dos botões
- digitalWrite(bUp, HIGH);
- digitalWrite(bDown, HIGH);
- pinMode(pinoativaluz, OUTPUT); //Define pino como saida
- pinMode(pinopir, INPUT); //Define pino sensor como entrada
- // digitalWrite(A5, 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
- }
- dimmer01();
- ////////////////////////////////////////////////////cod. sensor
- switch (state) {
- case 1: //MENU 1 - CONTROLE (LIGADO/DESLIGADO)
- switch (CheckButton()) {
- case bMenu:
- // lcd.clear();
- digitalWrite(A3, LOW);
- lcd.setCursor(0, 1);
- lcd.print("DESLIGADO ");
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- break;
- case bDown:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(2);
- break;
- case bChange:
- // lcd.clear();
- digitalWrite(A3, HIGH);
- lcd.setCursor(0, 1);
- lcd.print("LIGADO ");
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- break;
- default:
- Set_state(1);
- if (digitalRead(A3) == 1)
- {
- lcd.setCursor(0, 1);
- lcd.print("LIGADO ");
- }
- }
- break;
- case 2: //ILUMINACAO
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(3);
- break;
- case bDown:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(5);
- break;
- case bUp:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(1);
- break;
- default:
- Set_state(2);
- }
- break;
- case 3: //ILUMINACAO - CONFIGURA TEMPO
- switch (CheckButton())
- {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(4);
- break;
- case bChange:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(2);
- break;
- case bDown:
- if (ConRegreReg >= 0) {
- ConRegreReg = ConRegreReg - 30;
- ConRegre = ConRegreReg;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- break;
- case bUp:
- ConRegreReg = ConRegreReg + 30;
- ConRegre = ConRegreReg;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- break;
- default:
- Set_state(3);
- }
- }
- break;
- case 4: //ILUMINACAO - MONITORACAO
- switch (CheckButton())
- {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(2);
- break;
- case bChange:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(3);
- break;
- default:
- Set_state(4);
- }
- break;
- case 5: //CARGA
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(11);
- break;
- case bDown:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(1);
- break;
- case bUp:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(2);
- break;
- default:
- Set_state(5);
- }
- break;
- case 6: //CARGA - 1
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(7);
- break;
- case bChange:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(11);
- break;
- case bUp:
- if (val1 >= 0 )
- {
- lcd.clear();
- val1 = val1 + 10;
- str1 = val1;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- }
- break;
- case bDown:
- if (val1 >= 0) {
- lcd.clear();
- val1 = val1 - 10;
- str1 = val1;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- }
- break;
- default:
- Set_state(6);
- }
- break;
- case 7: //CARGA - 2
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(8);
- break;
- case bChange:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(6);
- break;
- case bDown:
- if (val2 <= 100) {
- lcd.clear(); val2++;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- }
- break;
- case bUp:
- if (val2 <= 100) {
- lcd.clear(); val2++;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- }
- break;
- default:
- Set_state(7);
- }
- break;
- case 8: //CARGA - 3
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(9);
- break;
- case bChange:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(7);
- break;
- case bDown:
- if (val3 <= 24) {
- lcd.clear(); val3++;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- }
- break;
- case bUp:
- if (val3 <= 24) {
- lcd.clear(); val3++;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- }
- break;
- default:
- Set_state(8);
- }
- break;
- case 9: //CARGA - 4
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(10);
- break;
- case bChange:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(8);
- break;
- case bDown:
- if (val4 <= 24) {
- lcd.clear(); val4++;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- }
- break;
- case bUp:
- if (val4 <= 24) {
- lcd.clear(); val4++;
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- }
- break;
- default:
- Set_state(9);
- }
- break;
- case 10: //CARGA - MONITOR TEMPERATURA
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(5);
- break;
- case bChange:
- if (MenuCarga == 1) {
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(12);
- }
- else if (MenuCarga == 0) {
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(9);
- }
- break;
- default:
- Set_state(10);
- }
- case 11: //MENU CARGA - ATIVA AUTOMACAO DE ATIVACAO DO DIMMER AUTOMATICAMENTE
- switch (CheckButton()) {
- case bMenu:
- if (MenuCarga == 1) {
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(12);
- }
- else if (MenuCarga == 0) {
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(6);
- }
- break;
- case bChange:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(5);
- break;
- case bUp:
- MenuCarga = 1;
- lcd.setCursor(0, 1);
- lcd.print("LIGADO ");
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- break;
- case bDown:
- MenuCarga = 0;
- lcd.setCursor(0, 1);
- lcd.print("DESLIGADO ");
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- break;
- default:
- Set_state(11);
- if (MenuCarga == 1)
- {
- lcd.setCursor(0, 1);
- lcd.print("LIGADO ");
- }
- }
- break;
- case 12: //MENU CARGA - CONFIGURA TEMPO
- switch (CheckButton()) {
- case bMenu:
- lcd.clear();
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- Set_state(10);
- break;
- case bChange:
- Set_state(11);
- break;
- case bUp:
- ConfigTemp++;
- lcd.setCursor(0, 1);
- lcd.print(ConfigTemp);
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- break;
- case bDown:
- ConfigTemp--;
- lcd.setCursor(0, 1);
- lcd.print(ConfigTemp);
- tone(buzzer, 1500);
- delay(50);
- noTone(buzzer);
- 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()
- {
- 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;
- 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("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(2);
- 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 zero_cross() // Rotina chamada à cada interrupt causada pelo zero cross do AC
- {
- delayMicroseconds(dimming1); // Restardo calculado
- digitalWrite(LAMP, HIGH); // Dispara o Triac
- delayMicroseconds(8.33); // Duração do pulso de disparo
- digitalWrite(LAMP, LOW); // Desliga pulso de disparo
- }
- void Controla_Vent_Temp() { // define qual valor a variavel str1 vai receber de acordo com a temperatura
- int verificasistema = digitalRead(A5); // 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
- str1 = 0;
- }
- if (menorValorTemp >= 35) {
- str1 = 90;
- }
- else if (menorValorTemp < 34 && menorValorTemp > 32 ) {
- str1 = 60;
- }
- else if (menorValorTemp < 31 && menorValorTemp > 30 ) {
- str1 = 40;
- }
- }
- if (verificasistema == LOW) {
- str1 = 0;
- }
- }
- void dimmer01() {
- dimming1 = str1; // a variável dimming recebe valores de STR1
- dimming1 = (118 - dimming1) * 68; // Calcula o retardo para o disparo do triac
- if (dimming1 < 1224) dimming1 = 1224; // Valor para o brilho máximo 1224
- if (dimming1 > 7820) dimming1 = 7820; // Valor para o brilho minimo 7820
- }
- void dimmer02() {
- dimming2 = str2; // a variável dimming recebe valores de STR1
- dimming2 = (118 - dimming2) * 68; // Calcula o retardo para o disparo do triac
- if (dimming2 < 1224) dimming2 = 1224; // Valor para o brilho máximo 1224
- if (dimming2 > 7820) dimming2 = 7820; // Valor para o brilho minimo 7820
- }
- void dimmer03() {
- dimming3 = str3; // a variável dimming recebe valores de STR1
- dimming3 = (118 - dimming3) * 68; // Calcula o retardo para o disparo do triac
- if (dimming3 < 1224) dimming3 = 1224; // Valor para o brilho máximo 1224
- if (dimming3 > 7820) dimming3 = 7820; // Valor para o brilho minimo 7820
- }
- void dimmer04() {
- dimming4 = str4; // a variável dimming recebe valores de STR1
- dimming4 = (118 - dimming4) * 68; // Calcula o retardo para o disparo do triac
- if (dimming4 < 1224) dimming4 = 1224; // Valor para o brilho máximo 1224
- if (dimming4 > 7820) dimming4 = 7820; // Valor para o brilho minimo 7820
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement