Този пример показва как може да се използва обикновен бутон като ключ: всеки път когато се натисне бутона, светодиода (или каквото сте свързали) се включва (ако е бил изключен) и се изключва (ако е бил включен). Същевременно премахва "шума" на входния сигнал без който еднократното натискане на бутона ще се възприема от кода като множество натискания. Използва millis () функцията за да засече момента когато бутонът е бил натиснат.
За този пример е нужен обикновен бутон свързан към пин 2 и светодиод свързан към пин 13.
Снимка
Код
/* Premahvane na "shum" * ------------ * * kontrolira svetodiod s pomoshtta na buton kato izchistva "shuma" * * ot David A. Mellis (2006) * * podobrena ot Limor Fried (Juli 2009) * * bulgarski prevod ot Simeon Ianchev / Robotev.com (Septemvri 2009) */ int inPin = 2; // promenliva za vhoden pin int outPin = 13; // promenliva za izhoden pin int state = HIGH; // promenliva za momentnoto sustoyanie na izhodniya pin. int reading; // promenliva za momentnoto sustoyanie na vhodniya pin int previous = LOW; // promenliva za predishnoto sustoyanie na vhodniya pin /* sledvashtite promenlivi sa ot tipa “long” zashtoto vremeto, izmervano v milisekundi(ms), burzo shte stane po-golyamo ot tova, koeto moje da se zapazi kato promenliva ot tipa “int”. */ long time = 0; // otchita koga za posleden put e bil natisnat butona long debounce = 200; // vremeto prez, koeto da ne se otchitat pokazaniya za da premahne //“shum” ili lujlivi pokazaniya. Ako ustroystvoto svurzano //kum izhodniya pin primigva uvelichete stoynostta na promenlivata debounce void setup() { pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); } void loop() { reading = digitalRead(inPin); /* ako natisnem butona (t.e. Ako pokazanieto ot vhodniya pin stane ot LOW na HIGH) I sme izchakali dostatachno dulgo ot poslednoto natiskane, za da izbegnem nejelaniya “shum”... */ if (reading == HIGH && previous == LOW && millis() - time > debounce) { // ... promeni sustoyanieto na izhodniya pin if (state == HIGH) state = LOW; else state = HIGH; // ... I zapomni koga za posledno e bil natisnat butona time = millis(); } digitalWrite(outPin, state); previous = reading; }