Arduino Taster als Schalter

[color=#333333]Guten Abend miteinander,

Ich möchte gerne einen Taster der mit meinem Arduino verbunden ist, als 
Schalter verwenden - 1. Drücken Einschalten... 2. Drücken Ausschalten 
usw. Im Programm möchte ich damit nur eine bool Variable zwischen 0 und 1 schalten. Nun habe ich im Internet mal gesucht und auch etwas gefunden, 
jedoch ist es für mein Programm auch Wichtig, dass es OHNE delay 
funktioniert. Da aber alle vorlagen, die ich gesehen habe, einen delay 
verwenden, wollte ich fragen, ob ihr schon so etwas Programmiert habt 
oder ob ihr einen Lösungsvorschlag hättet?

Beste Grüsse

fasaso[/color]

fasaso:

[color=#333333]

Ich möchte gerne einen Taster der mit meinem Arduino verbunden ist, als
Schalter verwenden - 1. Drücken Einschalten... 2. Drücken Ausschalten

jedoch ist es für mein Programm auch Wichtig, dass es OHNE delay
funktioniert.[/color]

Na dann aus meiner Kiste:

const int switchpin=2;
const unsigned long debouncetime=40;
bool schalter=LOW;
bool merker=LOW;
unsigned long lasttime=0;
const int LED=LED_BUILTIN;

void setup()
{
  pinMode (switchpin, INPUT_PULLUP);
  pinMode (LED, OUTPUT);
}

void loop()
{
  if (millis()-lasttime>debouncetime)
  {
    if (digitalRead (switchpin))
    {
      lasttime=millis();
      if (!merker)
      {
        schalter=!schalter;
        merker=HIGH;
      }
    }
    else
    {
      merker=LOW;
    }
  }
  digitalWrite (LED,schalter);
}

(deleted)

Hallo,

ich hätte da auch noch einen aus der Wühlkiste diesmal als Funktion. :slight_smile:

Heinz

const byte btnpin = 3;
const byte ledpin = 13;
bool btnstate; // status des buttons
bool ledstate; // status für LED

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(btnpin, INPUT_PULLUP);
  pinMode(ledpin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

  btnstate = !digitalRead(btnpin); // Taster lesen invertiert
  ledstate = ButtonToggle(btnstate);// verarbeiten
  digitalWrite(ledpin, ledstate);// ausgeben

} // ende lool

bool ButtonToggle( bool btn) {
  uint32_t static altzeit; 
  bool static status = 0;
  bool static flanke = 0;

  if (millis() - altzeit >= 10) { //entprellen
    altzeit = millis();
    if (btn & !flanke) { // Flanke abfragen
      flanke = true;
      status = !status; // Status toggeln
    }
    if (!btn) flanke = false; // reset flanke
  }
  return (status);
}