Moved the Stoplight-Task to StopLigh.c
parent
082bc7e986
commit
bd8f4ea63a
@ -0,0 +1,238 @@
|
||||
/*
|
||||
* StopLight.c
|
||||
*
|
||||
* Created: 11/11/2021 16:26:22
|
||||
* Author: n0x
|
||||
*/
|
||||
|
||||
#include "Led.h";
|
||||
#include "Taster.h";
|
||||
#include <util/delay.h>;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
//*/
|
@ -0,0 +1,14 @@
|
||||
/*
|
||||
* StopLight.h
|
||||
*
|
||||
* Created: 11/11/2021 16:24:16
|
||||
* Author: n0x
|
||||
*/
|
||||
|
||||
#ifndef STOPLIGHT_H_
|
||||
#define STOPLIGHT_H_
|
||||
|
||||
void runStopLightTask1(void);
|
||||
void runStopLightTask2(void);
|
||||
|
||||
#endif /* STOPLIGHT_H_ */
|
Loading…
Reference in New Issue