Voor een project op school moet ik een programmeerbaar lichtje maken, dit doe ik voor een groot deel met een arduino.
Het gedeelte van de arduino moet binair tellen van 0 tot 15 (dit over 4 lijnen):

dit gedeelte heb ik al voor elkaar gekregen met volgende code;
Maar het doel is eigenlijk om twee programma’s af te lopen, in het eerste geval bovenstaand programmaatje en wanneer een schakelaar wordt omgeschakeld moet het eerste programma stoppen en moet het tweede programma in werking treden.

Het tweede programma doet het zelfde als het eerste programma maar om naar de volgende stap te gaan wordt geen delay gebruikt maar een drukknop.
Hier komt het probleem ook aankloppen, ik weet niet juist hoe ik het voor elkaar krijg om met een drukknop van stap 0000 naar 0001 kan gaan.
Ik ben er me ook van op de hoogte dat m'n programma nogal groot is voor wat het maar doet, maar dit is voor mij het simpelst en meest verstaanbaar.
Moest iemand een alternatieve manier aanbieden dan zie ik dat graag.
Het gedeelte van de arduino moet binair tellen van 0 tot 15 (dit over 4 lijnen):

dit gedeelte heb ik al voor elkaar gekregen met volgende code;
code:
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
| void setup()
{
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
void loop()
{
// stap 1 0000
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
delay(1000);
// stap 1 0001
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
delay(1000);
// stap 2 0010
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
delay(1000);
// stap 3 0011
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
delay(1000);
// stap 4 0100
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
delay(1000);
// stap 5 0101
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
delay(1000);
// stap 6 0110
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
delay(1000);
// stap 7 0111
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
delay(1000);
// stap 8 1000
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(1000);
// stap 9 1001
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(1000);
// stap 10 1010
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(1000);
// stap 11 1011
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(1000);
// stap 12 1100
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
delay(1000);
// stap 13 1101
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
delay(1000);
// stap 14 1110
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
delay(1000);
// stap 15 1111
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
delay(1000);
} |
Maar het doel is eigenlijk om twee programma’s af te lopen, in het eerste geval bovenstaand programmaatje en wanneer een schakelaar wordt omgeschakeld moet het eerste programma stoppen en moet het tweede programma in werking treden.

code:
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
| int knop = 2; //knop naar volgende stap
int schakelaar = 3; // loop of stap per stap
int uitgang1 = 12; // adres uitgang 1
int uitgang2 = 11; // adres uitgang 2
int uitgang3 = 10; // adres uitgang 3
int uitgang4 = 9; // adres uitgang 4
int toestand = 0; // toestand van de schakelaar
int toestand2 = 0; //toestand van de knop
/*
Bovenstaand geven we onze inputs/outputs een benaming,
Onderstaand zeggen we of het een input is of output.
*/
void setup() {
pinMode(knop, INPUT);
pinMode(schakelaar, INPUT);
pinMode(uitgang1, OUTPUT);
pinMode(uitgang2, OUTPUT);
pinMode(uitgang3, OUTPUT);
pinMode(uitgang4, OUTPUT);
}
void loop(){
toestand = digitalRead(schakelaar); //de toestand van de schakelaar wordt bekeken.
if (schakelaar == HIGH) //is de toestand van de schakelaar 1 dan volgt een loop.
{
// stap 0 0000
digitalWrite(uitgang1, LOW);
digitalWrite(uitgang2, LOW);
digitalWrite(uitgang3, LOW);
digitalWrite(uitgang4, LOW);
delay(1000);
// stap 1 0001
digitalWrite(uitgang1, HIGH);
digitalWrite(uitgang2, LOW);
digitalWrite(uitgang3, LOW);
digitalWrite(uitgang4, LOW);
delay(1000);
// stap 2 0010
digitalWrite(uitgang1, LOW);
digitalWrite(uitgang2, HIGH);
digitalWrite(uitgang3, LOW);
digitalWrite(uitgang4, LOW);
delay(1000);
// stap 3 0011
digitalWrite(uitgang1, HIGH);
digitalWrite(uitgang2, HIGH);
digitalWrite(uitgang3, LOW);
digitalWrite(uitgang4, LOW);
delay(1000);
// stap 4 0100
digitalWrite(uitgang1, LOW);
digitalWrite(uitgang2, LOW);
digitalWrite(uitgang3, HIGH);
digitalWrite(uitgang4, LOW);
delay(1000);
// stap 5 0101
digitalWrite(uitgang1, HIGH);
digitalWrite(uitgang2, LOW);
digitalWrite(uitgang3, HIGH);
digitalWrite(uitgang4, LOW);
delay(1000);
// stap 6 0110
digitalWrite(uitgang1, LOW);
digitalWrite(uitgang2, HIGH);
digitalWrite(uitgang3, HIGH);
digitalWrite(uitgang4, LOW);
delay(1000);
// stap 7 0111
digitalWrite(uitgang1, HIGH);
digitalWrite(uitgang2, HIGH);
digitalWrite(uitgang3, HIGH);
digitalWrite(uitgang4, LOW);
delay(1000);
// stap 8 1000
digitalWrite(uitgang1, LOW);
digitalWrite(uitgang2, LOW);
digitalWrite(uitgang3, LOW);
digitalWrite(uitgang4, HIGH);
delay(1000);
// stap 9 1001
digitalWrite(uitgang1, HIGH);
digitalWrite(uitgang2, LOW);
digitalWrite(uitgang3, LOW);
digitalWrite(uitgang4, HIGH);
delay(1000);
// stap 10 1010
digitalWrite(uitgang1, LOW);
digitalWrite(uitgang2, HIGH);
digitalWrite(uitgang3, LOW);
digitalWrite(uitgang4, HIGH);
delay(1000);
// stap 11 1011
digitalWrite(uitgang1, HIGH);
digitalWrite(uitgang2, HIGH);
digitalWrite(uitgang3, LOW);
digitalWrite(uitgang4, HIGH);
delay(1000);
// stap 12 1100
digitalWrite(uitgang1, LOW);
digitalWrite(uitgang2, LOW);
digitalWrite(uitgang3, HIGH);
digitalWrite(uitgang4, HIGH);
delay(1000);
// stap 13 1101
digitalWrite(uitgang1, HIGH);
digitalWrite(uitgang2, LOW);
digitalWrite(uitgang3, HIGH);
digitalWrite(uitgang4, HIGH);
delay(1000);
// stap 14 1110
digitalWrite(uitgang1, LOW);
digitalWrite(uitgang2, HIGH);
digitalWrite(uitgang3, HIGH);
digitalWrite(uitgang4, HIGH);
delay(1000);
// stap 15 1111
digitalWrite(uitgang1, HIGH);
digitalWrite(uitgang2, HIGH);
digitalWrite(uitgang3, HIGH);
digitalWrite(uitgang4, HIGH);
delay(1000);
}
else
{
//programma 2 komt hier
}
} |
Het tweede programma doet het zelfde als het eerste programma maar om naar de volgende stap te gaan wordt geen delay gebruikt maar een drukknop.
Hier komt het probleem ook aankloppen, ik weet niet juist hoe ik het voor elkaar krijg om met een drukknop van stap 0000 naar 0001 kan gaan.
Ik ben er me ook van op de hoogte dat m'n programma nogal groot is voor wat het maar doet, maar dit is voor mij het simpelst en meest verstaanbaar.
Moest iemand een alternatieve manier aanbieden dan zie ik dat graag.



