Arduino Switch Toggle


Model de cod Switch Toggle.
Cu acest cod se poate aprinde/stinge un led prin apăsarea unui buton push fără reținere conectat la o intrare.
La intrare vom avea o rezistență de 10k conectată la masă. Butonul este conectat între pin arduino și +5v.
Varianta toggle reprezintă aprinderea și menținerea ledului la apăsarea butonului. Pentru stingerea ledului este necesară o nouă apăsare a butonului. Ciclul se repetă la infinit.
În cod este adăugat și un debounce pentru evitarea apariției paraziților când este apăsat butonul.

Arduino Switch Toggle 1

int inPin = 8;         // the number of the input pin
int outPin = 13;       // the number of the output pin

boolean reading;           // the current reading from the input pin
boolean previous = LOW;    // the previous reading from the input pin

unsigned long debounce = millis();   // the debounce time

void setup()
{
  pinMode(inPin,  INPUT);
  pinMode(outPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  reading = digitalRead(inPin);
  Serial.println(reading);
 
  if (reading == HIGH && previous == LOW && millis()-debounce > 1000){ // debounce 1 sec.
        Serial.println("inside debounce if - Toggle Active"); //for test only
        digitalWrite(outPin, !digitalRead(outPin)); // toggle out pin
        debounce = millis(); // reset millis
  }
  previous = reading; // save previous reading
}

Arduino Switch Toggle 2


int inPin = 8;         // the number of the input pin
int outPin = 13;       // the number of the output pin

boolean previous = false;    // define state

unsigned long debounce = millis();   // the debounce time

void setup()
{
  pinMode(inPin,  INPUT);
  pinMode(outPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if (digitalRead(inPin)==LOW){previous = false;}

  if (digitalRead(inPin)==HIGH && previous == false && millis()-debounce > 1000)  // debounce 1 sec.
  {
    Serial.println("inside debounce if - Toggle Active"); //for test only
    digitalWrite(outPin, !digitalRead(outPin)); // toggle out pin
    debounce = millis(); // reset millis
    previous = true; // save previous reading
  }
  delay(10); //wait
}

0 comentarii:

Trimiteți un comentariu