Esercitazione: Semaforo

Obiettivi:

  • Segnali multipli
  • Funzione mills
  • Uso dell'istruzione if ...... else if

Semaforo con impostazione giorno / notte (lampeggiante giallo)


Codice:

  1. int ledState = LOW;  
  2. unsigned long previousMillis = 0;        

  3. const long interval = 500;       

  4.   int n=0;
  5.   bool Stato = false;
  6.   bool Ck = false;
  7.   int SEC=0;
  8.   bool ON;
  9.   int flash;


  10. void setup() {
  11.  
  12.   pinMode(7, OUTPUT); // verde A
  13.   pinMode(2, OUTPUT); // giallo A
  14.   pinMode(3, OUTPUT); // rosso A
  15.   pinMode(4, OUTPUT); // verde B 
  16.   pinMode(5, OUTPUT); // giallo B
  17.   pinMode(6, OUTPUT); // rosso B
  18.   pinMode(13, INPUT); // lampeggiante
  19.   Serial.begin (9800);
  20. }

  21. // the loop function runs over and over again forever
  22. void loop() {
  23.  
  24.   unsigned long currentMillis = millis();

  25.   if (currentMillis - previousMillis >= interval) {
  26.      
  27.     previousMillis = currentMillis;
  28. if (ledState == LOW) {
  29.       ledState = HIGH;
  30.     } else {
  31.       ledState = LOW;
  32.     }
  33.   
  34.   Ck = false;
  35.  
  36.   if (ledState)  { 
  37.   Ck = true;
  38.   }


  39.   if (Ck==true)  {
  40.     SEC=SEC+1;
  41.     
  42.     if (SEC>18)  {
  43.       SEC = 0;
  44.     }
  45.   }
  46.   
  47.   if (!digitalRead(13)) {

  48.   if ( SEC<=5)  {
  49.       digitalWrite(7, HIGH);
  50.       digitalWrite(2, LOW);
  51.       digitalWrite(3, LOW);
  52.       digitalWrite(4, LOW);
  53.       digitalWrite(5, LOW);
  54.       digitalWrite(6, HIGH);
  55.   }
  56.   else if ( SEC<8 && SEC>5) {  
  57.       digitalWrite(7, LOW);
  58.       digitalWrite(2, HIGH);
  59.       digitalWrite(3, LOW);
  60.       digitalWrite(4, LOW);
  61.       digitalWrite(5, LOW);
  62.       digitalWrite(6, HIGH);
  63.   }
  64.   else if ( SEC<15 && SEC>8) {
  65.       digitalWrite(7, LOW);
  66.       digitalWrite(2, LOW);
  67.       digitalWrite(3, HIGH);
  68.       digitalWrite(4, HIGH);
  69.       digitalWrite(5, LOW);
  70.       digitalWrite(6, LOW);
  71.   }
  72.   else if ( SEC<18 && SEC>15)  {
  73.       digitalWrite(7, LOW);
  74.       digitalWrite(2, LOW);
  75.       digitalWrite(3, HIGH);
  76.       digitalWrite(4, LOW);
  77.       digitalWrite(5, HIGH);
  78.       digitalWrite(6, LOW);
  79.   }
  80.   }
  81.       else {
  82.               
  83.       digitalWrite(7, LOW);
  84.       digitalWrite(2, ledState);
  85.       digitalWrite(3, LOW);
  86.       digitalWrite(4, LOW);
  87.       digitalWrite(5, ledState);
  88.       digitalWrite(6, LOW);
  89.       }
  90.   }     
  91.  Serial.print (SEC);
  92.  Serial.print ("  ");
  93.  Serial.print (flash);
  94.  Serial.print ("  ");
  95.  Serial.println (n);
  96.   
  97. }

Ultime modifiche: martedì, 29 marzo 2022, 11:47