RuiViana

FM_So_Setup

Mar 6th, 2018
167
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. /*
  3.   Tudo consiste em vc vais ligar a máquina, irá aparecer a tela de boas vindas...
  4.   Se o tanque estiver cheio já entra no menu direto, se não, aparece a mensagem
  5.   pra vc encher e fica apitando o buzzer e piscando o led a cada 15min
  6.   Depois q vc enche o tanque vai para o menu que irá aparecer duas seleções 1 Germinar e 2 Produzir...
  7.   Vc coloca as sementes no lugar e aperta germinar somente a bomba irá ligar a cada 12 horas durante 30 seg
  8.   quando as plantinhas já estiverem germinadas, então para a germinação e seleciona o 2 - Produzir
  9.   Ai a bomba ligará a cada 1h por 30seg e a iluminação ligará por 18horas e desligará por 6horas.
  10.   Qnd estiver terminado vc desativa a produção e inicia tudo novamente.
  11.   A seleção do menu será com um encoder rotativo com push buttom, menu um LCD 20x4 i2c
  12. */
  13. //  http://eeshop.unl.edu/pdf/KEYES%20Rotary%20encoder%20module%20KY-040.pdf
  14. //  http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/keyes-ky-040-arduino-rotary-encoder-user-manual/
  15. //  https://produto.mercadolivre.com.br/MLB-793078506-sensor-de-nivel-de-agua-tutorial-arduino-pronta-entrega-_JM
  16.  
  17. #include <TimerOne.h>
  18. #include <LiquidCrystal_I2C.h>                                        // Biblioteca LCD I2C
  19. //LiquidCrystal_I2C lcd(0x38,  2, 1, 0, 7, 6, 5, 4, 3, POSITIVE);       // Set the LCD I2C address
  20. LiquidCrystal_I2C lcd(0x3F);    
  21. #define sensor 2                                        // Port sensor de agua
  22.  
  23. #define bomba 5                                         // Port para bomba
  24. #define LED 6                                           // Port LED falta de agua
  25. #define buzzer 9                                        // Port buzzer
  26. #define luzLED 10                                       // Port para iluminacao
  27. unsigned long contador = 0;                             // Contador de segundos
  28. unsigned long alarme = 0;                               // Tempo de alarme de falta de agua
  29. unsigned long interGer;                                 // Intervalo de aguacao em geminacao
  30. unsigned long aguaGer;                                  // Tempo de aguacao em geminacao
  31. unsigned long interPro;                                 // Intervalo de aguacao em geminacao
  32. unsigned long aguaPro;                                  // Tempo de aguacao em geminacao
  33. unsigned long interLED_On;                              // Tempo de LED ligado em producao
  34. unsigned long interLED_Off;                             // Tempo de LED desligado em producao
  35. int selecao = 0;                                        // Selecao de atividade
  36. #define  pinA 3                                         // Connected to CLK on KY-040
  37. #define  pinB 4                                         // Connected to DT on KY-040
  38. int pinALast = 0;                                       // Ultima posicao do encoder
  39. int aVal = 0;                                           // Movimento do encoder
  40. int mostrei = 0;                                        // Flag para evitar pisca do display
  41. //---------------------------------------
  42. void setup()
  43. {
  44.   lcd.begin(20, 4);                                     // Inicialisa o LCD 20 x 4
  45.   pinMode(sensor, INPUT_PULLUP);                        // Sensor de agua como entrada
  46.   pinMode(LED, OUTPUT);                                 // LED alarme agua como saida
  47.   pinMode(bomba, OUTPUT);                               // Bomba como saida
  48.   pinMode(buzzer, OUTPUT);                              // Buzzer como saida
  49.   pinMode(luzLED, OUTPUT);                              // Alimentacao como saida
  50.   Serial.begin(9600);                                   // Inicialisa a serial
  51.   lcd.setCursor(1, 0);                                  // Posição 1 linha 0
  52.   lcd.print("Sistema de irrigacao ");                   // print
  53. /*
  54.   Timer1.initialize(100000);                            // Define interrupt de Timer1 a cada segundo
  55.   Timer1.attachInterrupt(segundos);                     // OverFlow de Timer1
  56.   attachInterrupt(digitalPinToInterrupt(pinA), encoder, RISING);    // Interrupt de movimento do encoder
  57.   pinMode (pinA, INPUT);                                // Pino de CLOCK do encoder como entrada
  58.   pinMode (pinB, INPUT);                                // Pino de DATA do encoder como entrada
  59.   pinALast = digitalRead(pinA);                         // Estabelece posicao inicial edo encoder
  60. */
  61. }
  62. //---------------------------------------
  63. void loop()
  64. {
  65.   ;
  66.  
  67.   /*
  68.   if (digitalRead(sensor) == LOW)                       // Se sensor de agua estiver desligado
  69.   {
  70.     lcd.setCursor(0, 0);                                // Linha 0 posicao 0
  71.     lcd.print("ABASTECA RESERVATORIO");                 // print
  72.     alarme = contador;                                  // Inicialisa tempo de alarme
  73.  
  74.     while (digitalRead(sensor) == LOW)                  // Enquanto sensor de agua estiver desligado
  75.     {
  76.       if ((contador - alarme) - 900)                    // A cada 15 minutos dispara buzzer
  77.       {
  78.         analogWrite(buzzer, 128);                       // Liga o buzzer
  79.         alarme = contador;                              // Restaura tempo alarme
  80.         delay(1000);                                    // Toca durante 1 segundo
  81.         analogWrite(buzzer, 0);                         // Desliga o buzzer
  82.       }
  83.     }
  84.   }
  85.   if (selecao == 0)                                     // Se nenhma atividade foi selecfionada
  86.   {
  87.     if (mostrei == 0)                                   // Mostra no LCD uma vez somente
  88.     {
  89.       lcd.setCursor(0, 0);                              // Linha 0 posicao 0
  90.       lcd.print("1 - Germincacao");                     // print
  91.       lcd.setCursor(0, 1);                              // Linha 1 posicao 0
  92.       lcd.print("2 - Producao");                        // print
  93.     }
  94.   }
  95.   if (selecao == 1)                                     // Se selecionou germinacao
  96.   {
  97.     if (mostrei == 0)                                   // Mostra no LCD uma vez somente
  98.     {
  99.       lcd.setCursor(0, 0);                              // Linha 0 posicao 0
  100.       lcd.print("1 - Germincacao");                     // print
  101.       lcd.setCursor(0, 1);                              // Linha 1 posicao 0
  102.       lcd.print(" Selecionado");                        // print
  103.       interGer = contador;                              // Inicializa contador de aguar durante geminacao
  104.     }
  105.     if (interGer >= 43200)                              // 12 horas
  106.     {
  107.       aguaGer = contador;                               // Inicialisa tempo de agua acionada
  108.       digitalWrite(bomba,LOW);                          // Liga bomba
  109.     }
  110.     if (aguaGer == 30)                                  // 30 segundos
  111.     {
  112.      digitalWrite(bomba,HIGH);                          // Desliga bomba
  113.     }
  114.   }
  115.   if (selecao == 2)                                     // Se selecionou producao
  116.   {
  117.     if (mostrei == 0)                                   // Mostra no LCD uma vez somente
  118.     {
  119.       lcd.setCursor(0, 0);                              // Linha 0 posicao 0
  120.       lcd.print("2 - Producao");                        // print
  121.       lcd.setCursor(0, 1);                              // Linha 1 posicao 0
  122.       lcd.print(" Selecionado");                        // print
  123.       interPro = contador;                              // Inicializa contador de aguar durante producao
  124.       interLED_On = contador;                           // Inicializa tempo de luz durante producao
  125.       digitalWrite(luzLED, LOW);                        // Acende iluminacao
  126.     }
  127.     if (interPro >= 3600)                               // 1 hora
  128.     {
  129.       aguaPro = contador;                               // Inicialisa tempo de agua acionada
  130.       digitalWrite(bomba,LOW);                          // Liga bomba
  131.     }
  132.     if (aguaPro == 30)                                  // 30 segundos
  133.     {
  134.       digitalWrite(bomba,HIGH);                         // Desliga bomba
  135.     }
  136.     if (interLED_On >= 64800)                           // 18 horas
  137.     {
  138.       digitalWrite(luzLED,HIGH);                        // Apaga iluminacao
  139.       interLED_Off = contador;                          // Inicializa tempo de iluminacao off
  140.     }
  141.     if (interLED_Off >= 21600)                          // 6 horas
  142.     {
  143.       digitalWrite(luzLED,LOW);                         // Acende iluminacao
  144.       interLED_On = contador;                           // Inicializa tempo de iluminacao on
  145.     }
  146.   }
  147. */
  148. }
  149. //--------------------------------
  150. void segundos()                                         // Rotina chamada pelo Interrupt de Zero do Timer1
  151. {
  152.   contador++;                                           // Incrementa contador para contar 1 Segundo
  153. }
  154. //--------------------------------
  155. void encoder()                                          // Rotina de movimento do encoder
  156. {
  157.   aVal = digitalRead(pinA);                             // Leia port do encoder
  158.   if (aVal != pinALast)                                 // Encode moveu
  159.   {
  160.     if (digitalRead(pinB) != aVal)                      // Moveu CW
  161.     {
  162.       selecao ++;                                       // Incrementa contador de posicao
  163.       if (selecao > 2)                                  // Se posicao > que 2
  164.       {
  165.         selecao = 0;                                    // Vai pra zero
  166.       }
  167.     }
  168.     else                                                // Moveu CCW
  169.     {
  170.       selecao--;
  171.       if (selecao < 0 )                                 // Se posicao < que 0
  172.       {
  173.         selecao = 2;                                    // Vai pra 2
  174.       }
  175.     }
  176.   }
  177.   pinALast = aVal;                                      // Salva ultima posicao do encoder
  178.   mostrei = 0;                                          // Libera display
  179.   lcd.clear();                                          // LLimpa dispaly
  180. }
RAW Paste Data