Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Projeto estufa Rodrigo Araujo
- #include <LiquidCrystal.h> // incluindo o display lcd
- #include <string.h>
- #include <Wire.h>
- #include <DS1307.h>
- #include <avr/wdt.h>
- #include <EEPROM.h>
- #include <TimerOne.h>
- char dateTime[20];
- int RTCValues[7];
- int acertahora[8];
- int programas[21];
- LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // definindo a pinagem do display lcd
- //int BackLight = 10;
- int delay_slide = 4000; // mudar para delay_menu
- byte i = 0;
- byte p = 0;
- boolean m = 0;
- boolean hsc = 0;
- //logica dia semana
- byte ds = 0;
- byte diasemana = 0;
- //int programas[21];
- int linha = 0;
- byte secds = 0;
- //logica dia semana
- //int d = 0;
- byte d1 = 0;
- byte menu = 0;
- byte estouro = 0;
- int Tecla = 1021;
- /* Define valores dos botões */
- boolean RIGHT = 0;
- boolean UP = 0;
- boolean DOWN = 0;
- boolean LEFT = 0;
- boolean SELECT = 0;
- boolean NONE = 0;
- // Definir dias da semana a ligar inicio
- // DOM SEG TER QUA QUI SEX SAB 1=DOM 2=SEG 3=TER 4=QUA 5=QUI 6=SEX 7=SAB
- int dados[15][7] = {
- { 1, 2, 3, 4, 5, 6, 7}, //DOM SEG TER QUA QUI SEX SAB
- { 1, 2, 3, 4, 5, 6, 0}, //DOM SEG TER QUA QUI SEX
- { 0, 2, 3, 4, 5, 6, 7}, //SEG TER QUA QUI SEX SAB
- { 1, 0, 0, 0, 0, 0, 0}, //DOM
- { 0, 2, 0, 0, 0, 0, 0}, //SEG
- { 0, 0, 3, 0, 0, 0, 0}, //TER
- { 0, 0, 0, 4, 0, 0, 0}, //QUA
- { 0, 0, 0, 0, 5, 0, 0}, //QUI
- { 0, 0, 0, 0, 0, 6, 0}, //SEX
- { 0, 0, 0, 0, 0, 0, 7}, //SAB
- { 0, 2, 3, 4, 0, 0, 0}, //SEG TER QUAR
- { 0, 0, 0, 0, 5, 6, 7}, //QUI SEX SAB ok
- { 0, 2, 0, 4, 0, 6, 0}, //SEG QUA SEX ok
- { 0, 0, 3, 0, 5, 0, 7}, //TER QUIN SAB
- { 1, 0, 0, 0, 0, 0, 7}
- }; //SAB DOM
- // Definir dias da semana a ligar fim des semana
- //--------------------------------------------------------
- void setup()
- {
- pinMode(10, OUTPUT);
- digitalWrite(10, HIGH);
- lcd.begin(16, 2);
- lcd.setCursor(0, 0);
- lcd.print("Irrigacao Autom.");
- delay(delay_slide);
- lcd.clear();
- delay(500);
- //digitalWrite(10, LOW);
- Serial.begin(9600);// initialize serial communications at 9600 bps
- DS1307.begin();
- Wire.begin();
- Timer1.initialize(500000);
- Timer1.attachInterrupt(interrup);
- for (int x = 0; x < 21; x++) {
- programas[x] = EEPROM.read(x); //grava eeprom posição 1
- //Serial.print("Lendo numero da memoria programacao : ");
- //Serial.println(programas[x]);
- }
- }
- /*********** Lê os botões **************/
- void LerTecla()
- {
- Tecla = analogRead(A0);
- /*** Limites dos valores de cada botão *****/
- NONE = 0; RIGHT = 0; UP = 0; LEFT = 0; SELECT = 0;
- if (Tecla < 1020) // AS LINHAS QUE COMENTEI É PQ NÃO SÃO USADAS NO CODIGO ENTÃO NÃO TEM PORQUE PERDER TEMPO PROCESSANDO ESSES DADOS!
- {
- // if (Tecla <= 950 && Tecla >= 1100) NONE = 1; // 1100 QUE VALOR É ESSE? A RESOLUÇÃO DO MICROCONTROLADOR SO VAI ATE 1023......
- if (Tecla >= 0 && Tecla <= 20) RIGHT = 1;
- if (Tecla >= 50 && Tecla <= 200) UP = 1;
- if (Tecla >= 250 && Tecla <= 355) DOWN = 1;
- if (Tecla >= 450 && Tecla <= 550) LEFT = 1;
- if (Tecla >= 700 && Tecla <= 900) SELECT = 1;
- digitalWrite(10, HIGH);
- delay(200);
- Serial.println(Tecla);
- }
- }
- //--------------------------------------------------------
- void interrup()
- {
- d1 = d1++;
- if (!menu == 0) {
- estouro = estouro++;
- }
- if (!p == 0) {
- estouro = estouro++;
- }
- if (!i == 0) {
- estouro = estouro++;
- }
- if (!m == 0) {
- estouro = estouro++; // era 1 e so m
- }
- if (!hsc == 0) {
- estouro = estouro++; //logica dia semana
- }
- if (!ds == 0) {
- estouro = estouro++; // logica dia semana
- }
- if (!diasemana == 0) {
- estouro = estouro++;
- }
- }
- //--------------------------------------------------------
- void menus()
- {
- wdt_disable();
- delay(500);
- lcd.clear();
- while (menu > 0)
- {
- LerTecla();
- lcd.setCursor(0, 0);
- if (menu == 1)
- {
- lcd.print("Acerta Data-Hora"); //alteração custela
- if (SELECT)
- {
- i = 1;
- menu = 0;
- SELECT = 0;
- acertartc();
- }
- }
- if (menu == 2)
- {
- lcd.print("Dias Da Semana "); //alteração custela
- if (SELECT)
- {
- diasemana = 1;
- menu = 0;
- SELECT = 0;
- diassemana();
- }
- }
- if (UP && menu < 3)
- {
- menu++; //alteração custela
- estouro = 0;
- UP = 0;
- }
- if (DOWN && menu > 0)
- {
- menu--; //alteração custela
- estouro = 0;
- DOWN = 0;
- }
- if (estouro == 90)
- {
- menu = 0 ;
- estouro = 0;
- }
- }
- lcd.clear();
- //digitalWrite(10, LOW);
- }
- //--------------------------------------------------------
- void diassemana()
- {
- wdt_disable(); // DESABILITA A FUNÇÃO WDT NESTA PARTE DO PROGRAMA.
- delay(1000);
- lcd.clear();
- while ( diasemana > 0 )
- //while( diasemana > 0 )
- {
- LerTecla();
- lcd.setCursor(0, 0);
- if (diasemana == 1)
- {
- lcd.print(" Dias-Semana- 1 ");
- linha = 0;
- semana();
- }
- if (diasemana == 2)
- {
- lcd.print(" Dias-Semana- 2 ");
- linha = 1;
- semana();
- }
- if (diasemana == 3)
- {
- lcd.print(" Dias-Semana- 3 ");
- linha = 2;
- semana();
- }
- if (diasemana == 4)
- {
- lcd.print(" Dias-Semana- 4 ");
- linha = 3;
- semana();
- }
- if (diasemana == 5)
- {
- lcd.print(" Dias-Semana- 5 ");
- linha = 4;
- semana();
- }
- if (diasemana == 6)
- {
- lcd.print(" Dias-Semana- 6 ");
- linha = 5;
- semana();
- }
- if (diasemana == 7) {
- lcd.print(" Dias-Semana- 7 ");
- linha = 6;
- semana();
- }
- if (diasemana == 8)
- {
- lcd.print(" Dias-Semana- 8 ");
- linha = 7;
- semana();
- }
- if (diasemana == 9)
- {
- lcd.print(" Dias-Semana- 9 ");
- linha = 8;
- semana();
- }
- if (diasemana == 10)
- {
- lcd.print(" Dias-Semana- 10");
- linha = 9;
- semana();
- }
- if (diasemana == 11)
- {
- lcd.print(" Dias-Semana- 11");
- linha = 10;
- semana();
- }
- if (diasemana == 12)
- {
- lcd.print(" Dias-Semana- 12");
- linha = 11;
- semana();
- }
- if (diasemana == 13)
- {
- lcd.print(" Dias-Semana- 13");
- linha = 12;
- semana();
- }
- if (diasemana == 14)
- {
- lcd.print(" Dias-Semana- 14");
- linha = 13;
- semana();
- }
- if (UP && diasemana < 15)
- {
- diasemana++;
- estouro = 0;
- UP = 0;
- }
- if (DOWN && diasemana > 0)
- {
- diasemana--;
- estouro = 0;
- DOWN = 0;
- }
- //if (SELECT){diasemana ++;estouro = 0; SELECT = 0;}
- if (estouro == 90)
- {
- diasemana = 0 ;
- estouro = 0;
- }
- delay(200);
- //digitalWrite(10, LOW);
- }
- lcd.clear();
- }
- //--------------------------------------------------------
- void mostrahora()
- {
- DS1307.getDate(RTCValues);
- sprintf(dateTime, "%02d:%02d:%02d%02d/%02d/%02d", RTCValues[4], RTCValues[5], RTCValues[6], RTCValues[2], RTCValues[1], RTCValues[0]);
- delay(50);
- lcd.setCursor(0, 0); lcd.print(dateTime);
- delay(50);
- }
- //--------------------------------------------------------
- void informa()
- {
- if (d1 <= 8)
- {
- lcd.setCursor(0, 1);
- lcd.print("Irrigacao Autom.");
- }
- if (d1 >= 8 && d1 <= 10)
- {
- lcd.setCursor(0, 1);
- lcd.print(" ");
- }
- if (d1 >= 11)
- {
- d1 = 0;
- }
- }
- //--------------------------------------------------------
- void semana()
- {
- lcd.setCursor(0, 1);
- //for (int linha = 0; linha < 1; linha ++)
- //for (int linha = 1; linha < 2; linha ++)
- //for (int linha = 2; linha < 3; linha ++)
- //for (int linha = 3; linha < 4; linha ++)
- //for (int linha = 4; linha < 5; linha ++)
- //for (int linha = 5; linha < 6; linha ++)
- //for (int linha = 6; linha < 7; linha ++)
- //for (int linha = 7; linha < 8; linha ++)
- //for (int linha = 8; linha < 9; linha ++)
- //for (int linha = 9; linha < 10; linha ++)
- //for (int linha = 10; linha < 11; linha ++)
- //for (int linha = 11; linha < 12; linha ++)
- //for (int linha = 12; linha < 13; linha ++)
- //for (int linha = 13; linha < 14; linha ++)
- //for (int linha = 14; linha < 15; linha ++)
- // {
- for (int coluna = 0; coluna <= 7; coluna++)
- {
- int month = (dados[linha][coluna]);
- Serial.println(month);
- switch (month) {
- case 0: lcd.print(" ");
- break;
- case 1: lcd.print("D ");
- break;
- case 2: lcd.print("S ");
- break;
- case 3: lcd.print("T ");
- break;
- case 4: lcd.print("Q ");
- break;
- case 5: lcd.print("Q ");
- break;
- case 6: lcd.print("S ");
- break;
- case 7: lcd.print("S ");
- break;
- }
- }
- // }
- }
- //--------------------------------------------------------
- void acertartc()
- {
- wdt_disable(); // DESABILITA A FUNÇÃO WDT NESTA PARTE DO PROGRAMA.
- delay(1000);
- while ( i > 0 && i < 8)
- {
- lcd.setCursor(0, 0);
- LerTecla();
- if (i == 1) {
- lcd.print(" Entre com Ano ");
- }
- if (i == 2) {
- lcd.print(" Entre com Mes ");
- }
- if (i == 3) {
- lcd.print(" Entre com Dia ");
- }
- if (i == 4) {
- lcd.print(" Entre cm Semana");
- }
- if (i == 5) {
- lcd.print(" Entre com Hora ");
- }
- if (i == 6) {
- lcd.print(" Entre com Minut");
- }
- if (i == 7) {
- lcd.print(" Entre com Segun");
- }
- if (UP) {
- acertahora[i]++;
- estouro = 0;
- UP = 0;
- }
- if (DOWN && acertahora[i] >= 0) {
- acertahora[i]--;
- estouro = 0;
- DOWN = 0;
- }
- if (SELECT) {
- i ++; estouro = 0; SELECT = 0; lcd.clear();
- delay(200);
- //digitalWrite(10, LOW);
- }
- if (acertahora[1] < 1 ) {
- acertahora[1] = 13;
- }
- if (acertahora[2] > 12) {
- acertahora[2] = 1;
- }
- if (acertahora[2] == 0) {
- acertahora[2] = 12;
- }
- if (acertahora[3] > 31) {
- acertahora[3] = 1;
- }
- if (acertahora[3] == 0) {
- acertahora[3] = 31;
- }
- // 1 domigo 2 segunda 3 terca 4 quarta 5 quinta 6 sexta 7 sabado
- if (acertahora[4] > 7) {
- acertahora[4] = 1;
- lcd.clear();
- }
- if (acertahora[4] == 0) {
- acertahora[4] = 7;
- }
- if (acertahora[5] > 23) {
- acertahora[5] = 0;
- }
- if (acertahora[5] == -1) {
- acertahora[5] = 23;
- }
- if (acertahora[6] > 59) {
- acertahora[6] = 0;
- }
- if (acertahora[6] == -1) {
- acertahora[6] = 59;
- }
- if (acertahora[7] > 59) {
- acertahora[7] = 0;
- }
- if (acertahora[7] == -1) {
- acertahora[7] = 59;
- }
- if (i == 4) {
- lcd.setCursor(2, 1);
- lcd.print(fromNumberToWeekDay(acertahora[i], 2)); lcd.print(" ");
- } //1=EN; 2=PT;);lcd.print(" ");}
- else {
- lcd.setCursor(8, 1);
- lcd.print(acertahora[i], DEC); lcd.print(" ");
- }
- if (estouro == 90) {
- i = 0 ;
- estouro = 0;
- }
- }
- DS1307.setDate(acertahora[1], acertahora[2], acertahora[3], acertahora[4], acertahora[5], acertahora[6], acertahora[7]);
- // AQUI ENVIAMOS OS DADOS DEFINIDOS PARA O REAL TIME CLOK
- lcd.clear();
- }
- //--------------------------------------------------------
- void loop()
- {
- LerTecla();
- if (SELECT)
- {
- menu = 1;
- SELECT = 0;
- menus();
- }
- //if(SELECT){diasemana =1; SELECT=0; diassemana();}
- mostrahora();
- informa();
- // if(digitalRead(relay2)==HIGH && (deslbomba2/2) >= deslbomba){digitalWrite(relay2, LOW);deslbomba2 = 0;}
- //Serial.print("Lendo pino conti");
- //Serial.println(leitura);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement