/* * StopLight.c * * Created: 11/11/2021 16:26:22 * Author: n0x */ #include "Led.h"; #include "Taster.h"; #include ; /* enums */ enum{ S1_GREEN, S1_YELLOW, S1_RED, S1_RED_YELLOW, S2_GREEN, S2_YELLOW, S2_RED, S2_RED_YELLOW, INIT, } StoplightState = INIT; /* Emus for the stoplight task (task 3) */ /* Programmieren eine Ampelsteuerung auf einer Straßenkreuzung */ /* handle the delays locally for easy changing */ //int delayShort = 5000; //int delayLong = 30000; /* Stoplight and the corresponding Leds | GREEN | YELLOW | RED ---------------------------------- SL 1 | Led1 | Led4 | Led6 SL 2 | Led2 | Led5 | Led7 General rundown: - State is entered - Wait till delay is passed - Switch off running LEDs - Switch on new LEDs - Set next state */ uint16_t g_startMS; int delayShort = 5000; int delayLong = 30000; void stopLightInit(){ g_startMS=Timer_getTick(); } /* Task 3 (2021-11-11) */ void runStopLightTask1() { switch(StoplightState){ case INIT: Led1_On(); // Set stoplight 1 to green Led2_Off(); Led3_Off(); Led4_Off(); Led5_Off(); Led6_Off(); Led7_On(); // Set stoplight 2 to red Led8_Off(); if(Timer_getTick() - g_startMS >= delayLong) { g_startMS=Timer_getTick(); StoplightState = S1_YELLOW; } break; case S1_YELLOW: Led1_Off(); Led4_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S1_RED; } break; case S1_RED: Led4_Off(); Led6_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S2_RED_YELLOW; } break; case S2_RED_YELLOW: Led5_On(); Led7_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S2_GREEN; } break; case S2_GREEN: Led5_Off(); Led7_Off(); Led2_On(); if(Timer_getTick() - g_startMS >= delayLong) { g_startMS=Timer_getTick(); StoplightState = S2_YELLOW; } break; case S2_YELLOW: Led2_Off(); Led5_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S2_RED; } break; case S2_RED: Led5_Off(); Led7_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S1_RED_YELLOW; } break; case S1_RED_YELLOW: Led4_On(); Led6_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S1_GREEN; } break; case S1_GREEN: Led4_Off(); Led6_Off(); Led1_On(); if(Timer_getTick() - g_startMS >= delayLong) { g_startMS=Timer_getTick(); StoplightState = S1_YELLOW; } break; } } void runStopLightTask2(void) { switch(StoplightState){ case INIT: Led1_On(); // Set stoplight 1 to green Led2_Off(); Led3_Off(); Led4_Off(); Led5_Off(); Led6_Off(); Led7_On(); // Set stoplight 2 to red Led8_Off(); if(Taster1_get()) { StoplightState = S1_YELLOW; } break; case S1_YELLOW: Led1_Off(); Led4_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S1_RED; } break; case S1_RED: Led4_Off(); Led6_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S2_GREEN; } break; case S2_GREEN: Led5_Off(); Led7_Off(); Led2_On(); if(Timer_getTick() - g_startMS >= delayLong) { g_startMS=Timer_getTick(); StoplightState = S2_YELLOW; } break; case S2_YELLOW: Led2_Off(); Led5_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S2_RED; } break; case S2_RED: Led5_Off(); Led7_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S1_RED_YELLOW; } break; case S1_RED_YELLOW: Led4_On(); Led6_On(); if(Timer_getTick() - g_startMS >= delayShort) { g_startMS=Timer_getTick(); StoplightState = S1_GREEN; } break; case S1_GREEN: Led4_Off(); Led6_Off(); Led1_On(); if( (Timer_getTick() - g_startMS >= delayLong) && Taster1_get()) { g_startMS=Timer_getTick(); StoplightState = S1_YELLOW; } break; } } //*/