Hilfe bei Fahrrad LED

#3845205
Lesenswert?

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
Gast #3845458
Lesenswert?

switch wird in jedem Programmdurchlauf abgefragt und der Wert an res 
übergeben.

Zwischen dem ersten und dem zweiten Tastendruck ist lässt du ja auch mal 
los.
Dann ist switch HIGH und res und switchState auch.

Wenn du jetzt wieder drückst, wird res = Low, switchState ist aber noch 
High und das Spiel geht von vorne los.

Abgesehen davon, dass man das so eher nicht lösen wird, da der Taster 
nicht entprellt ist und ein kurzer Tatendruck innerhalb eines 
Blinkzyklus einfach "verschluckt" wird, passt der Code schon, würde ich 
sagen.
#3845505
Lesenswert?

Hi danke schonmal für deine Antwort .
Für mich nochmal zum verständnis :

Heist das jetzt der PIN ist dauerhaft auf High und nur wenn ich den 
Taster drück der PIN auf Low gesetzt wird ?Den Taster habe ich in meiner 
Schaltung mit einen 100 nanoFarad Kondensator geprellt denke mal das 
reicht .
Gast #3845616
Lesenswert?

Nick Reuss schrieb:
> Wieso der arme Taster oder war das ironisch gemeint

es heißt ENT-prellt nicht GE-prellt

Nick Reuss schrieb:
> eist das jetzt der PIN ist dauerhaft auf High und nur wenn ich den
> Taster drück der PIN auf Low gesetzt wird ?

Ich ging mal davon aus, dass das der Fall ist, weil sonst der Code 
kompletter Blödsinn wäre.
Aber ob das tatsächlich der Fall ist, kann ich dir nicht beantworten. 
Wie auch? Wenn du Fragen zu einer Schaltung hast, dann solltest du diese 
auch posten und nicht nur einen Code.
#3845640
Lesenswert?

Danke wieder was dazu gelernt .
Einen Schaltplan habe ich leider nicht habe nur diesen Versuchsaufbau .
Könnt aber vielleicht schnell eine erstellen nur leider kenne ich keien 
Freeware Programme die für sowas gut sind .

Nutze hier ein ATmega168
vielleicht erkennt man auf den Bild bissel was .
Angehängte Dateien:
Gast #3845642
Lesenswert?

Jetzt wird es immer lustiger.
Du verdrahtest SELBST auf dem Steckbrett den Schalter so, dass er gegen 
Masse schaltet und bist dann erstaunt darüber, dass er das tut.
Du bist ja ein lustiger Zeitgenosse ;-)
#3845652
Lesenswert?

:(
Ich ging davon aus das der Pin2 jedes mal zwischen Low und High wechselt 
wenn man den Taster drückt .
Und wunderte mich daher das er bei High die Variable mode hoch zählt .

Aber es ist wohl eher doch so das er nur bei betätigen des Tasters den 
Wert Low annimmt.
Gast #3845668
Lesenswert?

Nick Reuss schrieb:
> Ich ging davon aus das der Pin2 jedes mal zwischen Low und High wechselt
> wenn man den Taster drückt .

Nein, ein Taster behält seinen Zustand nicht bei, wenn man loslässt.
Also wenn du in deiner Anordung drückst, verbindet er den Pin mit Masse 
und das bleibt so lange so, solange du gedrückt hältst. Und wenn du 
loslässt geht der Pin wieder nach High.

Aber das sind doch die ABSOLUTEN Basics, die man wissen sollte, bevor 
man sich mit nem uC auseinandersetzt, oder?
#3845689
Lesenswert?

Ja wie gesagt war nen wirklich heftiger Denkfehler von mir und bin 
ehrlich gesagt selber net drauf gekommen obwohl ich immer Taster 
geschrieben hatte ^^.
Habt ihr vielleicht eine Empfehlung für ein Programm womit ich für sowas 
Schaltpläne erstellen kann .

Beschäftige mich seit Wochen wieder mit E-Technik um am ende eine 7 
Segment Anzeige zu Programmieren auf der dann eine Zahlenfolge erscheint 
und dies soll dann alles mit einer 9V Block Batterie funktionieren .
Die meisten Bücher die ich gerade wälze haben leider zu wenig praktische 
Beispiele wo genau erklärt wird warum ich das Bauteil einsetze und nicht 
doch ein anderes.
Habe da wirklich noch viel vor mir ...

Danke für die Hilfe und den wink mit den Zaunpfahl .
Gast #3845706
Lesenswert?

> Könnt aber vielleicht schnell eine erstellen nur leider
> kenne ich keien Freeware Programme die für sowas gut sind .

Vorschlag: Papier und Bleistift. Sicher hast Du auch einen Fotoapparat 
oder ein Handy mit Kamera.

Mal im ernst: Ein bisschen Handarbeit ist durchaus ok, dafür muss man 
sich nicht schämen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren