Проблема с IF (опрашиваю через ИФ 3 кнопки)
- Войдите на сайт для отправки комментариев
Всем доброй ночи!
Играюсь с ардуиной... К сожалению возникла проблема с обычным опросом.
код ниже
byte esc = 4;
byte okay = 2;
byte menu = 12;
bool escST;
bool okayST;
bool menuST;
void setup() {
Serial.begin(9600);
pinMode(esc, INPUT);
pinMode(okay, INPUT);
pinMode(menu, INPUT);
digitalWrite(esc, HIGH);
digitalWrite(okay, HIGH);
digitalWrite(menu, HIGH);
}
void loop() {
int select;
escST = digitalRead(esc);
delay(50);
Serial.print("escST = ");
Serial.println(escST);
//------------------------
menuST = digitalRead(menu);
delay(50);
Serial.print("menuST = ");
Serial.println(menuST);
//----------------
okayST = digitalRead(okay);
delay(50);
Serial.print("okayST = ");
Serial.println(okayST);
//--------------
if(escST == 0){
select = 1;
}
if(menuST == 0){
select = 2;
}
if(okayST == 0){
select = 3;
}
else{
select = 0;
}
Serial.print("select = ");
Serial.println(select);
delay(1000);
}
вывожу данные в сериал по состоянию каждого пина что бы понять в чем косяк.
3 кнопки "ОК" "выход" и "меню"
по схеме - подкл через кнопку и резистор 5к к земле+внутренний подтяг резисторами делаю... по факту нажатой может быть только 1 кнопка из 3
плата arduino mini pro на 328ой меге
проблема: при использовании 3 шт IF - значение всегда или 0(если не нажимать ничего) и 3 если нажата "esc"/
я так понимаю, что я где то навалял с тем, что нужно как то заставить игнорировать другие IF если хоть 1 из них верно. Как это сделать подскажите?(мб что то вроде перехода, хотя я думаю есть способ изменить код и обойтись без меток и goto).
резистор 5к к земле+внутренний подтяг резисторами делаю...
надеюсь, внутренний подтяг тоже к земле? :D
замени резисторы на 1К и убери делаи из кода.
else в строке 44 относится не ко всем if'ам, а только к самому последнему. Поэтому, если условие в строке 41 неверно, то срабатывает else независимо от условий в строках 34 и 37.
ЕвгенийП, вот я кажется тоже к тому и пришел, можете подсказать, как исправить данный момент?
Мда, видимо в час ночи я уже никакой((((
Кстати, кто может подсказать, предположим у меня 6 кнопок, если не использовать внутренний подтяг к плюсу - можно ли сделать так:
тоесть 6 кнопок ----|резистор|----/кнопка1...6/---•••---|резистор2|----земля
••• - подкл к ардуино.
вопрос, может ли резистор 2 быть общим для всех 6 кнопок??? И почему так???
Заранее благодарю!)
проблема решена, решил с помощью добавления переменной bool fin;
записываю в нее единицу если хоть 1 IF истину дает.
В конце проверяю fin=0? если да то выдаю в итог ответ 0. Думаю кому нибудь пригодится))))))
//-------------- bool fin = 0; if(escST == 0){ select = 1; fin = 1; } if(menuST == 0){ select = 2; fin = 1; } if(okayST == 0){ select = 3; fin = 1; } if(fin == 0){ select = 0; } Serial.print("select = "); Serial.println(select); delay(1000); Serial.println("----------------"); }Может лутше использовать
if () { } else if () { }с Элсе тоже что то не срослось((((
а что по поводу общего резистора подтягивающего на 6 кнопок?
а что по поводу общего резистора подтягивающего на 6 кнопок?
ты собрался замкнуть пины кнопок между собой?
Сначала в IDE нажимаешь Ctrl+T для автоматического форматирования кода и расстановки отступов, потом смотришь на вложенность операторов.
Пробуй.
byte esc = 4; byte okay = 2; byte menu = 12; byte select = 0; void setup() { Serial.begin(9600); pinMode(esc, INPUT); pinMode(okay, INPUT); pinMode(menu, INPUT); digitalWrite(esc, HIGH); digitalWrite(okay, HIGH); digitalWrite(menu, HIGH); } void loop() { if (!digitalRead(esc)) { select = 1; Serial.print("select = "); Serial.println(select); } else if (!digitalRead(okay)) { select = 2; Serial.print("select = "); Serial.println(select); } else if (!digitalRead(menu)) { select = 3; Serial.print("select = "); Serial.println(select); } }а что по поводу общего резистора подтягивающего на 6 кнопок?
ты собрался замкнуть пины кнопок между собой?
А почему нет, если сигнал для Ардуины нужно подавать из шести разных мест?
Всем большое спасибо, тему можно закрыть)) отдельно спасибо ЕвгенийП за наводку, и vosara за код)