Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino_Hecker Projekte Ampelschaltung ohne Delay

Ampelschaltung ohne Delay

Mit diesem Programm kann man eine Ampelschaltung mit dem Befehl millis() steuern, um den Befehl delay() nicht zu verwenden

 

Bauteile:

- Arduino Uno
- 3 verschiedene LEDs (1 x ROT, 1 x GELB, 1 x GRÜN)
- 4 Kabel
- 1 Breadboard

Schaltskizze:

 ampel

 

Code:


 
int ROT = 10 ;
int GELB = 11 ;
int GRUEN = 12 ;
 
unsigned long time;
 
int phase = 1;  //derzeitige Phase wird festgelegt
 
unsigned long interval1 = 3500; //verschiedene Intervalle für die einzelnen Ampelphasen
unsigned long interval2 = 500;
unsigned long interval3 = 2500;
unsigned long interval4 = 1500;
unsigned long previousMillis = 0;
 
void setup () {
  Serial.begin(9600);
  pinMode (ROT , OUTPUT) ;
  pinMode (GELB , OUTPUT) ;
  pinMode (GRUEN , OUTPUT) ;
}
 
void loop () {
  
  if ((phase == 1) and (millis() - previousMillis > interval1)) {  
    previousMillis = millis();                                    
    phase = 2 ; 
  }
  if ((phase == 2) and (millis() - previousMillis > interval2)) {
    previousMillis = millis(); 
    phase = 3 ; 
  }
  if ((phase == 3) and (millis() - previousMillis > interval3)) {
    previousMillis = millis(); 
    phase = 4 ; 
  }
  if ((phase == 4) and (millis() - previousMillis > interval4)) {
    previousMillis = millis(); 
    phase = 1 ; 
  }
 
if (phase == 1) {
  digitalWrite(ROT,HIGH);
  digitalWrite(GELB,LOW);
  digitalWrite(GRUEN,LOW);
  }
if (phase == 2) {
  digitalWrite(ROT,HIGH);
  digitalWrite(GELB,HIGH);
  digitalWrite(GRUEN,LOW);
  }
if (phase == 3) {
  digitalWrite(ROT,LOW);
  digitalWrite(GELB,LOW);
  digitalWrite(GRUEN,HIGH);
  }
if (phase == 4) {
  digitalWrite(ROT,LOW);
  digitalWrite(GELB,HIGH);
  digitalWrite(GRUEN,LOW);
  }
}
 

Von Moritz Burger

 

Erstellt: Moritz Burger (23.07.2014) Letzte Änderung: Andreas Hecker (01.12.2015)