5 кнопок на 1 аналоговом входе. Ругается компилятор.
- Войдите на сайт для отправки комментариев
Вс, 31/01/2016 - 01:28
Здравствуйте. Есть необходимость повесить 5 кнопок на 1 аналоговый аход. Необходимо считывать уровень при нажатии любой из кнопок и выводить это на экран 1602 с указанием, номер какой кнопки был нажат, а также значение на аналоговом пине. Компилятор ругается на 48 строку. Переменную readButtons я не обьявлял и в коде она мне не нужна, но что вписать вместо неё, на соображу. Также прошу обратить внимание на 41 строку, по описанию переменной return считаю, что вписал правильно (наверно), но компилятор считает иначе. Ардуина 1.0.5
#include <LiquidCrystal.h> LiquidCrystal lcd (12, 11, 5, 4, 2, 3); int a=0; void setup () { lcd.begin (16, 2); pinMode (A5, INPUT_PULLUP); int b,c = 0; c=analogRead (5); // get the analog value if (c>1000) { b=0; // buttons have not been pressed } if (c>440 && c<470) { b=1; // button 1 pressed } else if (c<400 && c>370) { b=2; // button 2 pressed } else if (c>280 && c<310) { b=3; // button 3 pressed } else if (c>150 && c<180) { b=4; // button 4 pressed } else if (c<20) { b=5; // button 5 pressed } return b; } void loop () { a=readButtons (5); lcd.clear (); if (a==0) // не нажата ни одна кнопка { lcd.setCursor (0,1); lcd.print ( "Press a button" ); // сообщение "Нажмите кнопку" } else if (a>0) // нажата кнопка { lcd.setCursor (0,1); lcd.print ( "Button: " ); // сообщение в 1 строке "Кнопка..." lcd.print (a); lcd.setCursor (0,2); lcd.print ( "Value: " ); // сообщение во 2 строке "Значение..." lcd.print (c); } delay (1000); }
readButtons не переменная, а функция, которая вернет значение кнопки. Вызывать вы ее вызываете, написать - написали, о объявить забыли.
Полный пЭ
Зачем return в setup?
Во первых: return не только возвращает значение, но и осуществляет выход из функции.
Во вторых: функция setup, итак выполняется только один раз при запуске ардуино, и инициализирует (должна инициализировать) все необходимые переменные и прочие условия для дальнейшей работы.
То есть все описанные условия(if else) будут выполнены только один раз во время старта контроллера, и больше никогда.
короче Склифасофффффский:
после строки:
int b,c=0;
поставь закрывающую скобку и объяви функцию:
}
int
analogRead(int button)
{
// остальное не трогай
...и да, секунда слишком большое время для удержания кнопки(IMHO)
P.S.
А вообще: по правилам хорошего тона, да и удобства ради: собственные функции рекомендуется объявлять и напейсать - ниже блоков setup и loop
Посмотри этот код, у меня он нормально работает.
чисто спортивный вопрос: покажите участок кода где вызывается функция
key ()
Чисто спортивный ответ-зрите в 30ую строку.
Переменную readButtons я не обьявлял ... по описанию переменной return считаю ...
Читать внимательно, разбирая примеры. Затем прочитать ещё раз. И больше не писать такого ....
Поверьте, это лучший из всех советов, которые Вам можно дать!
ЕвгенийП ))))) +5