Fixed issues with StopLight.c and cleand up the code
This commit is contained in:
parent
bd8f4ea63a
commit
1720365a53
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "Led.h";
|
#include "Led.h";
|
||||||
#include "Taster.h";
|
#include "Taster.h";
|
||||||
|
#include "Timer.h"
|
||||||
#include <util/delay.h>;
|
#include <util/delay.h>;
|
||||||
|
|
||||||
/* enums */
|
/* enums */
|
||||||
@ -19,12 +20,8 @@ enum{
|
|||||||
|
|
||||||
/* Programmieren eine Ampelsteuerung auf einer Straßenkreuzung */
|
/* Programmieren eine Ampelsteuerung auf einer Straßenkreuzung */
|
||||||
|
|
||||||
/* handle the delays locally for easy changing */
|
/* Stoplight and the corresponding LEDs
|
||||||
//int delayShort = 5000;
|
| GREEN | YELLOW | RED
|
||||||
//int delayLong = 30000;
|
|
||||||
|
|
||||||
/* Stoplight and the corresponding Leds
|
|
||||||
| GREEN | YELLOW | RED
|
|
||||||
----------------------------------
|
----------------------------------
|
||||||
SL 1 | Led1 | Led4 | Led6
|
SL 1 | Led1 | Led4 | Led6
|
||||||
SL 2 | Led2 | Led5 | Led7
|
SL 2 | Led2 | Led5 | Led7
|
||||||
@ -41,24 +38,14 @@ uint16_t g_startMS;
|
|||||||
int delayShort = 5000;
|
int delayShort = 5000;
|
||||||
int delayLong = 30000;
|
int delayLong = 30000;
|
||||||
|
|
||||||
void stopLightInit(){
|
|
||||||
g_startMS=Timer_getTick();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Task 3 (2021-11-11) */
|
/* Task 3 (2021-11-11) */
|
||||||
void
|
void
|
||||||
runStopLightTask1()
|
runStopLightTask1()
|
||||||
{
|
{
|
||||||
switch(StoplightState){
|
switch(StoplightState){
|
||||||
case INIT:
|
case INIT:
|
||||||
Led1_On(); // Set stoplight 1 to green
|
setS1ToGreen();
|
||||||
Led2_Off();
|
setS2ToRed();
|
||||||
Led3_Off();
|
|
||||||
Led4_Off();
|
|
||||||
Led5_Off();
|
|
||||||
Led6_Off();
|
|
||||||
Led7_On(); // Set stoplight 2 to red
|
|
||||||
Led8_Off();
|
|
||||||
|
|
||||||
if(Timer_getTick() - g_startMS >= delayLong) {
|
if(Timer_getTick() - g_startMS >= delayLong) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
@ -67,8 +54,7 @@ runStopLightTask1()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case S1_YELLOW:
|
case S1_YELLOW:
|
||||||
Led1_Off();
|
setS1ToYellow();
|
||||||
Led4_On();
|
|
||||||
|
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
@ -77,8 +63,7 @@ runStopLightTask1()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case S1_RED:
|
case S1_RED:
|
||||||
Led4_Off();
|
setS1ToRed();
|
||||||
Led6_On();
|
|
||||||
|
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
@ -87,8 +72,7 @@ runStopLightTask1()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case S2_RED_YELLOW:
|
case S2_RED_YELLOW:
|
||||||
Led5_On();
|
setS2ToRedYellow();
|
||||||
Led7_On();
|
|
||||||
|
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
@ -97,9 +81,7 @@ runStopLightTask1()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case S2_GREEN:
|
case S2_GREEN:
|
||||||
Led5_Off();
|
setS2ToGreen();
|
||||||
Led7_Off();
|
|
||||||
Led2_On();
|
|
||||||
|
|
||||||
if(Timer_getTick() - g_startMS >= delayLong) {
|
if(Timer_getTick() - g_startMS >= delayLong) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
@ -108,8 +90,8 @@ runStopLightTask1()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case S2_YELLOW:
|
case S2_YELLOW:
|
||||||
Led2_Off();
|
setS2ToYellow();
|
||||||
Led5_On();
|
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
StoplightState = S2_RED;
|
StoplightState = S2_RED;
|
||||||
@ -117,8 +99,8 @@ runStopLightTask1()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case S2_RED:
|
case S2_RED:
|
||||||
Led5_Off();
|
setS2ToRed();
|
||||||
Led7_On();
|
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
StoplightState = S1_RED_YELLOW;
|
StoplightState = S1_RED_YELLOW;
|
||||||
@ -126,8 +108,7 @@ runStopLightTask1()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case S1_RED_YELLOW:
|
case S1_RED_YELLOW:
|
||||||
Led4_On();
|
setS2ToRedYellow();
|
||||||
Led6_On();
|
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
StoplightState = S1_GREEN;
|
StoplightState = S1_GREEN;
|
||||||
@ -135,9 +116,7 @@ runStopLightTask1()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case S1_GREEN:
|
case S1_GREEN:
|
||||||
Led4_Off();
|
setS1ToGreen();
|
||||||
Led6_Off();
|
|
||||||
Led1_On();
|
|
||||||
if(Timer_getTick() - g_startMS >= delayLong) {
|
if(Timer_getTick() - g_startMS >= delayLong) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
StoplightState = S1_YELLOW;
|
StoplightState = S1_YELLOW;
|
||||||
@ -151,88 +130,125 @@ runStopLightTask2(void)
|
|||||||
{
|
{
|
||||||
switch(StoplightState){
|
switch(StoplightState){
|
||||||
case INIT:
|
case INIT:
|
||||||
Led1_On(); // Set stoplight 1 to green
|
setS1ToGreen();
|
||||||
Led2_Off();
|
setS2ToRed();
|
||||||
Led3_Off();
|
|
||||||
Led4_Off();
|
if(Taster1_get()) {
|
||||||
Led5_Off();
|
g_startMS=Timer_getTick();
|
||||||
Led6_Off();
|
StoplightState = S1_YELLOW;
|
||||||
Led7_On(); // Set stoplight 2 to red
|
}
|
||||||
Led8_Off();
|
break;
|
||||||
|
|
||||||
if(Taster1_get()) {
|
|
||||||
StoplightState = S1_YELLOW;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case S1_YELLOW:
|
case S1_YELLOW:
|
||||||
Led1_Off();
|
setS1ToYellow();
|
||||||
Led4_On();
|
|
||||||
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
g_startMS=Timer_getTick();
|
||||||
g_startMS=Timer_getTick();
|
StoplightState = S1_RED;
|
||||||
StoplightState = S1_RED;
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case S1_RED:
|
case S1_RED:
|
||||||
Led4_Off();
|
setS1ToRed();
|
||||||
Led6_On();
|
|
||||||
|
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
StoplightState = S2_GREEN;
|
StoplightState = S2_GREEN;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case S2_GREEN:
|
case S2_GREEN:
|
||||||
Led5_Off();
|
setS2ToGreen();
|
||||||
Led7_Off();
|
|
||||||
Led2_On();
|
|
||||||
|
|
||||||
if(Timer_getTick() - g_startMS >= delayLong) {
|
if(Timer_getTick() - g_startMS >= delayLong) {
|
||||||
g_startMS=Timer_getTick();
|
g_startMS=Timer_getTick();
|
||||||
StoplightState = S2_YELLOW;
|
StoplightState = S2_RED;
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case S2_RED:
|
||||||
Led5_Off();
|
setS2ToRed();
|
||||||
Led7_On();
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
g_startMS=Timer_getTick();
|
||||||
g_startMS=Timer_getTick();
|
StoplightState = S1_RED_YELLOW;
|
||||||
StoplightState = S1_RED_YELLOW;
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case S1_RED_YELLOW:
|
case S1_RED_YELLOW:
|
||||||
Led4_On();
|
setS1ToRedYellow();
|
||||||
Led6_On();
|
if(Timer_getTick() - g_startMS >= delayShort) {
|
||||||
if(Timer_getTick() - g_startMS >= delayShort) {
|
g_startMS=Timer_getTick();
|
||||||
g_startMS=Timer_getTick();
|
StoplightState = S1_GREEN;
|
||||||
StoplightState = S1_GREEN;
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case S1_GREEN:
|
case S1_GREEN:
|
||||||
Led4_Off();
|
setS1ToGreen();
|
||||||
Led6_Off();
|
|
||||||
Led1_On();
|
|
||||||
|
|
||||||
if( (Timer_getTick() - g_startMS >= delayLong) && Taster1_get()) {
|
// Wait 30 seconds before allowing the button to be pressed again
|
||||||
g_startMS=Timer_getTick();
|
if( (Timer_getTick() - g_startMS >= delayLong) && Taster1_get()) {
|
||||||
StoplightState = S1_YELLOW;
|
g_startMS=Timer_getTick();
|
||||||
}
|
StoplightState = S1_YELLOW;
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* LED Helper methods to keep the code a little cleaner */
|
||||||
|
|
||||||
|
void setS1ToGreen(void)
|
||||||
|
{
|
||||||
|
Led1_On();
|
||||||
|
Led4_Off();
|
||||||
|
Led6_Off();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setS1ToYellow(void)
|
||||||
|
{
|
||||||
|
Led1_Off();
|
||||||
|
Led4_On();
|
||||||
|
Led6_Off();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setS1ToRedYellow(void)
|
||||||
|
{
|
||||||
|
Led1_Off();
|
||||||
|
Led4_On();
|
||||||
|
Led6_On();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setS1ToRed(void)
|
||||||
|
{
|
||||||
|
Led1_Off();
|
||||||
|
Led4_Off();
|
||||||
|
Led6_On();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setS2ToGreen(void)
|
||||||
|
{
|
||||||
|
Led2_On();
|
||||||
|
Led5_Off();
|
||||||
|
Led7_Off();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setS2ToYellow(void)
|
||||||
|
{
|
||||||
|
Led2_Off();
|
||||||
|
Led5_On();
|
||||||
|
Led7_Off();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setS2ToRedYellow(void)
|
||||||
|
{
|
||||||
|
Led2_Off();
|
||||||
|
Led5_On();
|
||||||
|
Led7_On();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setS2ToRed(void)
|
||||||
|
{
|
||||||
|
Led2_Off();
|
||||||
|
Led5_Off();
|
||||||
|
Led7_On();
|
||||||
|
}
|
||||||
//*/
|
//*/
|
@ -11,4 +11,13 @@
|
|||||||
void runStopLightTask1(void);
|
void runStopLightTask1(void);
|
||||||
void runStopLightTask2(void);
|
void runStopLightTask2(void);
|
||||||
|
|
||||||
|
void setS1ToGreen(void);
|
||||||
|
void setS1ToYellow(void);
|
||||||
|
void setS1ToRedYellow(void);
|
||||||
|
void setS1ToRed(void);
|
||||||
|
void setS2ToGreen(void);
|
||||||
|
void setS2ToYellow(void);
|
||||||
|
void setS2ToRedYellow(void);
|
||||||
|
void setS2ToRed(void);
|
||||||
|
|
||||||
#endif /* STOPLIGHT_H_ */
|
#endif /* STOPLIGHT_H_ */
|
@ -15,7 +15,7 @@ Taster_init (void){
|
|||||||
* twice within four cycles to change its value. [...]
|
* twice within four cycles to change its value. [...]
|
||||||
*/
|
*/
|
||||||
MCUCR |= (1<<JTD);
|
MCUCR |= (1<<JTD);
|
||||||
MCUCR |= (1<<JTD);
|
MCUCR |= (1<<JTD);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t
|
uint8_t
|
||||||
|
Loading…
Reference in New Issue
Block a user