Кнопка и режимы

NikL
Offline
Зарегистрирован: 04.01.2021

Всем привет, столкнулся с такой проблемой, не могу сделать так чтобы при нажатии сначала 1 кнопки после неё и второй(не отпуская первой) загорался светодиод. Вот мой код.

#define FIRST_Sensor A0
#define SECOND_Sensor A1

int buttonState = 0;
int buttonState1 = 0;
int a = false;

void setup()
{
pinMode(9, OUTPUT);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
Serial.begin(9600);
}
void loop(){
buttonState = digitalRead(FIRST_Sensor);
if (buttonState == HIGH) {
a = true;
Serial.println("FIRST_Sensor=True");
}
buttonState1 = digitalRead(SECOND_Sensor);
if (buttonState1 == HIGH) & a == true; {
digitalWrite(9, HIGH);
Serial.println("SECOND_Sensor=True");
}
}

sadman41
Offline
Зарегистрирован: 19.10.2016

Прискорбно.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Самая главная проблема вашего кода описана здесь

Ну и на вскидку - пятая снизу строка выглядит весьма странно ))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

v258 пишет:

пятая снизу строка выглядит весьма странно ))

Тут всё выглядит странно

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

DetSimen пишет:

Тут всё выглядит странно

Но та строка - весьма странно )))

NikL
Offline
Зарегистрирован: 04.01.2021

Понял

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

А если понял, так вставляйте код как положено и объясняйте свою проблему толком.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

v258 пишет:

DetSimen пишет:

Тут всё выглядит странно

Но та строка - весьма странно )))

канпилятор думает иначе )))
 

Скетч использует 2002 байт (6%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 224 байт (10%) динамической памяти, 
оставляя 1824 байт для локальных переменных. Максимум: 2048 байт.

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

ua6em пишет:

канпилятор думает иначе )))
 

Скетч использует 2002 байт (6%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 224 байт (10%) динамической памяти, 
оставляя 1824 байт для локальных переменных. Максимум: 2048 байт.

Компилятору ничего не известно о замыслах ТС, ему лишь бы синтаксических ошибок не было )))

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

v258 пишет:

а строка - весьма странно )))

канпилятор думает иначе )))

компилятор тебя троллит

NikL
Offline
Зарегистрирован: 04.01.2021

Когда прошиваю ардуино светодиод просто игнорирует кнопки, сразу же загорается по непонятным мне причинам.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Он ведет себя ровно так, как вы написали. Если это не совпадает с вашими задумками, значит вы не сумели реализовать нужный алгоритм.

Я вам указал на проблемную строку, а вы ленитесь даже нормально код выложить. И чего вы ждете от форума?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

ua6em пишет:

канпилятор думает иначе )))

Канделятор вообще только DOOMает.

Клапауций 9999
Offline
Зарегистрирован: 27.11.2020

походу, это брат по дуино того, кто ролетой рулил двумя кнопками и дуино - оказалось, дуино в ТЗ лишняя.

ТС, соединяй кнопки, светодиод и резистор последовательно, подключай к блоку питания - будет работать ровно так, как тебе нужно и без кода. О_о

*не благодари - подарок от души.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Клапауций 9999 пишет:
ТС, соединяй кнопки, светодиод и резистор последовательно, подключай к блоку питания - будет работать ровно так, как тебе нужно и без кода. О_о *не благодари - подарок от души.

ГЕНИЙ!!!!

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

NikL пишет:
Когда прошиваю ардуино светодиод просто игнорирует кнопки, сразу же загорается по непонятным мне причинам.

Вам несколько человек сказали, чтобы Вы правильно выложили код. Вы не в состоянии этого сделать?

Или "из принципа"?

NikL
Offline
Зарегистрирован: 04.01.2021
#define FIRST_Sensor A0
#define SECOND_Sensor A1

int buttonState = 0;
int buttonState1 = 0;
int a = false;

void setup()
{
pinMode(9, OUTPUT);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
Serial.begin(9600);
}
void loop(){
buttonState = digitalRead(FIRST_Sensor);
if (buttonState == HIGH) {
a = true;
Serial.println("FIRST_Sensor=True");
}
buttonState1 = digitalRead(SECOND_Sensor);
if (buttonState1 == HIGH & a == true); {
digitalWrite(9, HIGH);
Serial.println("SECOND_Sensor=True");
}
}
Dumper
Offline
Зарегистрирован: 21.09.2020

Вы не задали начальное значение ваших инпутов, как минимум. Оператор И разве так пишется?)

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Ваша проблема - строка 22. Во-первых, оператор И, как вам выше заметили, пишется не так, а во-вторых точка с запятой означает конец оператора, т.е. строки 23 и 24 у вас выполняются в любом случае вне зависимости от условия в строке 22. Поэтому светодиод включается сразу сам.

Далее, переменные в строках 3-5 лучше объявить bool, а не int.

Далее, переменная a до первого нажатия на первую кнопку просто дублирует переменную buttonState, далее постоянно остается в значении true. Не знаю, зачем вы ее ввели, но в строке 22 для сравнения лучше использовать именно buttonState, если вам действительно нужно, чтобы светодиод загорался именно при одновременном нажатии кнопок. В текущем варианте он будет загораться и при поочередном нажатии - нажали и отпустили первую кнопку, не нажимая первую нажали вторую кнопку, светодиод загорелся.

NikL
Offline
Зарегистрирован: 04.01.2021

Спасибо! Проблема решена!