Advertisement
Guest User

TESTE PAUSA

a guest
Sep 6th, 2015
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.54 KB | None | 0 0
  1. unsigned int quantidade = 20;                     // Armazena a quantidade de vezes que o led pisca
  2.  
  3. const int ledPin = 8;
  4.  
  5. const int btnStart=1;                             // Botão que aciona a rotina piscar
  6. const int btnPause=2;                             // Botão que pausa e continua a rotina de corte
  7. const int btnStop=3;                              // Botão que pára a rotina de corte e zera os contadores
  8. const int btnAlimentar=4;                         // Botão que gira o rolete horário para alimentar a bobina
  9. const int btnRetirar=5;                           // Botão que gira o rolete anti-horário para retirar a bobina
  10. const int btnNone=6;
  11.  
  12. unsigned int btn_v = 0;                           // Armazena a leitura analogica dos botões        
  13.  
  14. boolean pausa = false;                            // Armazena o estado da pausa
  15. boolean piscar_running;                           // Armazena o estado da rotina piscar, se está em execução ou não
  16.  
  17.  
  18. char btnRead(){                          
  19.   btn_v = analogRead(0);                           // Leitura dos botões com divisor de tensão
  20.   if (btn_v > 1000) return btnNone;                
  21.   if (btn_v < 50)   return btnStart;              
  22.   if (btn_v < 250)  return btnNone;                     //      Neste sketch o único que será utilizado é o btnStart,
  23.   if (btn_v < 420)  return btnStop;                     //      mas preciso deixar desta forma pois no sketch principal
  24.   if (btn_v < 620)  return btnAlimentar;                //      os outros botões vão ter outras funções.
  25.   if (btn_v < 950)  return btnRetirar;
  26.  
  27.   else return btnNone;                            // Se nenhum botão é acionado retorna btnNone
  28.  
  29. }
  30.  
  31. void setup() {
  32.   pinMode(ledPin, OUTPUT);                        // Pino onde o led está conectado
  33.   attachInterrupt(0, pausar, FALLING);            // Interrupção que chama a função pausar através do pino 2
  34.   Serial.begin(9600);
  35.  
  36. }
  37.  
  38. void piscar(){                                     // Função piscar pra ver se a rotina de pausa vai funcionar
  39.   Serial.println("piscar");                      
  40.   {
  41.    for(quantidade; quantidade>0; quantidade--)    // Pisca a quantidade armazenada na variável quantidade
  42.    {
  43.     if(pausa == false)                              // Se pausa estiver ligado a rotina não roda
  44.     {
  45.   digitalWrite(ledPin, HIGH);              
  46.   delay(1500);
  47.   digitalWrite(ledPin, LOW);
  48.   delay(200);
  49.   Serial.print("qde=");
  50.   Serial.println(quantidade);
  51.     }
  52.  }
  53. }
  54. piscar_running = false;                          // Desliga o estado para identificar que a rotina piscar não está em execução
  55. }
  56.  
  57. void pausar(){                                   // Função pausar chamada pelo pido 2 como prioridade
  58.    
  59.   if(pausa ==false)                              // Só chama a função se o estado de pausa não estiver ligado ainda
  60.   {
  61.   static unsigned long last_interrupt_time = 0;               // DEBOUNCE DO PINO 2
  62.   unsigned long interrupt_time = millis();                    //     "    "   "   "
  63.   if (interrupt_time - last_interrupt_time > 200)             // DEBOUNCE DO PINO 2
  64.  {
  65.   if (piscar_running == true)                    // Só liga a pausa se a rotina piscar estiver em execução, caso contrário não é necessário ligá-la
  66.   {
  67.   Serial.println("interrupt 1");
  68.   delay(1000);
  69.   pausa = true;                                  // Liga a pausa
  70.   Serial.print("pausa=");
  71.   Serial.println(pausa);
  72.   Serial.print("qde=");
  73.   Serial.println(quantidade);
  74.   piscar_running = false;                        // Desliga o estado da rotina piscar
  75.   Serial.print("running=");
  76.   Serial.println(piscar_running);
  77.   delay(1000);
  78.   loop();                                        // Volta pra função loop
  79.   }
  80.  }
  81.  last_interrupt_time = interrupt_time;                        // DEBOUNCE DO PINO 2
  82.   }
  83.     }
  84.  
  85.  
  86.  
  87. void loop(){
  88.   Serial.print("loop");                          
  89.   int leitura = btnRead();                         // Armazena a leitura da função btnRead() na variável leitura
  90.  
  91.   if(leitura == btnStart)                            // Se btnStart for pressionado chama a rotina piscar
  92.  {
  93.   pausa = false;                                   // Desliga a pausa caso estiver ligada (no caso da rotina ter sido pausada e precisar ser reininciada)
  94.   Serial.print("pausa=");
  95.   Serial.println(pausa);
  96.   delay(200);
  97.   piscar_running = true;                           // Liga o estado de execução da rotina piscar
  98.   piscar();                                        // Chama a função piscar
  99.  }
  100.  
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement