Advertisement
Guest User

Sketch Verificar millis

a guest
Jan 30th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.02 KB | None | 0 0
  1. #include <LiquidCrystal.h>
  2. LiquidCrystal lcd(0, 1, 2, 3, 4, 5);
  3.  
  4. // DEFINIÇÃO DE ENTRADAS E SÁIDAS DIGITAIS
  5. #define SinalPressostato 6           // ENTRADA DE SINAL DO CONTATO AUXILIAR DO PRESSOSTATO
  6. #define SinalBombaPress1 7           // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO 1
  7. #define SinalBombaPress2 8           // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA DE PRESSURIZAÇÃO 2
  8. #define SinalBombaOR 9               // ENTRADA DE SINAL DO CONTATO AUXILIAR DO DISJUNTOR DA BOMBA OR
  9. #define SinalChaveAuto 10            // ENTRADA DE SINAL DO CONTATO DA CHAVE NA POSIÇÃO AUTOMATICA
  10. #define SinalStandBy 11              // ENTRADA DE SINAL DO CONTATO DA CHAVE NA POSIÇÃO DE STANDBY
  11. #define SinalFiltroAreia 12          // ENTRADA DE SINAL DO CONTATO AUXILIAR DO FILTRO DE AREIA
  12. #define SinalFiltroAbrandador 13     // ENTRADA DE SINAL DO CONTATO AUXILIAR DO FILTRO ABRANDADOR
  13. #define RelePress1 A0                // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA DE PRESSURIZAÇÃO 1
  14. #define RelePress2 A1                // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA DE PRESSURIZAÇÃO 2
  15. #define ReleBombaOR A2               // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA BOMBA OR
  16. #define ReleValvulaAgua A3           // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE ENTRADA D'AGUA
  17. #define ReleAutoFlush A4             // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE AUTO FLUSH
  18. #define ReleStandBy A5               // SAÍDA DE SINAL PARA ACIONAR O RELÉ DA VÁLVULA DE STANDBY
  19.  
  20. // VARIAVÉIS GLOBAIS PARA USO NO FLUXO DE ÁGUA
  21. float valor_vazao = 0;        // VARIÁVEL PARA ARMAZENAR O VALOR EM L/MIN
  22. float media = 0;              // VARIÁVEL PARA FAZER A MEDIA DA VAZAO
  23. float Litros = 0;             // VARIÁVEL PARA A QUANTIDADE DE ÁGUA
  24. float MiliLitros = 0;         // VARIÁVEL PARA CONVERSÃO
  25. int contaPulso;               // VARIÁVEL PARA A QUANTIDADE DE PULSOS
  26. int Min = 0;                  // VARIÁVEL PARA MINUTOS
  27. int i = 0;                    // VARIÁVEL PARA SEGUNDOS
  28. bool mostra = false;          // LIBERA TELA DE FLUXO
  29. bool flag = false;            // CONTROLE PARA EVITAR REPETIÇÃO DO DISPLAY
  30. unsigned long tempo = 0;      // TEMPO DE millis()
  31. unsigned long ciclo  = 500;   // TEMPO DE LIBERAÇÃO DO DISPLAY
  32.  
  33. // VARIAVÉIS PARA MODO DE OPERAÇÃO
  34. int ModoAutomatico = 0;       // VARIÁVEL PARA ARMAZENAR O MODO DE OPERAÇÃO AUTOMATICO
  35. int ModoStandBy = 0;          // VARIÁVEL PARA ARMAZENAR O MODO DE OPERAÇÃO STANDBY
  36.  
  37. void setup() {
  38.  
  39.   // INICIALIZAÇÃO DA PORTA SERIAL E TEMPO
  40.   Serial.begin(9600);
  41.   tempo = millis();
  42.  
  43.   // PORTAS DE ENTRADA DE SINAL
  44.   pinMode(SinalPressostato, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  45.   pinMode(SinalBombaPress1, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  46.   pinMode(SinalBombaPress2, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  47.   pinMode(SinalBombaOR, INPUT_PULLUP);            // PULLUP INVERTE A LOGICA DA PORTA
  48.   pinMode(SinalChaveAuto, INPUT_PULLUP);          // PULLUP INVERTE A LOGICA DA PORTA
  49.   pinMode(SinalStandBy, INPUT_PULLUP);            // PULLUP INVERTE A LOGICA DA PORTA
  50.   pinMode(SinalFiltroAreia, INPUT_PULLUP);        // PULLUP INVERTE A LOGICA DA PORTA
  51.   pinMode(SinalFiltroAbrandador, INPUT_PULLUP);   // PULLUP INVERTE A LOGICA DA PORTA
  52.   pinMode(2, INPUT);                              // ENTRADA DO PULSO DO SENSOR DE VAZAO
  53.   attachInterrupt(0, incpulso, RISING);           // CONFIGURA O PINO 2(INTERRUPÇÃO 0)
  54.  
  55.   // PORTAS DE SAÍDA DE SINAL PARA ACIONAMENTO DO RELÉ (SE ATIVA NO ESTADO LOW)
  56.   pinMode(RelePress1, OUTPUT);
  57.   pinMode(RelePress2, OUTPUT);
  58.   pinMode(ReleBombaOR, OUTPUT);
  59.   pinMode(ReleValvulaAgua, OUTPUT);
  60.   pinMode(ReleAutoFlush, OUTPUT);
  61.   pinMode(ReleStandBy, OUTPUT);
  62.  
  63.   // CONFIGURA OS RELÉS PARA FICAREM INICIALMENTE DESLIGADOS
  64.   digitalWrite(RelePress1, HIGH);
  65.   digitalWrite(RelePress2, HIGH);
  66.   digitalWrite(ReleBombaOR, HIGH);
  67.   digitalWrite(ReleValvulaAgua, HIGH);
  68.   digitalWrite(ReleAutoFlush, HIGH);
  69.   digitalWrite(ReleStandBy, HIGH);
  70.  
  71. }
  72.  
  73. void rotina_fluxo()
  74. {
  75.   mostra = true;                            // TRAVA A TELA
  76.   valor_vazao = (contaPulso / 5.5) / 2 ;    // CONVERTE PARA L/MIN / 2 DEVIDO OS 500MS UTILIZADO NO CICLO
  77.   lcd.clear();
  78.   lcd.setCursor(1, 0);
  79.   lcd.print("OR Produzindo");
  80.   lcd.setCursor(3, 1);
  81.   lcd.print(valor_vazao);                   // ESCREVE NO DISPLAY O VALOR DA VAZAO
  82.   lcd.print(" L/min ");                     // ESCREVE L/MIN
  83.   contaPulso = 0;                           // ZERA A VARIÁVEL
  84. }
  85.  
  86. void rotina_baixo_fluxo()
  87. {
  88.   mostra = true;                            // TRAVA A TELA
  89.   valor_vazao = (contaPulso / 5.5) / 2 ;    // CONVERTE PARA L/MIN / 2 DEVIDO OS 500MS UTILIZADO NO CICLO
  90.   lcd.clear();
  91.   lcd.setCursor(1, 0);
  92.   lcd.print("Baixa Producao");
  93.   lcd.setCursor(3, 1);
  94.   lcd.print(valor_vazao);                   // ESCREVE NO DISPLAY O VALOR DA VAZAO
  95.   lcd.print(" L/min ");                     // ESCREVE L/MIN
  96.   contaPulso = 0;                           // ZERA A VARIÁVEL
  97. }
  98.  
  99. void rotina_manutencao_filtros()   // AS BOMBAS DE PRESSURIZAÇÃO NÃO PODEM SER LIGADAS AO MESMO TEMPO, E DEVEM SER ALTERNADAS EM CADA DIA.
  100. {
  101.   digitalWrite(RelePress1, LOW);     // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 1
  102.   digitalWrite(RelePress2, LOW);     // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 2
  103.   digitalRead(SinalFiltroAreia);     // VERIFICA O ESTADO DO FILTRO DE AREIA
  104.   digitalRead(SinalFiltroAbrandador);// VERIFICA O ESTADO DO FILTRO ABRANDADOR
  105.  
  106. } // FIM DA ROTINA DE MANUTENÇAO DOS FILTROS
  107.  
  108. void rotina_osmose_em_producao()
  109. {
  110.   lcd.clear();
  111.   lcd.setCursor(0, 0);
  112.   lcd.print("Monitoramento da");
  113.   lcd.setCursor(1, 1);
  114.   lcd.print("Osmose Reversa");
  115.   digitalWrite(RelePress1, LOW);     // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 1
  116.   digitalWrite(RelePress2, LOW);     // FALTA DETERMINAR QUANDO SERÁ LIGADA A BOMBA PRESSURIZAÇÃO 2
  117.  
  118.   if (SinalPressostato == LOW)       // SE O CONTATO DO PRESSOSTATO ESTIVER FECHADO, A OSMOSE SEGUE EM PRODUÇÃO
  119.   {
  120.     digitalWrite(ReleValvulaAgua, LOW);// LIGA A VÁLVULA DE ENTRADA D'AGUA
  121.     digitalWrite(ReleBombaOR, LOW);    // LIGA A BOMBA OR
  122.     digitalRead(RelePress1);           // VERIFICA O ESTADO DA BOMBA DE PRESSURIZAÇÃO 1
  123.     digitalRead(RelePress2);           // VERIFICA O ESTADO DA BOMBA DE PRESSURIZAÇÃO 2
  124.     digitalRead(valor_vazao);          // VERIFICA SE EXISTE FLUXO DE ÁGUA TRATADA
  125.  
  126.     if (valor_vazao != 0)              // SE HÁ FLUXO DE ÁGUA TRATADA, CHAMA A ROTINA FLUXO, INDICANDO QUE A OSMOSE ESTÁ PRODUZINDO CORRETAMENTE
  127.     {
  128.       void rotina_fluxo();
  129.     }
  130.     if (valor_vazao == 0)              // SE NÃO HÁ FLUXO DE ÁGUA TRATADA, CHAMA A ROTINA DE BAIXO FLUXO, INDICANDO QUE A OSMOSE NÃO ESTÁ PRODUZINDO
  131.     {
  132.       void rotina_baixo_fluxo();
  133.     }
  134.     digitalRead(SinalFiltroAreia);     // VERIFICA O ESTADO DO FILTRO DE AREIA
  135.     digitalRead(SinalFiltroAbrandador);// VERIFICA O ESTADO DO FILTRO ABRANDADOR
  136.  
  137.     if (SinalFiltroAreia == LOW || SinalFiltroAbrandador == LOW) // SE ALGUM DOS FILTROS ESTIVER ATIVO, A OSMOSE ENTRARÁ NA ROTINA DE MANUTENÇAO DOS FILTROS
  138.     {
  139.       void rotina_manutencao_filtros();
  140.     }
  141.   }
  142.   digitalRead(SinalChaveAuto);       // VERIFICA SE A CHAVE ESTÁ NO MODO AUTOMÁTICO
  143.   digitalRead(SinalStandBy);         // VERIFICA SE A CHAVE ENTROU NO MODO STANDBY
  144.  
  145.   if (SinalPressostato == HIGH)
  146.   {
  147.     lcd.clear();
  148.     lcd.setCursor(4, 0);
  149.     lcd.print("Atencao");
  150.     lcd.setCursor(2, 1);
  151.     lcd.print("Falta d'agua");
  152.     digitalWrite(ReleValvulaAgua, HIGH);// DESLIGA A VÁLVULA DE ENTRADA D'AGUA
  153.     digitalWrite(ReleBombaOR, HIGH);    // DESLIGA A BOMBA OR
  154.   }
  155.  
  156. } // FIM DA ROTINA DE OSMOSE EM PRODUÇÃO
  157.  
  158. void rotina_standby()
  159. {
  160.   delay(3600000);                    // AGUARDA 1 HORA PARA ENTRAR EM PRODUÇÃO
  161.   void rotina_osmose_em_producao();
  162.   delay(600000);                     // PRODUZ DURANTE 10 MINUTOS
  163.   digitalRead(SinalChaveAuto);       // VERIFICA SE A CHAVE ENTROU NO MODO AUTOMÁTICO
  164.   digitalRead(SinalStandBy);         // VERIFICA SE A CHAVE ESTÁ NO MODO STANDBY
  165. } // FIM DA ROTINA DE STANDBY
  166.  
  167. void loop() {
  168.   // REALIZA A LEITURA DO MODO DE OPERAÇÃO
  169.  
  170.   ModoAutomatico = digitalRead(SinalChaveAuto);
  171.   ModoStandBy = digitalRead(SinalStandBy);
  172.  
  173.   if ((millis() - tempo) >= ciclo)    // TEMPO DE DISPLAY
  174.   {
  175.     tempo = millis();                   // RECUPERA millis()
  176.     flag = false;                       // LIBERA DISPLAY
  177.     mostra = false;                     // LIBERA TELA FLUXO
  178.   }
  179.  
  180.   if (ModoAutomatico == LOW);        // SE O MODO AUTOMATICO ESTIVER ATIVO, A OSMOSE USARÁ A ROTINA DA OSMOSE EM OPERAÇÃO NORMAL
  181.   {
  182.     void rotina_osmose_em_producao();
  183.   }
  184.   if (ModoStandBy == LOW);           // SE O MODO STANDBY ESTIVER ATIVO, A OSMOSE USARÁ A ROTINA NO MODO STANDBY
  185.   {
  186.     void rotina_standby();
  187.   }
  188. } // FIM DO VOID LOOP
  189.  
  190. void incpulso ()
  191. {
  192.   contaPulso++;                   // INCREMENTA A VARIÁVEL DE PULSOS
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement