Advertisement
RuiViana

CGM

Jun 17th, 2016
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.83 KB | None | 0 0
  1. #include <TimerOne.h>             // Biblioteca do timer1
  2. //   #include <LiquidCrystal_I2C.h>
  3. //   LiquidCrystal_I2C lcd(0x38,  2, 1, 0, 7, 6, 5, 4, 3, POSITIVE);  // Set the LCD I2C address
  4. #include <LiquidCrystal.h>
  5. #include <Limits.h>
  6.  
  7. const int temperatura  = 0;
  8. int pinoativaluz = 2; //Pino ligado ao acionamento da lampada
  9. int pinopir = 3; //Pino ligado ao sensor
  10. int acionamento; //Variavel para guardar valor do sensor
  11. int ConRegre = 30; //variavel com o valor definido de 30 segundos
  12. int ConRegreReg = ConRegre; //receble valor de referencia
  13. int percentc1 = 100;
  14. int percentc2 = 100;
  15. int percentc3 = 100;
  16. int percentc4 = 100;
  17. int val1 = 100;
  18. int val2 = 25;
  19. int val3 = 25;
  20. int val4 = 25;
  21. int motorPin = A3;
  22.  
  23. #define bMenu 5 // Os pinos analógicos podem ser
  24. #define bChange 4 // usados como digitais, bastando
  25. #define bUp 13 // referenciá-los por A0, A1..
  26. #define bDown 6
  27. #define bMenu0 90 // Valor de referência que a
  28. #define bChange0 91 // função CheckButton() passa
  29. #define bUp0 92 // indicando que um botão foi
  30. #define bDown0 93 // solto
  31. boolean aMenu, aChange, aUp, aDown; // Grava o ultimo valor lidos nos botões.
  32. const int sensorTemp = 0;
  33. int valorSensorTemp = 0;
  34. int menorValorTemp  = INT_MAX;
  35.  
  36. // Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos botões
  37.  
  38. char state = 1; // variável que guarda posição atual do menu
  39.  
  40. LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // Declaração do objeto tipo lcd
  41.  
  42. byte seta_direita[8] = {
  43.   B00000,
  44.   B00100,
  45.   B00010,
  46.   B11111,
  47.   B00010,
  48.   B00100,
  49.   B00000,
  50.   B00000
  51. };
  52.  
  53. byte seta_esquerda[8] = {
  54.   B00000,
  55.   B00100,
  56.   B01000,
  57.   B11111,
  58.   B01000,
  59.   B00100,
  60.   B00000,
  61.   B00000
  62. };
  63. byte seta_abaixo[8] = {
  64.   B00000,
  65.   B00100,
  66.   B00100,
  67.   B10101,
  68.   B01110,
  69.   B00100,
  70.   B00000,
  71.   B00000
  72. };
  73. byte seta_acima[8] = {
  74.   B00000,
  75.   B00100,
  76.   B01110,
  77.   B10101,
  78.   B00100,
  79.   B00100,
  80.   B00000,
  81.   B00000
  82. };
  83.  
  84. //----------------------------------
  85. void callback()       // Cada vez que "estoura" o timer 1 chama esta rotina
  86. {
  87.   ConRegre--;
  88.   if (ConRegre <= 0) ConRegre = 0;    // Se chegar em zero, fica em zero
  89. }
  90. //----------------------------------
  91. void setup()
  92. {
  93.   Timer1.initialize(1000000);         // initialize timer1, and set a 1 second period
  94.   Timer1.attachInterrupt(callback);   // attaches callback() as a timer overflow interrupt
  95.   lcd.createChar(1, seta_direita);   // vai criar novos caracteres
  96.   lcd.createChar(2, seta_esquerda);
  97.   lcd.createChar(3, seta_abaixo);
  98.   lcd.createChar(4, seta_acima);
  99.   lcd.begin(16, 2); // Iniciando a biblioteca do LCD
  100.   lcd.print("INICIANDO... ");
  101.   delay(5000);
  102.   pinMode(bMenu, INPUT); // Botões
  103.   pinMode(bChange, INPUT);
  104.   pinMode(bUp, INPUT);
  105.   pinMode(bDown, INPUT);
  106.   pinMode(A5, OUTPUT);
  107.   digitalWrite(bMenu, HIGH); // Aciona o pull-up interno
  108.   digitalWrite(bChange, HIGH); // dos botões
  109.   digitalWrite(bUp, HIGH);
  110.   digitalWrite(bDown, HIGH);
  111.   pinMode(pinoativaluz, OUTPUT); //Define pino como saida
  112.   pinMode(pinopir, INPUT); //Define pino sensor como entrada
  113.   digitalWrite(A5, HIGH); //Comuta para o controle digital digital
  114.   digitalWrite(pinoativaluz, HIGH);
  115.   pinMode(motorPin, OUTPUT);
  116.   analogWrite(motorPin, 24);
  117.  
  118. }
  119. //----------------------------------
  120. void loop()
  121. {
  122.   acionamento = digitalRead(pinopir); //Le o valor do sensor
  123.   if (acionamento != 0)
  124.   {
  125.     digitalWrite(pinoativaluz, HIGH); //aciona a luz se estiver desligada
  126.     ConRegre = ConRegreReg; // reseta o contador para o valor definido pela variável ConRegreReg
  127.   }
  128.   if (ConRegre <= 0)
  129.   {
  130.     digitalWrite(pinoativaluz, LOW); // desliga a luz ao final da contagem
  131.   }
  132.  
  133.   //  CalcTemp;
  134.   ////////////////////////////////////////////////////cod. sensor
  135.   switch (state) {
  136.     case 1: //MENU 1 - CONTROLE (LIGADO/DESLIGADO)
  137.       switch (CheckButton()) {
  138.         case bMenu:
  139.           lcd.clear();
  140.           digitalWrite(A5, LOW);
  141.           lcd.setCursor(0, 1);
  142.           lcd.print("DESLIGADO    ");
  143.           break;
  144.         case bDown:
  145.           lcd.clear();
  146.           Set_state(2);
  147.           break;
  148.         case bChange:
  149.           lcd.clear();
  150.           digitalWrite(A5, HIGH);
  151.           lcd.setCursor(0, 1);
  152.           lcd.print("LIGADO       ");
  153.           break;
  154.         default:
  155.           Set_state(1);
  156.           if (digitalRead(A5) == 1)
  157.           {
  158.             lcd.setCursor(0, 1);
  159.             lcd.print("LIGADO       ");
  160.           }
  161.       }
  162.       break;
  163.     case 2: //ILUMINACAO
  164.       switch (CheckButton()) {
  165.         case bMenu:
  166.           lcd.clear();
  167.           Set_state(3);
  168.           break;
  169.         case bDown:
  170.           lcd.clear();
  171.           Set_state(5);
  172.           break;
  173.         case bUp:
  174.           lcd.clear();
  175.           Set_state(1);
  176.           break;
  177.         default:
  178.           Set_state(2);
  179.       }
  180.       break;
  181.     case 3: //ILUMINACAO - CONFIGURA TEMPO
  182.       switch (CheckButton())
  183.       {
  184.         case bMenu:
  185.           lcd.clear();
  186.           Set_state(4);
  187.           break;
  188.         case bChange:
  189.           lcd.clear();
  190.           Set_state(2);
  191.           break;
  192.         case bDown:
  193.           if (ConRegreReg >= 0) {
  194.             ConRegreReg = ConRegreReg - 30;
  195.             ConRegre = ConRegreReg;
  196.             break;
  197.           case bUp:
  198.             ConRegreReg = ConRegreReg + 30;
  199.             ConRegre = ConRegreReg;
  200.             break;
  201.           default:
  202.             Set_state(3);
  203.           }
  204.       }
  205.       break;
  206.     case 4: //ILUMINACAO - MONITORACAO
  207.       switch (CheckButton())
  208.       {
  209.         case bMenu:
  210.           lcd.clear();
  211.           Set_state(2);
  212.           break;
  213.         case bChange:
  214.           lcd.clear();
  215.           Set_state(3);
  216.           break;
  217.         default:
  218.           Set_state(4);
  219.       }
  220.       break;
  221.     case 5: //CARGA
  222.       switch (CheckButton()) {
  223.         case bMenu:
  224.           lcd.clear();
  225.           Set_state(6);
  226.           break;
  227.         case bDown:
  228.           lcd.clear();
  229.           Set_state(1);
  230.           break;
  231.         case bUp:
  232.           lcd.clear();
  233.           Set_state(2);
  234.           break;
  235.         default:
  236.           Set_state(5);
  237.       }
  238.       break;
  239.     case 6: //CARGA - 1
  240.       switch (CheckButton()) {
  241.         case bMenu:
  242.           lcd.clear();
  243.           Set_state(7);
  244.           break;
  245.         case bChange:
  246.           lcd.clear();
  247.           Set_state(5);
  248.           break;
  249.         case bUp:
  250.           if (val1 <= 100) {
  251.             lcd.clear(); val1++;
  252.             delay(100);
  253.             analogWrite(motorPin, val1);
  254.           }
  255.  
  256.           break;
  257.         case bDown:
  258.           if (val1 > 0) {
  259.             lcd.clear(); val1--;
  260.             delay(100);
  261.             analogWrite(motorPin, val1);
  262.           }
  263.           break;
  264.         default:
  265.           Set_state(6);
  266.       }
  267.       break;
  268.     case 7: //CARGA - 2
  269.       switch (CheckButton()) {
  270.         case bMenu:
  271.           lcd.clear();
  272.           Set_state(8);
  273.           break;
  274.         case bChange:
  275.           lcd.clear();
  276.           Set_state(6);
  277.           break;
  278.         case bDown:
  279.           if (val2 <= 24) {
  280.             lcd.clear(); val2++;
  281.             delay(100);
  282.           }
  283.           break;
  284.         case bUp:
  285.           if (val2 <= 24) {
  286.             lcd.clear(); val2++;
  287.             delay(100);
  288.           }
  289.           break;
  290.         default:
  291.           Set_state(7);
  292.       }
  293.       break;
  294.     case 8: //CARGA - 3
  295.       switch (CheckButton()) {
  296.         case bMenu:
  297.           lcd.clear();
  298.           Set_state(9);
  299.           break;
  300.         case bChange:
  301.           lcd.clear();
  302.           Set_state(7);
  303.           break;
  304.         case bDown:
  305.           if (val3 <= 24) {
  306.             lcd.clear(); val3++;
  307.             delay(100);
  308.           }
  309.           break;
  310.         case bUp:
  311.           if (val3 <= 24) {
  312.             lcd.clear(); val3++;
  313.             delay(100);
  314.           }
  315.           break;
  316.         default:
  317.           Set_state(8);
  318.       }
  319.       break;
  320.     case 9: //CARGA - 4
  321.       switch (CheckButton()) {
  322.         case bMenu:
  323.           lcd.clear();
  324.           Set_state(10);
  325.           break;
  326.         case bChange:
  327.           lcd.clear();
  328.           Set_state(8);
  329.           break;
  330.         case bDown:
  331.           if (val4 <= 24) {
  332.             lcd.clear(); val4++;
  333.             delay(100);
  334.           }
  335.           break;
  336.         case bUp:
  337.           if (val4 <= 24) {
  338.             lcd.clear(); val4++;
  339.             delay(100);
  340.           }
  341.           break;
  342.         default:
  343.           Set_state(9);
  344.       }
  345.       break;
  346.     case 10: //ILUMINACAO
  347.       switch (CheckButton()) {
  348.         case bMenu:
  349.           lcd.clear();
  350.           Set_state(5);
  351.           break;
  352.         case bDown:
  353.           lcd.clear();
  354.           Set_state(1);
  355.           break;
  356.         case bUp:
  357.           lcd.clear();
  358.           Set_state(2);
  359.           break;
  360.         default:
  361.           Set_state(10);
  362.       }
  363.       break;
  364.     default: ;
  365.   }
  366. }
  367. //----------------------------------
  368. char CheckButton()
  369. {
  370.   if (aMenu != digitalRead(bMenu))
  371.   {
  372.     aMenu = !aMenu;
  373.     if (aMenu) return bMenu0;
  374.     else return bMenu;
  375.   }
  376.   else if (aChange != digitalRead(bChange))
  377.   {
  378.     aChange = !aChange;
  379.     if (aChange) return bChange0;
  380.     else return bChange;
  381.   }
  382.   else if (aUp != digitalRead(bUp))
  383.   {
  384.     aUp = !aUp;
  385.     if (aUp) return bUp0;
  386.     else return bUp;
  387.   }
  388.   else if (aDown != digitalRead(bDown))
  389.   {
  390.     aDown = !aDown;
  391.     if (aDown) return bDown0;
  392.     else return bDown;
  393.   }
  394.   else
  395.     return 0;
  396. }
  397. //---------------------------------
  398. void Set_state(char index)
  399. {
  400.   state = index; // Atualiza a variável state para a nova tela
  401.   switch (state)  // verifica qual a tela atual e exibe o conteúdo correspondente
  402.   {
  403.     case 1: //==================== state 1
  404.       lcd.setCursor(0, 0);
  405.       lcd.print("CONTROLE     ");
  406.       lcd.write(3);
  407.       lcd.write(2);
  408.       lcd.write(1);
  409.       break;
  410.     case 2: //==================== state 2
  411.       lcd.setCursor(0, 0);
  412.       lcd.print("ILUMINACAO   ");
  413.       lcd.setCursor(13, 0);
  414.       lcd.write(4);
  415.       lcd.write(3);
  416.       lcd.write(1);
  417.       lcd.setCursor(0, 1);
  418.       lcd.print("T. CONF:");
  419.       lcd.print(ConRegreReg);
  420.       lcd.print("s");
  421.       break;
  422.     case 3: //==================== state 3
  423.       lcd.setCursor(0, 0);
  424.       lcd.print("CONF. TEMPO ");
  425.       lcd.setCursor(12, 0);
  426.       lcd.write(4);
  427.       lcd.write(3);
  428.       lcd.write(2);
  429.       lcd.write(1);
  430.       lcd.setCursor(0, 1);
  431.       lcd.print("TEMPO: ");
  432.       lcd.print(ConRegreReg);
  433.       lcd.print("s      ");
  434.       break;
  435.     case 4: //==================== state 4
  436.       lcd.setCursor(0, 0);
  437.       lcd.print("MONIT. TEMPO    ");
  438.       lcd.setCursor(14, 0);
  439.       lcd.write(2);
  440.       lcd.write(1);
  441.       lcd.setCursor(0, 1);
  442.       lcd.print("TEMPO: ");
  443.       lcd.print(ConRegre);
  444.       lcd.print("s");
  445.       break;
  446.     case 5: //==================== state 5
  447.       lcd.setCursor(0, 0);
  448.       lcd.print("CARGAS");
  449.       lcd.setCursor(13, 0);
  450.       lcd.write(4);
  451.       lcd.write(3);
  452.       //      lcd.write(2);
  453.       lcd.write(1);
  454.       lcd.setCursor(0, 1);
  455.       lcd.print("CONFIGURACAO");
  456.       break;
  457.     case 6: //==================== state 6
  458.       percentc1 = val1 * 100 / 100;
  459.       lcd.setCursor(0, 0);
  460.       lcd.print("CARGA 1");
  461.       lcd.setCursor(12, 0);
  462.       lcd.write(4);
  463.       lcd.write(3);
  464.       lcd.write(2);
  465.       lcd.write(1);
  466.       lcd.setCursor(0, 1);
  467.       lcd.print(percentc1, DEC);  // mostra o valor de "variavel"
  468.       lcd.print(" %   ");
  469.  
  470.       break;
  471.     case 7: //==================== state 7
  472.       percentc2 = val2 * 100 / 25;
  473.       lcd.setCursor(0, 0);
  474.       lcd.print("CARGA 2");
  475.       lcd.setCursor(12, 0);
  476.       lcd.write(4);
  477.       lcd.write(3);
  478.       lcd.write(2);
  479.       lcd.write(1);
  480.       lcd.setCursor(0, 1);
  481.       lcd.print(percentc2, DEC);  // mostra o valor de "variavel"
  482.       lcd.print(" %   ");
  483.       break;
  484.     case 8: //==================== state 8
  485.       percentc3 = val3 * 100 / 25;
  486.       lcd.setCursor(0, 0);
  487.       lcd.print("CARGA 3");
  488.       lcd.setCursor(12, 0);
  489.       lcd.write(4);
  490.       lcd.write(3);
  491.       lcd.write(2);
  492.       lcd.write(1);
  493.       lcd.setCursor(0, 1);
  494.       lcd.print(percentc3, DEC);  // mostra o valor de "variavel"
  495.       lcd.print(" %   ");
  496.       break;
  497.     case 9: //==================== state 9
  498.       percentc4 = val4 * 100 / 25;
  499.       lcd.setCursor(0, 0);
  500.       lcd.print("CARGA 4");
  501.       lcd.setCursor(12, 0);
  502.       lcd.write(4);
  503.       lcd.write(3);
  504.       lcd.write(2);
  505.       lcd.write(1);
  506.       lcd.setCursor(0, 1);
  507.       lcd.print(percentc4, DEC);  // mostra o valor de "variavel"
  508.       lcd.print(" %   ");
  509.       break;
  510.     case 10: //==================== state 10
  511.  
  512.       lcd.clear();  //limpa o display do LCD.
  513.       lcd.setCursor(0, 0);
  514.       lcd.print("TEMPERATURA     ");
  515.       lcd.setCursor(0, 1);
  516.       //lcd.print(atualizaTemperatura);             //-------------------- Comentei
  517.       atualizaTemperatura();                        //-------------------- Chama rotina de temperatura
  518.       lcd.print(menorValorTemp);                    // Imprime menor valor
  519.       lcd.write(B11011111); //Simbolo de graus celsius
  520.       lcd.print("C");
  521.       lcd.setCursor(13, 1);
  522.       lcd.print("< >");
  523.       delay(300);
  524.       break;
  525.     default:;
  526.   }
  527. }
  528.  
  529. void atualizaTemperatura() {
  530.       menorValorTemp  = INT_MAX; //Inicializando com o maior valor int possível
  531.       for (int i = 1; i <= 8; i++) {
  532.         valorSensorTemp = analogRead(sensorTemp);   //Lendo o valor do sensor de temperatura.
  533.         valorSensorTemp *= 0.54 ;  //Transformando valor lido no sensor de temperatura em graus celsius aproximados.
  534.         if (valorSensorTemp < menorValorTemp) {  //Mantendo sempre a menor temperatura lida
  535.           menorValorTemp = valorSensorTemp;
  536.         }
  537.  //       lcd.print(menorValorTemp);                          // Imprime menor valor
  538.         delay(10);
  539.       }
  540. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement