Advertisement
RuiViana

Semafor_Pedestre_Carro

Jun 27th, 2016
573
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.57 KB | None | 0 0
  1. /*  Sinal de carro:  Verde 5segs  Amaredo 2segs Vermelho 5segs Verde ......
  2.     Sinal de Pedestre:  Vermelho.
  3.     Se botão acionado:
  4.       Qdo o sinal de carro ficar vermelho. Sinal de pedestre fica Verde 5Segs vermelho
  5.       e carro Verde iniciando o ciclo de carro
  6.  
  7.     Verde 5segs  Amaredo 2segs Vermelho 5segs Verde ......
  8.  
  9.  
  10.     Botão :  Port 7----- botao ---- Gnd
  11.     LEDs  :  +5V ---- resistor de +- 1K ------ LED --- Port
  12. */
  13.  
  14. #define LED_VD 2
  15. #define LED_AM 3
  16. #define LED_VM 4
  17. #define PED_VD 5
  18. #define PED_VM 6
  19. #define botao 7
  20. int estadoBotao = 0;
  21.  
  22. byte PedestreReq = 0;                           // Indicador de requeste de pedestre
  23. unsigned long Flag;                             // Flag para tempo
  24. byte LVM = 1;                                   // Flag para indicar condição de Led vermelho
  25. byte LAM = 0;                                   // Flag para indicar condição de Led amarelo
  26. byte LVD = 0;                                   // Flag para indicar condição de Led verde
  27. //----------------------------
  28. void setup()
  29. {
  30.   pinMode(LED_VM, OUTPUT);
  31.   pinMode(LED_AM, OUTPUT);
  32.   pinMode(LED_VD, OUTPUT);
  33.   pinMode(PED_VD, OUTPUT);
  34.   pinMode(PED_VM, OUTPUT);
  35.   pinMode(botao, INPUT_PULLUP);
  36.   digitalWrite(LED_VM, LOW);
  37.   digitalWrite(LED_AM, HIGH);
  38.   digitalWrite(LED_VD, HIGH);
  39.   digitalWrite(PED_VM, LOW);
  40.   digitalWrite(PED_VD, HIGH);
  41. }
  42. //---------------------------
  43. void loop()
  44. {
  45.   if (digitalRead(botao) == LOW)                // Se botão + foi apertado
  46.   {
  47.     delay(10);                                  // Delay para evitar bouncing
  48.     if (digitalRead(botao) == LOW)              // Se botão + continua apertado
  49.     {
  50.       PedestreReq = 1;                          // Se pesdestre acionou
  51.     }
  52.   }
  53.   if (LVM == 1)                                 // LED vermelho aceso
  54.   {
  55.     while (PedestreReq == 1)                    // Enquanto pedestre passando
  56.     {
  57.       digitalWrite(PED_VM, HIGH);               // Apaga pedestre vermelho
  58.       digitalWrite(PED_VD, LOW);                // Acende pedestre verde
  59.       if (millis() - Flag > 5000)               // Se passou 5 segundos              
  60.       {
  61.         for (int i = 0; i < 6; i++)             // Pisca 5 vezes
  62.         {
  63.           digitalWrite(PED_VD, HIGH);           // Apaga pedestre verde
  64.           delay(200);
  65.           digitalWrite(PED_VD, LOW);            // Acende pedestre verde
  66.           delay(200);
  67.         }
  68.         digitalWrite(PED_VM, LOW);              // Acende pedestre vermelho
  69.         digitalWrite(PED_VD, HIGH);             // Apaga pedestre verde
  70.         PedestreReq = 0;
  71.         digitalWrite(LED_VD, HIGH);             // Apaga carro vermelho
  72.         digitalWrite(LED_VM, LOW);              // Acende carro verde
  73.         LVM = 1;                                // Liga indicador carro verde aceso
  74.         LAM = 0;                                // Desliga indicador carro amarelo acesso
  75.       }
  76.     }
  77.   }
  78.   if (LVM == 1)                                 // LED carro vermelho aceso
  79.   {
  80.     if (millis() - Flag > 5000)                 // Se passou 5 segundos
  81.     {
  82.       digitalWrite(LED_VM, HIGH);               // Apaga carro vermelho
  83.       digitalWrite(LED_VD, LOW);                // Acende carro verde
  84.       LVM = 0;                                  // Desliga indicador carro vermelho acesso
  85.       LAM = 1;                                  // Liga indicador carro amarelo aceso
  86.       Flag = millis();                          // Recupera millis
  87.     }
  88.   }
  89.   if (LAM == 1)                                 // LED carro verde aceso
  90.   {
  91.     if (millis() - Flag > 5000)                 // Se passou 5 segundos
  92.     {
  93.       digitalWrite(LED_VD, HIGH);               // Apaga carro verde
  94.       digitalWrite(LED_AM, LOW);                // Acende carro amarelo
  95.       LAM = 0;                                  // Desliga indicador carro amarelo acesso
  96.       LVD = 1;                                  // Liga indicador carro verde aceso
  97.       Flag = millis();                          // Recupera millis
  98.     }
  99.   }
  100.   if (LVD == 1)                                 // LED carro amarelo aceso
  101.   {
  102.     if (millis() - Flag > 2000)                 // Se passou 2 segundos
  103.     {
  104.       digitalWrite(LED_AM, HIGH);               // Apaga carro amarelo
  105.       digitalWrite(LED_VM, LOW);                // Acende carro vermelho
  106.       LVD = 0;                                  // Desliga indicador carro verde acesso
  107.       LVM = 1;                                  // Liga indicador carro vermelho aceso
  108.       Flag = millis();                          // Recupera millis
  109.     }
  110.   }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement