Hallo,
ich programmiere momentan eine Ampel mit Fußgängerampel für die Modellbahn mit einem Arduino Nano, bei der die LEDs jeweils an einen eigenen digital Pin angeschlossen sind, die LEDs haben außerdem unterschiedliche Vorwiderstände. Die Programmierung der Ampel funktioniert mit folgendem Programm, wobei ich auf delays verzichtet habe, da es mit diesen nicht funktioniert hat:
Pin 2= rot
Pin 3= gelb
Pin 4=grün
Pin 5=rot für die Fußgängerampel
Pin 6=grün für die Fußgängerampel
int zeit = 0 ;
int phase = 0 ;
int interval1 = 0 ;
int interval2 = 0 ;
int interval3 = 0 ;
int interval4 = 0 ;
int vorherigeMillis = 0 ;
void AmpelEinbahnstrasse();
void setup()
{
pinMode( 2 , OUTPUT);
pinMode( 3 , OUTPUT);
pinMode( 4 , OUTPUT);
pinMode( 5 , OUTPUT);
pinMode( 6 , OUTPUT);
Serial.begin(9600);
zeit = 0 ;
phase = 1 ;
interval1 = 150 ;
interval2 = 600 ;
interval3 = 100 ;
interval4 = 800 ;
vorherigeMillis = 0 ;
digitalWrite( 2 , LOW );
digitalWrite( 3 , LOW );
digitalWrite( 4 , LOW );
digitalWrite( 5 , LOW );
digitalWrite( 6 , LOW );
}
void loop()
{
long current=millis();
while(current+1000>=millis())
{
zeit = ( zeit + 1 ) ;
Serial.print("zeit");
Serial.print(zeit);
Serial.println();
}
AmpelEinbahnstrasse();
}
void AmpelEinbahnstrasse()
{
if (( ( ( phase ) == ( 1 ) ) && ( ( ( zeit - vorherigeMillis ) ) > ( interval1 ) ) ))
{
vorherigeMillis = zeit ;
phase = 2 ;
}
if (( ( ( phase ) == ( 2 ) ) && ( ( ( zeit - vorherigeMillis ) ) > ( interval2 ) ) ))
{
vorherigeMillis = zeit ;
phase = 3 ;
}
if (( ( ( phase ) == ( 3 ) ) && ( ( ( zeit - vorherigeMillis ) ) > ( interval3 ) ) ))
{
vorherigeMillis = zeit ;
phase = 4 ;
}
if (( ( ( phase ) == ( 4 ) ) && ( ( ( zeit - vorherigeMillis ) ) > ( interval4 ) ) ))
{
vorherigeMillis = zeit ;
phase = 1 ;
}
if (( ( phase ) == ( 1 ) ))
{
digitalWrite( 2 , HIGH );
digitalWrite( 3 , LOW );
digitalWrite( 4 , LOW );
digitalWrite( 5 , LOW );
digitalWrite( 6 , HIGH );
}
if (( ( phase ) == ( 2 ) ))
{
digitalWrite( 2 , LOW );
digitalWrite( 3 , HIGH );
digitalWrite( 4 , LOW );
digitalWrite( 5 , HIGH );
digitalWrite( 6 , LOW );
}
if (( ( phase ) == ( 3 ) ))
{
digitalWrite( 2 , LOW );
digitalWrite( 3 , LOW );
digitalWrite( 4 , HIGH );
digitalWrite( 5 , HIGH );
digitalWrite( 6 , LOW );
}
if (( ( phase ) == ( 4 ) ))
{
digitalWrite( 2 , HIGH );
digitalWrite( 3 , HIGH );
digitalWrite( 4 , LOW );
digitalWrite( 5 , HIGH );
digitalWrite( 6 , LOW );
}
}
Das Problem besteht nun genau darin, dass es komischerweise nicht möglich ist das die rote LED der Ampel und die grüne LED der Fußgängerampel und die grüne LED der Ampel und die rote LED der Fußgängerampel gleichzeitig leuchten. Wenn entweder die eine oder die andere dieser beiden Kombinationen angeschaltet werden soll leuchtet nur die rote LED. Weiß vielleicht jemand wobei das Problem hier liegt?
Grüße Zemizz