Pages: [1] 2   Go Down
Author Topic: Programm mit Schalter und LED  (Read 2386 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
« Last Edit: January 10, 2013, 01:57:13 pm by lgrube96 » Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.  smiley-grin
Logged

Germany
Offline Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@mkl0815: Ja ok, daran habe ich jetzt gar nicht gedacht smiley-neutral
Das ist natürlich am einfachsten !
Logged

Münster
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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 Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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 Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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  smiley-mr-green smiley-wink

Sorry mkl0815 das ich eigentlich genau das gleiche schreibe wie du :/
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Quote
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 Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Brattain Member
*****
Karma: 271
Posts: 21936
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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??  smiley-roll-sweat

Gruß,
Tobi
Logged

Nobody is perfect but - impossible is nothing

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21936
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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 Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1] 2   Go Up
Jump to: