Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino 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)