5 кнопок на 1 аналоговом входе. Ругается компилятор.

wenom86
Offline
Зарегистрирован: 04.11.2012

Здравствуйте. Есть необходимость повесить 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);

}

 

bwn
Offline
Зарегистрирован: 25.08.2014

readButtons не переменная, а функция, которая вернет значение кнопки. Вызывать вы ее вызываете, написать - написали, о объявить забыли.

allesanbr
Offline
Зарегистрирован: 31.01.2016

Полный пЭ

Зачем return в setup?

Во первых: return не только возвращает значение, но и осуществляет выход из функции.

Во вторых: функция  setup, итак выполняется только один раз при запуске ардуино, и инициализирует (должна инициализировать) все необходимые переменные и прочие условия для дальнейшей работы.

То есть все описанные условия(if else) будут выполнены только один раз во время старта контроллера, и больше никогда.

короче Склифасофффффский:

после строки:

int b,c=0;

поставь закрывающую скобку и объяви функцию:

}

int analogRead(int button)

{

// остальное не трогай

...и да, секунда слишком большое время для удержания кнопки(IMHO)

P.S.

А вообще: по правилам хорошего тона, да и удобства ради: собственные функции рекомендуется объявлять и напейсать - ниже блоков setup и loop

 

 

keefa
Offline
Зарегистрирован: 19.06.2015




// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {

  lcd.begin(16, 2);
  analogWrite (10, 150);// Яркость дисплея. Регулируется десятой ножкой.
}

// Кнопки select-719 (1) , left-478 (2),up-130 (3), down-306 (4),rigth-0 (5),
byte key () {
  int val = analogRead(0);
  if (val < 50) return 5;
  else if (val < 150) return 3;
  else if (val < 350) return 4;
  else if (val < 500) return 2;
  else if (val < 750) return 1;
  else if (val <= 1023) return 0;
}
void loop() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("analogRead");
  lcd.print(analogRead(0));
  lcd.setCursor (0, 1);

  switch (key()) {
    case 1:
      lcd.print ("Select");
      break;
    case 2:
      lcd.print ("Left");
      break;
    case 3:
      lcd.print ("UP");
      break;
    case 4:
      lcd.print ("Down");
      break;
    case 5:
      lcd.print ("Right");
      break;
  }
  delay (100);
}

Посмотри этот код, у меня он нормально работает.

allesanbr
Offline
Зарегистрирован: 31.01.2016

чисто спортивный вопрос: покажите участок кода где вызывается функция

key ()

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Чисто спортивный ответ-зрите в 30ую строку.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wenom86 пишет:

 Переменную readButtons я не обьявлял ... по описанию переменной return считаю ...

Читать внимательно, разбирая примеры. Затем прочитать ещё раз. И больше не писать такого ....

Поверьте, это лучший из всех советов, которые Вам можно дать!

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП ))))) +5