Offline
Newbie
Karma: 0
Posts: 6
|
 |
« on: January 10, 2013, 01:21:52 pm » |
Hallo, ich habe vor ein Programm zu schreiben dass wenn ich 5 mal auf einen Schalter gedrückt habe eine LED angeht. Wie kann ich das machen? (Code) Danke und Gruß
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Sr. Member
Karma: 2
Posts: 269
|
 |
« Reply #1 on: January 10, 2013, 01:51:45 pm » |
Hallo, also ich würde es so lösen, du nimmt einfach ein Variable die jedes mal, wenn man den Button drückt 1 addiert. Und dann prüfst du halt wann die Variable den Wert 5 hat und schaltest die LED ein. Grüße Lorenz EDIT: Du brauchst dann noch eine Variable die jeweils true speichert wenn du den Button drückst und false wenn du den Button wieder los lässt! Und du prüfst dann immer ob die variable auf true ist. Hoffe du verstehst das so wie ich das meine ?! Und denk nicht das jemand alles für dich macht ! Habe ich auch schon so gelernt 
|
|
|
|
« Last Edit: January 10, 2013, 01:57:13 pm by lgrube96 »
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 18
Posts: 1299
|
 |
« Reply #2 on: January 10, 2013, 01:53:29 pm » |
Nimm Dir das Beispiel "Datei -> Beispiele -> Digital -> Button" oder "Datei -> Beispiele -> Digital -> Debounce" als Basis und erweitere den Code um eine Variable die zählt wie oft der Button gedrückt wurde. Wenn der Zähler 5 erreicht hat, dann schalte die LED ein. Wieso glaubst Du, das Dir jemand den Code dafür schreibt? Ein wenig selbst mitmachen ist durchaus erwünscht. 
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Sr. Member
Karma: 2
Posts: 269
|
 |
« Reply #3 on: January 10, 2013, 01:58:27 pm » |
@mkl0815: Ja ok, daran habe ich jetzt gar nicht gedacht Das ist natürlich am einfachsten !
|
|
|
|
|
Logged
|
|
|
|
|
Münster
Offline
Newbie
Karma: 0
Posts: 4
|
 |
« Reply #4 on: January 10, 2013, 02:02:15 pm » |
int speicher = 0; int zustand = 0; int LED = 13; int Schalter = 12;
void setup(){ pinMode(LED,OUTPUT); pinMode(Schalter,INPUT); digitalWrite(Schalter,LOW); }
void loop(){ zustand = digitalRead(Schalter); if(zustand == HIGH){ speicher = speicher+1; } if(speicher==5){ digitalWrite(LED,HIGH); } if(speicher==6){ digitalWrite(LED,LOW); speicher = 0; } } Und so würde sie erst bei einem erneuten drücken (6. druck) wieder ausgehen.. Danach kannst du wieder 5 mal drücken, bis sie angeht.. Code basiert auf meinem Vorposter
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 18
Posts: 1299
|
 |
« Reply #5 on: January 10, 2013, 02:07:09 pm » |
@ctrick: Dein Code wird kaum funktionieren, obwohl er eigentlich genau das gewünschte macht. Das Problem ist die Geschwindigkeit mit der Dein Arduino arbeitet. Wenn Du den Button nur eine halbe Sekunde drückst, ist der Arduino schon tausende Male durch die loop() gerannt und hat die Variable zig Mal bis 5 gezählt und wieder auf 0 gesetzt. Man sollte schon zwischendrin schauen, ob der Taster wieder losgelassen wurde.
Unabhängig davon hatte es einen Grund das wir in diesem Thread keinen Code gepostet haben. Hier geht es nämlich auch um selbst lernen, vor allem bei einfachen Aufgaben. Wenn jemand seinen Code postet, auch wenn er nicht funktioniert, bekommt er hier immer Hilfe und Tipps was man ändern / anpassen muss. So lernt man nämlich viel besser als wenn einem nur direkt die Lösung präsentiert wird. Mario.
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Sr. Member
Karma: 2
Posts: 269
|
 |
« Reply #6 on: January 10, 2013, 02:13:56 pm » |
@ctrick: wie mkl0815 sagt, wird dein Sketch nicht wirklich funktionieren außer du drückst für wenige millisekunden den Taster, welches sehr unmöglich ist ! Wie ich bereits erwähnt habe muss vorher geprüft werden ob der Taster wieder losgelassen wurde ! Dafür benötigt man noch eine zusätzlich Variable die halt den Zustand des Tasters speichert! Und so wie du vorgehst (ctrick), einfach einen Sketch zu posten, macht wenig sinn für einen Anfänger ! Learning by doing ! nicht learning by copying  Sorry mkl0815 das ich eigentlich genau das gleiche schreibe wie du :/
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 163
|
 |
« Reply #7 on: January 10, 2013, 02:16:41 pm » |
Das wäre mein Vorschlag, ich habe ihn allerdings nicht Testen können da mein Board in der Firma liegt. Wäre aber dankbar für ein Feedback. Gruß, Tobi boolean speicheran = LOW; boolean speicheraus = LOW; int AnzahlANschalten = 0; int AnzahlAUSschalten = 0; boolean zustand = LOW; int LED = 13; int Schalter = 12;
void setup(){ pinMode(LED,OUTPUT); pinMode(Schalter,INPUT); digitalWrite(Schalter,LOW); }
void loop(){ zustand = digitalRead(Schalter); if(zustand == HIGH){ AnzahlANschalten = AnzahlANschalten + 1; while(speicheraus = LOW){ zustand = digitalRead(Schalter); if(zustand = LOW){ AnzahlAUSschalten = AnzahlAUSschalten + 1; speicheraus = HIGH; } } } if(AnzahlANschalten - AnzahlAUSschalten == 0){ digitalWrite(LED,HIGH); delay(2000); digitalWrite(LED,LOW); AnzahlAUSschalten = 0; AnzahlANschalten = 0; zustand = LOW; speicheran = LOW; speicheraus = LOW; } }
|
|
|
|
|
Logged
|
Nobody is perfect but - impossible is nothing
|
|
|
|
Germany
Offline
Sr. Member
Karma: 2
Posts: 269
|
 |
« Reply #8 on: January 10, 2013, 02:21:38 pm » |
Soweit ich den Sketch mal überflogen habe, ist dort nichts mit 5 mal drücken und dann LED an ?! Oder soll der Code etwas anderes können ?
Grüße Lorenz
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 163
|
 |
« Reply #9 on: January 10, 2013, 02:23:43 pm » |
nächster Versuch:
boolean speicheran = LOW; boolean speicheraus = LOW; int AnzahlANschalten = 0; int AnzahlAUSschalten = 0; boolean zustand = LOW; int LED = 13; int Schalter = 12;
void setup(){ pinMode(LED,OUTPUT); pinMode(Schalter,INPUT); digitalWrite(Schalter,LOW); }
void loop(){ zustand = digitalRead(Schalter); if(zustand == HIGH){ AnzahlANschalten = AnzahlANschalten + 1; while(speicheraus = LOW){ zustand = digitalRead(Schalter); if(zustand = LOW){ AnzahlAUSschalten = AnzahlAUSschalten + 1; speicheraus = HIGH; } } } if(AnzahlANschalten == 5 && AnzahlAUSschalten == 5){ digitalWrite(LED,HIGH); delay(2000); digitalWrite(LED,LOW); AnzahlAUSschalten = 0; AnzahlANschalten = 0; zustand = LOW; speicheran = LOW; speicheraus = LOW; } }
|
|
|
|
|
Logged
|
Nobody is perfect but - impossible is nothing
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 163
|
 |
« Reply #10 on: January 10, 2013, 02:25:02 pm » |
je nachdem wie man will kann man das auch abändern das die led schon angeht wenn der Taster zum 5. mal gedrückt wird aber nach dem 5. druck noch nicht losgelassen wurde.
|
|
|
|
|
Logged
|
Nobody is perfect but - impossible is nothing
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16143
+39 349 2158303
|
 |
« Reply #11 on: January 10, 2013, 02:29:24 pm » |
ctrick und Tobias93 Für viele von uns ist ein Sketch, der das gewünschte macht, eine Fingerübung von 5 Minuten, vieleicht weniger Aufwand als diese Antwort zu schreiben. Aber, wie meine Vorredner bereits sagten, am meisten lernt man wenn man die Idee wie machen bekommt und dann selbst sein Hirn anstrengen muß, einen lauffähigen Sketch zu bekommen.
@Tobias93 Dein erster Sketch macht auch nicht das gewünschte; das Led geht für 2 Sekunden an und dann wieder aus und in dieser Zeit kann werden die Tastendrücke ignoriert.
"AnzahlANschalten - AnzahlAUSschalten == 0" ist immer wahr auch wenn gar keine Taste gedrückt wurde. Es wird nicht kontrolliert ob 5 Tastendrücke gemacht wurden.
Lassen wir ardi's Hirn auch etwas arbeiten und helfen ihm gegebenenfalls Fehler aus seinem Sketch zu finden.
Grüße Uwe
|
|
|
|
« Last Edit: January 10, 2013, 02:31:24 pm by uwefed »
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 1
Posts: 163
|
 |
« Reply #12 on: January 10, 2013, 02:34:10 pm » |
hey, ich geb dir da völlig recht uwe, seh ich genau so mit dem Lerneffekt und dem kopieren. Nur eine Frage, funktioniert mein zweiter Sketch??  Gruß, Tobi
|
|
|
|
|
Logged
|
Nobody is perfect but - impossible is nothing
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16143
+39 349 2158303
|
 |
« Reply #13 on: January 10, 2013, 04:41:55 pm » |
Nur eine Frage, funktioniert mein zweiter Sketch?? Diese Frage werde ich nicht öffentlich beantworten da ich ansonsten ardi eine Antwort gebe, ob er den Sketch verwenden kann oder er (wenigstens) kontrollieren muß, ob der Sketch funktioniert. Und zur Beruhigung Deiner Neugier: Der Sketch funktioniert nicht. Es sind einige banale Fehler drin. Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 6
|
 |
« Reply #14 on: January 13, 2013, 05:52:30 am » |
int zaehler = 0; void setup() { Serial.begin(9600); pinMode(2, INPUT); pinMode(13, OUTPUT); } void loop() { boolean schalter = false; while ( schalter == false) { schalter = digitalRead(2); } zaehler++; Serial.println(zaehler, DEC); if (zaehler == 5) { digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); zaehler = 0; } }
|
|
|
|
|
Logged
|
|
|
|
|
|