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.