Taster richtig abfragen

Hallo miteinander,

ich verwende ein arduino mega 2560 und habe dort einen Taster angebaut.
jetzt möchte ich den Taster abfrage sobald er gedrückt wurde und wider Los gelassen wird soll eine Aktion durchgeführt werden.
ich schaffe es den Taster abzufragen wann er gedrückt wurde aber nicht ob er wider los gelassen wurde :frowning:
kann mir da jemand weiterhelfen?

Gruß

Erster versuch:

// Variablen vergabe
int LED      = 13; 
int Taster   =  4;
int Pause   = 1000; //sind 1000 mili Sekunden

// PIN Eigenschaft Ausgang / Eingang
void setup() 
 {                
  pinMode(LED,   OUTPUT);       // LED PIN = Ausgang
  pinMode(Taster,   INPUT);     // Taster PIN = Eingang
 }

// Programm in Loop
void loop()
{

 if (digitalRead(Taster)== HIGH)
 {
    digitalWrite(LED, HIGH);      // LED Einschalten  
    delay(Pause);                 // Wie lange soll Pause gemacht werden
    digitalWrite(LED, LOW);       // LED Ausschalten
 }
}

Zweiter versuch:

// Variablen vergabe
int LED      = 13; 
int Taster   =  4;
int Pause   = 1000; //sind 1000 mili Sekunden

// PIN Eigenschaft Ausgang / Eingang
void setup() 
 {                
  pinMode(LED,   OUTPUT);       // LED PIN = Ausgang
  pinMode(Taster,   INPUT);     // Taster PIN = Eingang
 }

// Programm in Loop
void loop()
{

 if (digitalRead(Taster)== HIGH)
 {
 if (digitalRead(Taster)== LOW)
 {
   digitalWrite(LED, HIGH);      // LED Einschalten  
   delay(Pause);                 // Wie lange soll Pause gemacht werden
   digitalWrite(LED, LOW);       // LED Ausschalten
 }
 }
}

Taster.png

EDIT: habe das Bild sichtbar im Beitrag verlinkt.

schau mal: http://www.arduino.cc/en/Tutorial/Switch

if (digitalRead(Taster)== HIGH)
 {
 if (digitalRead(Taster)== LOW)
 {

Da muß der Taster zuerst High sein und sofort danach LOW. Etwas unwahrscheinlich den Taster gerade in dem Moment loszulassen.

Grüße Uwe

uwefed:
Da muß der Taster zuerst High sein und sofort danach LOW. Etwas unwahrscheinlich den Taster gerade in dem Moment loszulassen.

das ist richtig :slight_smile: daher bin ich auf der such e nach Hilfe wie man so was denn macht, wolte schon einen neuen Loop hinein sätzen die Frage ist dann nur wie man aus dem Loop wider heraus kommt :slight_smile:

Hallo Muecke,

"while" könnte dir helfen:

if (digitalRead(Taster)== HIGH){
  while(digitalRead(Taster)== HIGH){
    // was er macht, solage der Taster gedrückt ist... oder auch einfach nix :-)
  }
  // was er danach machen soll
}

Muecke:

uwefed:
Da muß der Taster zuerst High sein und sofort danach LOW. Etwas unwahrscheinlich den Taster gerade in dem Moment loszulassen.

das ist richtig :slight_smile: daher bin ich auf der such e nach Hilfe wie man so was denn macht, wolte schon einen neuen Loop hinein sätzen die Frage ist dann nur wie man aus dem Loop wider heraus kommt :slight_smile:

Ich hatte Dir auch eine Lösung gegeben:

http://www.arduino.cc/en/Tutorial/Switch

Grüße Uwe

uwefed:
Ich hatte Dir auch eine Lösung gegeben:
http://www.arduino.cc/en/Tutorial/Switch

Grüße Uwe

die hatte ich auch nicht ausgeschlossen, sie ist nur auf Englisch und das dauert bei mir etwas länger da ich mir das erst übersäten muss.

http://www.mathias-wilhelm.de/arduino/beispiele/taste-schaltet-led
modifizierter Kode aus dem Beispiel:

int inPin = 8;              // Input pin für Taster
int reading;               // Wert des Eingangs
int previous = LOW;    // Vorheiger Wert des Eingangs

// folgende Variablen müssen vom Typo unsigned long sein da millis() disen Variablentyp liefert.

unsigned long time = 0;         // letzter Zeitwert bei dem der Ausgangzustand wechselte.
unsigned long debounce = 200;   // Entprellzeit

void setup()
{
  pinMode(inPin, INPUT);
  pinMode(outPin, OUTPUT);
}

void loop()
{
  reading = digitalRead(inPin);

                    // Beim Wechsel des Eingangs von LOW zu HIGH und nach der Entprellzeit: 
  if (reading == HIGH && previous == LOW && millis() - time > debounce) {
    time = millis();    
    Tue irgendwas
    }

                    // Beim Wechsel des Eingangs von HIGH zu LOW und nach der Entprellzeit:
  if (reading == LOW && previous == HIGH && millis() - time > debounce) {
    time = millis();    
    Tue irgendwas anderes
    }
  previous = reading;
}

Grüße Uwe

wenn ich es richtig verstanden habe tut es das richtige :slight_smile: so wie ich mir das vorstelle,
doch verstanden habe ich das noch nicht, ich glaube da brauche ich noch etwas mehr
zeit für um das zu verstehen. Danke noch mal für die Tipps