Ok, basic stuff en slecht programmeerwerk, maar dat is verder niet mijn vakgebied. Dat het niet mijn vakgebied is ... toont zich wel in het feit dat ik met mijn kennis niet zie waarom dit fout gaat.
Het probleem; als ik het activateknopje (waarde niet indrukken is 0, wel indrukken is 1023) indruk (maar de pic is zo snel dat hij het ziet als "ingedrukt houdt") ... dan zet hij alsnog alle objectId's op hoog bij de eerste loop (waar numberValue kleiner is dan 341). Ik kom erachter dat hij het niet doet als ik de knop 'delay'. Hij doet het uiteraard nog steeds (met die delay) als ik mijn vinger lang genoeg op de knop houd (oftewel 150ms). Echter dat snap ik niet ... aangezien decontrole variabele clicked nergens binnen die loop 0 wordt gemaakt, maar erbuiten als de activate waarde laag is (knop niet ingedrukt).
Hoe kan het nu dat hij toch met 1 click al die krengen aanzet
? Ik wil gewoon dat hij in die eerste <341 loop maar 1 ding aanzet, of ik die knop nu lang ingedrukt houdt of niet.
Het probleem; als ik het activateknopje (waarde niet indrukken is 0, wel indrukken is 1023) indruk (maar de pic is zo snel dat hij het ziet als "ingedrukt houdt") ... dan zet hij alsnog alle objectId's op hoog bij de eerste loop (waar numberValue kleiner is dan 341). Ik kom erachter dat hij het niet doet als ik de knop 'delay'. Hij doet het uiteraard nog steeds (met die delay) als ik mijn vinger lang genoeg op de knop houd (oftewel 150ms). Echter dat snap ik niet ... aangezien decontrole variabele clicked nergens binnen die loop 0 wordt gemaakt, maar erbuiten als de activate waarde laag is (knop niet ingedrukt).
Hoe kan het nu dat hij toch met 1 click al die krengen aanzet
C:
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
| if (activateValue > 512 && clicked == 0){ clicked = 1; digitalWrite(color, LOW); digitalWrite(color1, LOW); digitalWrite(color2, LOW); digitalWrite(number, LOW); digitalWrite(number1, LOW); digitalWrite(number2, LOW); digitalWrite(timerLevel, LOW); digitalWrite(timerLevel1, LOW); if (numberValue < 341){ //als hij ingesteld is op 1 unit, zet er maar 1 aan (maar wel eentje die beschikbaar is) delay (50); //deze erin zorgt ervoor dat het praktisch werkt, maar het is niet echt een oplossing for (int z = 0; z < 3; z++){ if (z < 1){ if (arrayPresent[0] == 1){ digitalWrite(objectId, HIGH); arrayPresent[0] = 0; } else if (arrayPresent[1] == 1){ digitalWrite(objectId1, HIGH); arrayPresent[1] = 0; } else if (arrayPresent[2] == 1){ digitalWrite(objectId2, HIGH); arrayPresent[2] = 0; } } } } if (numberValue > 340 && numberValue < 682({ //als hij ingesteld is op 2 units, zet er 2 aan (maar wel die beschikbaar zijn) delay (50); //deze erin zorgt ervoor dat het praktisch werkt, maar het is niet echt een oplossing for (int z = 0; z < 3; z++){ if (z < 2){ if (arrayPresent[0] == 1){ digitalWrite(objectId, HIGH); arrayPresent[0] = 0; } else if (arrayPresent[1] == 1){ digitalWrite(objectId1, HIGH); arrayPresent[1] = 0; } else if (arrayPresent[2] == 1){ digitalWrite(objectId2, HIGH); arrayPresent[2] = 0; } } } } if (numberValue > 681){ //als hij ingesteld is op 3 units, zet er 3 aan (maar wel die beschikbaar zijn) delay (50); //deze erin zorgt ervoor dat het praktisch werkt, maar het is niet echt een oplossing for (int z = 0; z < 3; z++){ if (z < 3){ if (arrayPresent[0] == 1){ digitalWrite(objectId, HIGH); arrayPresent[0] = 0; } else if (arrayPresent[1] == 1){ digitalWrite(objectId1, HIGH); arrayPresent[1] = 0; } else if (arrayPresent[2] == 1){ digitalWrite(objectId2, HIGH); arrayPresent[2] = 0; } } } } } |
[ Voor 15% gewijzigd door Cassius op 27-09-2010 18:46 ]
De meeste mensen deugen!