int LEDrot = 4;
int LEDblau = 6;
int LEDgruen = 8;
int LEDgelb = 10;
int taster = 2;
unsigned long millislaufend = 0;
unsigned long millislaufendrot = 0;
unsigned long millislaufendblau = 0;
unsigned long millisstart = 0;
unsigned long millisstart2 = 0;
unsigned long millisstart3 = 0;
unsigned long millisstart4 = 0;
unsigned long millisstart2rot = 0;
unsigned long millisstart3rot = 0;
unsigned long millisstart4rot = 0;
unsigned long millisstart2blau = 0;
unsigned long millisstart3blau = 0;
unsigned long millisstart4blau = 0;
unsigned long millisstartrot = 0;
unsigned long millisstartblau = 0;
const unsigned long blinkenschnell = 100;
const unsigned long blinkenmittel = 250;
const unsigned long blinkenlangsam = 500;
const unsigned long ledan = 5000;
const unsigned long schluss = 60000;
int ledstatus = LOW;
const unsigned long tastermillis = 100;
int Stufe;
int Rot;
int Blau;
int Tasterabfrage;
void setup() {
pinMode(LEDrot, OUTPUT);
pinMode(LEDblau, OUTPUT);
pinMode(LEDgruen, OUTPUT);
pinMode(LEDgelb, OUTPUT);
pinMode(taster, INPUT_PULLUP);
}
void loop() {
millislaufend = millis();
switch(Tasterabfrage) {
case 0:
if(millislaufend - millisstart >= tastermillis) {
millisstart = millislaufend;
if(digitalRead(taster) == LOW) {
Tasterabfrage = 1;
}
else {
digitalWrite(LEDrot, LOW);
digitalWrite(LEDblau, LOW);
digitalWrite(LEDgruen, LOW);
digitalWrite(LEDgelb, LOW);
}
}
break;
case 1:
roteLED(),
blaueLED(),
grueneLED(),
gelbeLED();
if(millislaufend - millisstart >= schluss){
millisstart = millislaufend;
Tasterabfrage = 0;
}
break;
}
}
void roteLED() {
millislaufendrot = millis();
switch(Rot){
case 0:
digitalWrite(LEDrot, HIGH);
if(millislaufendrot - millisstartrot >= ledan) {
millisstartrot = millislaufendrot;
digitalWrite(LEDrot, LOW);
Rot =1;
}
break;
case 1:
if(millislaufendrot - millisstart2rot >= blinkenlangsam) {
millisstart2rot = millislaufendrot;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDrot, ledstatus);
}
if(millislaufendrot - millisstartrot >= ledan) {
millisstartrot = millislaufendrot;
digitalWrite(LEDrot, LOW);
Rot =2;
}
break;
case 2:
if(millislaufendrot - millisstart3rot >= blinkenmittel) {
millisstart3rot = millislaufendrot;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDrot, ledstatus);
}
if(millislaufendrot - millisstartrot >= ledan) {
millisstartrot = millislaufendrot;
digitalWrite(LEDrot, LOW);
Rot =3;
}
break;
case 3:
if(millislaufendrot - millisstart4rot >= blinkenschnell) {
millisstart4rot = millislaufendrot;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDrot, ledstatus);
}
if(millislaufendrot - millisstartrot >= ledan) {
millisstartrot = millislaufendrot;
digitalWrite(LEDrot, LOW);
Rot =0;
}
break;
}
}
void blaueLED() {
millislaufendblau = millis();
switch(Blau){
case 0:
if(millislaufendblau - millisstart2blau >= blinkenlangsam) {
millisstart2blau = millislaufendblau;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDblau, ledstatus);
}
if(millislaufendblau - millisstartblau >= ledan) {
millisstartblau = millislaufendblau;
digitalWrite(LEDblau, LOW);
Blau =1;
}
break;
case 1:
if(millislaufendblau - millisstart3blau >= blinkenmittel) {
millisstart3blau = millislaufendblau;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDblau, ledstatus);
}
if(millislaufendblau - millisstartblau >= ledan) {
millisstartblau = millislaufendblau;
digitalWrite(LEDblau, LOW);
Blau =2;
}
break;
case 2:
if(millislaufendblau - millisstart4blau >= blinkenschnell) {
millisstart4blau = millislaufendblau;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDblau, ledstatus);
}
if(millislaufendblau - millisstartblau >= ledan) {
millisstartblau = millislaufendblau;
digitalWrite(LEDblau, LOW);
Blau =3;
}
break;
case 3:
digitalWrite(LEDblau, HIGH);
if(millislaufendblau - millisstartblau >= ledan) {
millisstartblau = millislaufendblau;
digitalWrite(LEDblau, LOW);
Blau =0;
}
break;
}
}
void grueneLED() {
switch(Stufe){
case 0:
if(millislaufend - millisstart3 >= blinkenmittel) {
millisstart3 = millislaufend;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDgruen, ledstatus);
}
if(millislaufend - millisstart >= ledan) {
millisstart = millislaufend;
digitalWrite(LEDgruen, LOW);
Stufe =1;
}
break;
case 1:
if(millislaufend - millisstart4 >= blinkenschnell) {
millisstart4 = millislaufend;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDgruen, ledstatus);
}
if(millislaufend - millisstart >= ledan) {
millisstart = millislaufend;
digitalWrite(LEDgruen, LOW);
Stufe =2;
}
break;
case 2:
digitalWrite(LEDgruen, HIGH);
if(millislaufend - millisstart >= ledan) {
millisstart = millislaufend;
digitalWrite(LEDgruen, LOW);
Stufe =3;
}
break;
case 3:
if(millislaufend - millisstart2 >= blinkenlangsam) {
millisstart2 = millislaufend;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDgruen, ledstatus);
}
if(millislaufend - millisstart >= ledan) {
millisstart = millislaufend;
digitalWrite(LEDgruen, LOW);
Stufe =0;
}
break;
}
}
void gelbeLED() {
switch(Stufe){
case 0:
if(millislaufend - millisstart4 >= blinkenschnell) {
millisstart4 = millislaufend;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDgelb, ledstatus);
}
if(millislaufend - millisstart >= ledan) {
millisstart = millislaufend;
digitalWrite(LEDgelb, LOW);
Stufe =1;
}
break;
case 1:
digitalWrite(LEDgelb, HIGH);
if(millislaufend - millisstart >= ledan) {
millisstart = millislaufend;
digitalWrite(LEDgelb, LOW);
Stufe =2;
}
break;
case 2:
if(millislaufend - millisstart2 >= blinkenlangsam) {
millisstart2 = millislaufend;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDgelb, ledstatus);
}
if(millislaufend - millisstart >= ledan) {
millisstart = millislaufend;
digitalWrite(LEDgelb, LOW);
Stufe =3;
}
break;
case 3:
if(millislaufend - millisstart3 >= blinkenmittel) {
millisstart3 = millislaufend;
if (ledstatus == LOW) {
ledstatus = HIGH;
}
else {
ledstatus = LOW;
}
digitalWrite(LEDgelb, ledstatus);
}
if(millislaufend - millisstart >= ledan) {
millisstart = millislaufend;
digitalWrite(LEDgelb, LOW);
Stufe =0;
}
break;
}
}