Arduino uklanjanje smetnji prilikom pritiska mikroprekidača

Arduino uklanjanje smetnji prilikom pritiska mikroprekidača

/*
Debounce

Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
press), the output pin is toggled from LOW to HIGH or HIGH to LOW. There's
a minimum delay between toggles to debounce the circuit (i.e. to ignore
noise).

Svaki put kad pin ulaza ide iz NISKOG u VISOKI i obrnuto, stavljamo minimalno
čekanje iz razloga da bi eliminirali smetnje ...
Znači, mi želimo, kada pritisnemo gumb, ignorirati ono vrijeme koje se desi dok mikroprekidač putuje iz gornjeg položaja u donji.
To bi nam stvaralo smetnje, npr. da nam se u programu javlja da je gumb pritisnut i pušten nekoliko puta.

The circuit:
 * LED attached from pin 13 to ground
Spojite diodu na pin13
// Ako spajate svoju diodu na drugi pin, nemojte zaboraviti u seriju staviti otpornik...
 * Pin 13 na većini arduino pločica već ima spojenu diodu.
 * pushbutton attached from pin 2 to +5V
 * 10K resistor attached from pin 2 to ground
jedna strana mikroprekidača je spojena na 5V, druga strana je spojena na pin 2 pa na 10K otpornik, i onda na uzemljenje.
http://www.honorlevel.com/data/Arduino/images/pullDownResistor.jpg
svrha otpornika je da kada pritisnemo mikroprekidač, ograničimo struju koja teče kroz mikrokontroler
ovako spojeno, status pina 2 će biti NISKO dok god ne pritisnemo mikroprekidač, kada ga pritisnemo status će biti VISOKO
nikad nemojte spajati mikroprekidače direktno, sa 5V na pin bez otpornika, jer riskirate oštećenja mikrokontrolera
iako se u većini slučajeva neće desiti ništa strašno ne vrijedi riskirati...

 * Note: On most Arduino boards, there is already an LED on the board
connected to pin 13, so you don't need any extra components for this example.
created 21 November 2006
by David A. Mellis
modified 30 Aug 2011
by Limor Fried

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/Debounce
 */

// constants won't change. They're used here to
// ove konstante se ne mijenjaju
// koristimo ih da dodijelimo brojeve pinova varijablama
// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
// pin na kojem nam je mikroprekidač
const int ledPin = 13; // the number of the LED pin
// pin na kojem nam je LED dioda

// Variables will change:
// ove varijable će se mijenjati
int ledState = HIGH; // the current state of the output pin
// trenutno stanje izlaznog pina (LED diode)
int buttonState; // the current reading from the input pin
// trenutno stanje ulaznog pina (pina na kojem je spojen mikroprekidač)
int lastButtonState = LOW; // the previous reading from the input pin
// prijašnje stanje ulaznog pina (pina na kojem je spojen mikroprekidač)
// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
// sljedeće varijable su deklarirane kao long jer se vrijeme mjeri u milisekundama pa će
// prebrzo postati prevelike da stanu u int ...
long lastDebounceTime = 0; // the last time the output pin was toggled
// vrijeme kad je zadnji puta promjenjeno stanje
long debounceDelay = 50; // the debounce time; increase if the output flickers
// vrijeme u kojem ćemo ignorirati unos kako bi dobili da je mikroprekidač pritisnut (ili pušten) samo jednom.

void setup() {
    // initialize the LED pin as an output:
    // inicijalizacija LED pina kao izlaza
    pinMode(buttonPin, INPUT);
    // initialize the pushbutton pin as an input:
    // inicijalizacija pina na kojem je mikroprekidač kao ulaza
    pinMode(ledPin, OUTPUT);

}

void loop() {
    // read the state of the switch into a local variable:
    // pročitaj status mikroprekidača
    int reading = digitalRead(buttonPin);

    // check to see if you just pressed the button
    // (i.e. the input went from LOW to HIGH), and you've waited
    // long enough since the last press to ignore any noise:
    // provjeri je li gumb pritisunt
    // provjeri je li prošlo dovoljno vremena da se prihvati promjena
    // ako je prošlo dovoljno vremena, prihvati promjenu i postavi početno stanje vremena (resetiraj vrijeme)

    // If the switch changed, due to noise or pressing:
    if (reading != lastButtonState) {
        // reset the debouncing timer
        // u varijablu lastDebounceTime stavi trenutno vrijeme
        //millis()  funkcija vraća long varijablu vremena proteklog od paljenja mikrokontrolera
        lastDebounceTime = millis();
    }

    if ((millis() - lastDebounceTime) & gt; debounceDelay) {
        // whatever the reading is at, it's been there for longer
        // than the debounce delay, so take it as the actual current state:
        // ako je prošlo dovoljno vremena od pritiska (vrijeme koje smo mi odredili gore 50 milisekundi)
        // pročitaj stanje mikroprekidača
        buttonState = reading;
    }

    // set the LED using the state of the button:
    // upali ili ugasi LED ovisno o pritisku gumba
    digitalWrite(ledPin, buttonState);

    // save the reading. Next time through the loop,
    // it'll be the lastButtonState:
    // spremi zadnji status mikroprekidača

    lastButtonState = reading;
}

Leave a Reply