Hallo ich bin sehr neu auf diesen Gebiet und habe erst vor kurzen
angefangen.
Ich habe derzeit ein zienlich großes Verständnis Problem ohne dass ich
einfach nicht weiter machen möchte. Da ich der Meinung bin das man die
Grundlegenden sachen verstehen muss um weiter zu kommen.
Es handelt um folgenden Quelltext
1 | //////////////////////////START////////////////////////////////////////////
|
2 | // Variablen declarieren
|
3 |
|
4 | byte ledPin[5] = {8,9,10,11,12}; //LEDs on pins 8 to 12
|
5 | int swtch = 2; //switch on pin 2
|
6 | int res, swtchState = 0; //variable for switch
|
7 | int mode = 0; //display mode
|
8 |
|
9 | //Pin-Modes , Bibilotheken
|
10 | void setup()
|
11 | {
|
12 | for (int n=0; n<5; n++)
|
13 | {
|
14 | pinMode(ledPin[n], OUTPUT);
|
15 | }
|
16 | pinMode (swtch, INPUT);
|
17 | digitalWrite (swtch, HIGH); //activate internal pull-up
|
18 | }
|
19 |
|
20 | //Endlosschleife , Programm
|
21 | void loop()
|
22 | {
|
23 | res = digitalRead(swtch); //check switch
|
24 | if (res != swtchState) //Switch status changed
|
25 | {
|
26 | if (res == LOW)
|
27 | {
|
28 | mode++;
|
29 | if (mode > 3)
|
30 | {
|
31 | mode=0;
|
32 | }
|
33 | }
|
34 | }
|
35 | swtchState = res; //Save switch status
|
36 |
|
37 | switch (mode)
|
38 | {
|
39 | case 0: //all LEDs off
|
40 | {
|
41 | for (int n=0; n<5; n++)
|
42 | {
|
43 | digitalWrite(ledPin[n], LOW);
|
44 | }
|
45 | }break;
|
46 |
|
47 | case 1: //all LEDs on
|
48 | {
|
49 | for (int n=0; n<5; n++)
|
50 | {
|
51 | digitalWrite(ledPin[n], HIGH);
|
52 | }
|
53 | }break;
|
54 |
|
55 | case 2: //blink
|
56 | {
|
57 | for (int n=0; n<5; n++)
|
58 | {
|
59 | digitalWrite(ledPin[n], HIGH);
|
60 | }
|
61 | delay(100);
|
62 | for (int n=0; n<5; n++)
|
63 | {
|
64 | digitalWrite(ledPin[n], LOW);
|
65 | }
|
66 | delay(100);
|
67 | }break;
|
68 |
|
69 | case 3: //chaser
|
70 | {
|
71 | for (int n=0; n<5; n++)
|
72 | {
|
73 | digitalWrite(ledPin[n], HIGH);
|
74 | delay(50);
|
75 | digitalWrite(ledPin[n], LOW);
|
76 | }
|
77 | }break;
|
78 | }
|
79 | }
|
80 | //////////////////////////ENDE////////////////////////////////////////////
|
Wenn ich diesen Quelltext mal theoretisch durch gehe komm ich auf
folgende Ergebnisse:
Ausgangssituation:
1 | swtch = High;
|
2 | res = 0;
|
3 | swtchState=0;
|
4 | mode = 0;
|
Programmstart:
1 | swtch = High;
|
2 | res = High;
|
3 | mode =0;
|
4 | swtchState = High;
|
Resultat LEDs bleiben aus da res != Low und somit sich der mode nicht
ändert.
1.Tasterbetätigung
1 | swtch = low;
|
2 | res = low;
|
3 | swtchState = High;
|
4 | mode = 1;
|
5 | swtchState = low;
|
Resultat alle LEDs an da mode=1
2.Tasterbetätigung
1 | swtch = HIGH
|
2 | res = HIGH <-----------
|
Somit dürfte jetzt eigentlich nix weiter passieren da res weiterhin auf
HIGH bleibt und der mode nur hochgezählt wird wenn res == LOW ist
ABER der mode wird trotzdem hochgezählt und somit fangen die LEDs an zu
blinken .
Nun meine Frage wieso da durch die Schalterbetätigung an res der Wert
HIGH übergeben wurde ????
Ich versteh das gerade nicht oder habe ich ein Denkfehler in der
Funktionsweise des Eingangs wo der Schalter sitzt