/*
Aus Pfusch wird schön:
Eine Ampel, die im Sekundentakt umschaltet zwischen
- Rot
- Rot+Gelb
- Grün
- Gelb
3 Dinge:
Pegel != Boolsche Werte != Bits
*/
const byte LED_R = 11, LED_Y = 10, LED_G = 9;
/*
#define ROT 1
#define ROT_GELB 2
#define GRUEN 3
#define GELB 4
*/
// Aufzählung:
// enum Ampelfarbe { ROT, ROT_GELB, GRUEN, GELB } /*var*/;
// Hack-Varianten mit Bitmuster in Enumeration:
enum Ampelfarbe {
ROT=0b100, ROT_GELB=0b110, GRUEN=0b001, GELB=0b010
};
void schalteFarbe(enum Ampelfarbe m)
{
// sauber:
digitalWrite(LED_R, (m & 0b100)!=0 ? HIGH : LOW);
digitalWrite(LED_Y, (m & 0b010)!=0 ? HIGH : LOW);
digitalWrite(LED_G, (m & 0b001)!=0 ? HIGH : LOW);
/*
// old fashioned: in java schon verboten
digitalWrite(LED_R, (m & 0b100) ? HIGH : LOW);
digitalWrite(LED_Y, (m & 0b010) ? HIGH : LOW);
digitalWrite(LED_G, (m & 0b001) ? HIGH : LOW);
// falsch aber fkt. leider:
digitalWrite(LED_R, m & 0b100);
digitalWrite(LED_Y, m & 0b010);
digitalWrite(LED_G, m & 0b001);
*/
// Hardcore, wenn man Menschen hasst:
// PORTB = PORTB & 0b1110001 | (m<<1);
}
void schalteFarbe_sauber(enum Ampelfarbe welche)
{
switch(welche)
{
case ROT:
digitalWrite(LED_R, HIGH);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_G, LOW);
break;
case ROT_GELB:
digitalWrite(LED_R, HIGH);
digitalWrite(LED_Y, HIGH);
digitalWrite(LED_G, LOW);
break;
case GRUEN:
digitalWrite(LED_R, LOW);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_G, HIGH);
break;
case GELB:
digitalWrite(LED_R, LOW);
digitalWrite(LED_Y, HIGH);
digitalWrite(LED_G, LOW);
break;
default:
Serial.println("AAAH!");
}
}
void schalteFarbe_altmodisch(int welche)
{
// bei rot:
if(welche == ROT)
{
digitalWrite(LED_R, HIGH);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_G, LOW);
}
// bei grün:
else if(welche == ROT_GELB)
{
digitalWrite(LED_R, HIGH);
digitalWrite(LED_Y, HIGH);
digitalWrite(LED_G, LOW);
}
// bei grün:
else if(welche == GRUEN)
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_G, HIGH);
}
// bei beld:
else if(welche == GELB)
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_Y, HIGH);
digitalWrite(LED_G, LOW);
}
else
{
Serial.println("AAAH!");
}
}
void setup() {
Serial.begin(115200);
pinMode(LED_R, OUTPUT);
pinMode(LED_Y, OUTPUT);
pinMode(LED_G, OUTPUT);
}
void loop()
{
schalteFarbe(ROT);
delay(1000);
schalteFarbe(ROT_GELB);
delay(1000);
schalteFarbe(GRUEN);
delay(1000);
schalteFarbe(GELB);
delay(1000);
/*
// unleserlicher Pfusch:
digitalWrite(LED_R, HIGH);
delay(1000);
digitalWrite(LED_Y, HIGH);
delay(1000);
digitalWrite(LED_R, LOW);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_G, HIGH);
delay(1000);
digitalWrite(LED_Y, HIGH);
digitalWrite(LED_G, LOW);
delay(1000);
digitalWrite(LED_Y, LOW);
*/
}