-
Notifications
You must be signed in to change notification settings - Fork 0
/
Stoplicht.ino
127 lines (118 loc) · 3.38 KB
/
Stoplicht.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
const int ROOD = 0;
const int GEEL = 1;
const int GROEN = 2;
const int KNIPPER = 3;
const int LICHTEN[] = {ROOD, GEEL, GROEN};
const int AANTALSTOPLICHT = 2;
int stoplight_STATE[AANTALSTOPLICHT];
const int TIENSEC = 10000;
const int EENSEC = 1000;
const int STOPLICHTEN[2][3] = {{0, 1, 2}, {3, 4, 5}};
unsigned long currentStoplichtTimer;
unsigned long previousMillisStoplichtTimer[AANTALSTOPLICHT];
boolean aanDeBeurd[2];
boolean stoplichtknipper[2];
void setupStopLicht() {
for (int i = 0; i < AANTALSTOPLICHT; i++) {
stoplight_STATE[i] = ROOD;
ROODLedAan(i);
}
}
void loopStoplicht(int i) {
stoplichtStateMachine();
currentStoplichtTimer = i;
}
void startStopLicht(int i) {
aanDeBeurd[i] = true;
}
boolean getStoplichtStatus(int i) {
if (stoplight_STATE[i] == ROOD) {
return false;
} else {
return true;
}
}
void stoplichtStateMachine() {
for (int i = 0; i < AANTALSTOPLICHT; i++) {
switch (stoplight_STATE[i]) {
case ROOD:
// Serial.print("rood");
// Serial.print(": "); Serial.print(i);Serial.println();
// ROODLedAan(i);
//is aan de beurt
if (getDagStand()) {
ROODLedUit(i);
stoplight_STATE[i] = KNIPPER;
previousMillisStoplichtTimer[i] = currentStoplichtTimer;
break;
}
if (aanDeBeurd[i]) {
ROODLedUit(i);
stoplight_STATE[i] = GROEN;
previousMillisStoplichtTimer[i] = currentStoplichtTimer;
GROENLedAan(i);
break;
}
break;
case GEEL:
// GEELLedAan(i);
//timmer 1 sec
if (currentStoplichtTimer - previousMillisStoplichtTimer[i] >= EENSEC) {
previousMillisStoplichtTimer[i] = currentStoplichtTimer;
//ga naar rood
GEELLedUit(i);
stoplight_STATE[i] = ROOD;
ROODLedAan(i);
}
break;
case GROEN:
// GROENLedAan(i);
//timmer 10 sec
if (currentStoplichtTimer - previousMillisStoplichtTimer[i] >= 2000) {
previousMillisStoplichtTimer[i] = currentStoplichtTimer;
//ga naar geel
GROENLedUit(i);
stoplight_STATE[i] = GEEL;
GEELLedAan(i);
}
break;
case KNIPPER:
if (!getDagStand()) {
GEELLedUit(i);
stoplight_STATE[i] = ROOD;
ROODLedAan(i);
}
if (currentStoplichtTimer - previousMillisStoplichtTimer[i] >= 2000) {
previousMillisStoplichtTimer[i] = currentStoplichtTimer;
stoplichtknipper[i] = !stoplichtknipper[i];
if (stoplichtknipper[i]) {
GEELLedAan(i);
} else {
GEELLedUit(i);
}
}
}
}
}
//ROOD
void ROODLedAan(int stoplicht) {
ledControlTurnOn(STOPLICHTEN[stoplicht][ROOD]);
aanDeBeurd[stoplicht] = false;
}
void ROODLedUit(int stoplicht) {
ledControlTurnOff(STOPLICHTEN[stoplicht][ROOD]);
}
//GEEL
void GEELLedAan(int stoplicht) {
ledControlTurnOn(STOPLICHTEN[stoplicht][GEEL]);
}
void GEELLedUit(int stoplicht) {
ledControlTurnOff(STOPLICHTEN[stoplicht][GEEL]);
}
//GROEN
void GROENLedAan(int stoplicht) {
ledControlTurnOn(STOPLICHTEN[stoplicht][GROEN]);
}
void GROENLedUit(int stoplicht) {
ledControlTurnOff(STOPLICHTEN[stoplicht][GROEN]);
}