Создание функции - нубской вопрос
- Войдите на сайт для отправки комментариев
Вс, 11/11/2018 - 17:04
Добрый день, корифеи
Возник вопрос при попытке вынести часть кода из loop в отдельную функцию. Так код выглядел первоначально и все (с точки зрения конечного результата) работало прекрасно - каждое нажатие кнопки генерит одно событие (отправка одной строки в com-порт):
void loop() {
byte newKeyValue = getKeyValue(); // Получаем актуальное состояние кнопок с коррекцией дребезга
if (newKeyValue != keyValue) { // Если новое значение не совпадает со старым - реагируем на него
keyValue = newKeyValue; // Актуализируем переменную хранения состояния
if (keyValue > 0) { // Если значение больше 0, значит кнопка нажата
Serial.print("Button ");
Serial.print(keyValue);
Serial.println(" pressed");
beep(100); // пикаем
}
}
}
Так делаю и получается ерунда - нажатие кнопки генерит несколько десятков событий:
// Функция опроса кнопок
byte checkButtons () {
byte newKeyValue = getKeyValue(); // Получаем актуальное состояние кнопок с коррекцией дребезга
if (newKeyValue != keyValue) { // Если новое значение не совпадает со старым - реагируем на него
keyValue = newKeyValue; // Актуализируем переменную хранения состояния
if (keyValue > 0) { // Если значение больше 0, значит кнопка нажата
beep(100); // пикаем
}
}
return keyValue; // возвращаем номер нажатой кнопки
}
void loop() {
byte rrr = checkButtons ();
if (rrr > 0) { // Если значение больше 0, значит кнопка нажата
Serial.print("Button ");
Serial.print(rrr);
Serial.println(" pressed");
}
}
Подскажите пожалуйста на какие грабли я наступил - сам уже весь мозг сломал...
Что возвращает функция, если устовие в строке 4 не выполняется?
Всегда возвращает keyValue...
Что возвращает функция, если устовие в строке 4 не выполняется?
Чорд, ну да. Вот так заработало:
// Функция опроса кнопок byte checkButtons () { byte newKeyValue = getKeyValue(); // Получаем актуальное состояние кнопок с коррекцией дребезга if (newKeyValue != keyValue) { // Если новое значение не совпадает со старым - реагируем на него keyValue = newKeyValue; // Актуализируем переменную хранения состояния if (keyValue > 0) { // Если значение больше 0, значит кнопка нажата beep(100); // пикаем return keyValue; // возвращаем номер нажатой кнопки } } return 0; // возвращаем номер нажатой кнопки }Так, ото ж!
Так, ото ж!
Спасибо!