Помогите пожалуйста разобраться в паре строк кода.

DimaGilev
Offline
Зарегистрирован: 05.03.2016

Программа взятая из книги по изучению Ардуино. Мне как новичку не до конца ясно значение нескольких строк. А именно Функция сглаживания дребезга которая ниже описана в коде. Как я понял, мы создали собственную булеву функцию function , и изначально last=false, потом мы считали curren. И если last=false и curren==true, тогда делаем программную задержку 5 мс, и опять считываем, и потом возвращаем значение curren.

ВОПРОСЫ 1)В книге, в обучающих роликах на ютубе на графиках дребезг кнопок на 25 мс, а тут как будто дребезг на 5 мс уже прошел и мы тем самым избежали его программным путем.

2)Куда мы вернули значение curren? function(curren) получается?

3)А last так и остался false?

4)Но если last станет true, тогда не выполниться условие if(last==false&¤==true) при следующем нажатии кнопки.

 

                                                            ЗАРАНЕЕ СПАСИБО))) 

 

ПРОГРАММА

#define LED 13

#define BUTTON 7

bool lastButton=false;   //Предыдущее состояние кнопки

bool currenButton=false; //Текущее состояние кнопки

bool LedON=false; //Состояние светодиода

void setup() {

pinMode(LED,OUTPUT);

pinMode(BUTTON,INPUT_PULLUP);

}

/*Функция сглаживания дребезга  принимает в качестве аргумента предыдущее состояние кнопки *и выдает фактическое */

bool function(bool last){

bool curren=digitalRead(BUTTON);

if(last==false&¤==true){

delay(5);

curren=digitalRead(BUTTON);

return curren; }

}

void loop() {

currenButton=function(lastButton);

if(lastButton==false&¤Button==true) {

LedON=!LedON; }

lastButton=currenButton;

digitalWrite(LED,LedON); }

vvadim
Offline
Зарегистрирован: 23.05.2012

полистайте тему

http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...

отпадёт куча вопросов

releyshic
Offline
Зарегистрирован: 20.11.2015

DimaGilev пишет:
1)В книге, в обучающих роликах на ютубе на графиках дребезг кнопок на 25 мс, а тут как будто дребезг на 5 мс уже прошел и мы тем самым избежали его программным путем.

непонял вопроса. если контакт кнопки зажат 5мс то кнопка"сработает"

DimaGilev пишет:
2)Куда мы вернули значение curren? function(curren) получается?

изучай http://arduino.ru/Reference/FunctionDeclaration чтоб глучпые вопросы не задавать, как ты собираешься чтото понять не зная синтаксиса языка?

DimaGilev пишет:
3)А last так и остался false?
предпоследняя строчка - сохраняем значение как старое значение lastButton=currenButton;  

DimaGilev пишет:
4)Но если last станет true, тогда не выполниться условие if(last==false&¤==true) при следующем нажатии кнопки.
помоему здесь return curren; } скобка не правильно стоит навскидку должна после delay(5); стоять

Вот и отлично вот и разберись как должно быть! Сначала подумай глядя на график напряжения кнопки при дребезге как логически решить эту задачу а там поймёшь и как в программу написать

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
DimaGilev
Offline
Зарегистрирован: 05.03.2016

ВСЕМ ОГРОМНОЕ СПАСИБО! ВСЕ ОТВЕТЫ ПРЯМ В ТОЧКУ)