Advertisement
tbatista

Problema com Millis()

Jun 11th, 2016
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1. //Controle Solenoide com Sensor de luz
  2. // wdt// pretendo usar o wdt para resetar a contagem do millis() depois de executar os void's noite() e dia()
  3. #include <avr/wdt.h>
  4. // controle valvula solenoide
  5. int ValvPin = 13; //Solenoide no pino 5
  6. boolean Estado = LOW;
  7.  
  8. /// config LDR
  9. int ldrPin = 1; //LDR no pino analígico 8
  10. int ldr = 0;//Valor lido do LDR
  11.  
  12. // intervalos a serem utilizados, substitui eles para valores pequenos a titulo de teste
  13. unsigned long tempo = 0; // ldr()
  14. unsigned long tempo2 = 0; // noite()
  15. unsigned long tempo1 = 0; // dia()
  16.  
  17. const long umSeg = 1000;           // intervalo 1seg
  18. const long quatroSeg = 4000;          // intervalo seg
  19. const long dezMin = 600000;        // intervalo 10min
  20. const long sessentaMin = 3600000;       // intervalo 60 min
  21. const long trintaMin = 1800000;       // intervalo 30 min
  22. const long centoEvinteMin = 7200000;       // intervalo 120 min
  23.  
  24.  
  25. int LDR() {// faz a leitura do sensor e converte
  26.   ///ler o valor do LDR
  27.   ldr = analogRead(ldrPin); //O valor lido será entre 0 e 1023
  28.   if (millis() - tempo >= 1000) {
  29.     tempo = millis();
  30.     //imprime o valor lido do LDR no monitor serial
  31.     Serial.println(ldr);
  32.   }
  33. }
  34.  
  35. void dia () { // ações a serem executas quando for identificado dia
  36.  
  37.   if (millis() - tempo1 >= 1001) {// deixei valores de intervalos direto
  38.     tempo1 = millis();
  39.     digitalWrite(ValvPin, !Estado);
  40.     Serial.println("dia");
  41.   }
  42.   if (millis() - tempo1 >= 4000) {// deixei valores de intervalos direto
  43.     tempo1 = millis();
  44.     digitalWrite(ValvPin, Estado);
  45.   }
  46.   //  wdt_reset(); //diz que esta tudo ok
  47. }
  48.  
  49. void noite () { // ações a serem executadas quando for identificado noite
  50.  
  51.   if (millis() - tempo2 >= 2000) {
  52.     tempo2 = millis();
  53.     digitalWrite(ValvPin, !Estado);
  54.     Serial.println("noite");
  55.   }
  56.   if (millis() - tempo2 >= 4000) { /// ta errado aqui
  57.     tempo2 = millis();
  58.     digitalWrite(ValvPin, Estado);
  59.   }
  60.   // wdt_reset(); //diz que esta tudo ok
  61. }
  62.  
  63. void LDRcontrol() {
  64.  
  65.   LDR(); // lê sensor
  66.   //Os valores da luminosidade podem ser alterados conforme a necessidade
  67.   //Luminosidade baixa
  68.   if (ldr >= 800) {
  69.     noite(); // executa ações noturnas
  70.   }
  71.   //Luminosidade media a alta
  72.   else if (ldr <= 800) {
  73.     dia ();// executa ações diurnas
  74.   }
  75. }
  76.  
  77. void loop() {
  78.   LDRcontrol();//
  79.   //delay(1000);
  80. }
  81.  
  82. void setup() {
  83.   // wdt_disable();
  84.   pinMode(ValvPin, OUTPUT); //define a porta 7 como saída
  85.   Serial.begin(9600); //Inicia a comunicação serial
  86.   // wdt_enable(WDTO_2S); //Função que ativa e altera o Watchdog
  87.  
  88.   // WDTO_1S
  89.   // WDTO_2S
  90.   // WDTO_4S
  91.   // WDTO_8S
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement