Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Fahrrad LED


von Nick R. (kamayo)


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

: Bearbeitet durch User
von Schlumpf (Gast)


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.

von Nick R. (kamayo)


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 .

von Harald W. (wilhelms)


Lesenswert?

Nick Reuss schrieb:

> Den Taster habe ich in meiner
> Schaltung mit einen 100 nanoFarad Kondensator geprellt

Der arme Taster.

von Nick R. (kamayo)


Lesenswert?

Harald Wilhelms schrieb:
> Der arme Taster.

Wieso der arme Taster oder war das ironisch gemeint

von Schlumpf (Gast)


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.

von Karl H. (kbuchegg)


Lesenswert?

Nick Reuss schrieb:
> Harald Wilhelms schrieb:
>> Der arme Taster.
>
> Wieso der arme Taster oder war das ironisch gemeint

Weil so ein Kondensator über kurz oder lang dir die Tasterkontakte 
verschmoren wird.

von Schlumpf (Gast)


Lesenswert?

Karl Heinz schrieb:
> Weil so ein Kondensator über kurz oder lang dir die Tasterkontakte
> verschmoren wird.

Und wenn jetzt die Frage kommt, warum das so ist, dann bis du dran mit 
erklären.. ich habe den Code erklärt :-)

von Harald W. (wilhelms)


Lesenswert?

Karl Heinz schrieb:

>>> Der arme Taster.
>>
>> Wieso der arme Taster oder war das ironisch gemeint
>
> Weil so ein Kondensator über kurz oder lang dir die Tasterkontakte
> verschmoren wird.

Genau, er wird mit viel Strom geprellt.

von Schlumpf (Gast)


Lesenswert?

Harald Wilhelms schrieb:
> Genau, er wird mit viel Strom geprellt.

Smile.. sehr schön erklärt :-)

von Nick R. (kamayo)


Angehängte Dateien:

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 .

von Schlumpf (Gast)


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 ;-)

von Nick R. (kamayo)


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.

von Schlumpf (Gast)


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?

von Nick R. (kamayo)


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 .

von stefanus (Gast)


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.

von Schlumpf (Gast)


Lesenswert?

Und wenn du nur mal eben schnell was skizzieren willst, um es z.B. zu 
posten, kannsts du das auch online hier machen

https://www.circuitlab.com/editor/

Du kannst dann einen .png Export machen, den du hochladen kannst

von Schlumpf (Gast)


Lesenswert?

Sorry, habe gerade gesehen, dass man sich da registrieren muss und das 
scheint dann irgendwas zu kosten.

von Nick R. (kamayo)


Lesenswert?

Ich habe gerade von einem Freund die Info bekommen das ich sowas am 
besten in Eagle machen soll da er mir dann auch Platinen herstellen 
kann.
Werde mich wohl mal an dem Programm versuchen sowie das mal per Hand zu 
zeichnen und zu berechnen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.