Опит за обучение на Arduino

Добър ден!

Продължавам да ви разказвам за моя опит с микроконтролери, използващи Arduino като пример. По-рано описах как да управлявате светодиода с помощта на тактовия бутон. Задачата беше следната: натисна бутона, светодиодът се включи, пусна - изгасна. На практика обаче задачата често е да фиксира действието на бутона, т.е. натисна бутона - светодиодът светна, натисна го отново - изгасна.
Ако опишем алгоритъма на човешки език, получаваме следното: ако бутонът е бил натиснат и светодиодът е включен, тогава изключете светодиода, ако бутонът е бил натиснат и светодиодът е изключен, тогава включете светодиода.

опит

обучение

ако (условие)

// тук са командите, които ще бъдат изпълнени, ако условието е изпълнено (т.е. не е равно на нула)
>
друго

// тук са командите, които ще бъдат изпълнени, ако условието не е изпълнено (т.е. равно на нула)
>
на примера на моята скица изглежда така:
ако (0 == onOff) // ако светодиодът не свети, ...
onOff = 1;
digitalWrite (13, HIGH);
// ... тогава го запалваме, ...
>
друго
// ... в противен случай ...
onOff = 0;
digitalWrite (13, LOW);
// ... гася
>

Заредете скицата в Arduino и опитайте да натиснете бутона. Понякога всичко работи както трябва. Понякога светодиодът едва мига и изгасва. Понякога нищо не се случва. Защо има такава разлика в резултата при изпълнение на същата програма? Изглежда, че правим всичко както трябва ... Това се дължи на явлението в електрониката, наречено "скачане на контакта".

опит

опит

За да приложа такова забавяне в празен цикъл на изчакване на освобождаването на бутона, добавих команда за забавяне забавяне (1) (числото в скоби е продължителността на закъснението в милисекунди (1/1000 от секундата)).
Също така в цикъла се появи брояч цикъл++. Програмистите наричат ​​този запис нарастване. Всеки път, когато изпълнявате тази команда, променливата цикъл се увеличава с един. Същият ред може да се напише така: цикъл = цикъл + 1. Няма да има грешка. Зареждам увеличената скица в Arduino и я проверявам. Сега всичко работи добре. Мисията изпълнена.