Нужна помощь с if
- Войдите на сайт для отправки комментариев
Сб, 17/03/2018 - 20:07
Вот блок кода:
butt_led1 = !digitalRead(6); butt_led2 = !digitalRead(7); butt_led3 = !digitalRead(8); Serial.println(i); //// if(butt_led1 == 1 && butt_led1_flag == 0) { i++; butt_led1_flag = 1; } if(butt_led2 == 1 && butt_led2_flag == 0) { i++; butt_led2_flag = 1; } if(butt_led3 == 1 && butt_led3_flag == 0) { i++; butt_led3_flag = 1; } //// if(butt_led1 == 1 && butt_led1_flag == 1) { i--; butt_led1_flag = 0; }
На данный момент задача кода выводить значение переменной i (которые варьюруются от 0 до 3) в ком-порт.
Почему-то не опрашивается butt_led1, хотя все флажки изначально равны 0. Помогите найти ошибку.
Если убрать последний if, то все работает, и значения i увеличиваются. Но мне нужно их и уменьшать.
анекдот. Дед учит внучка жизни.
-Запомни ,внучек, штаны нужно одевать после того как вытер жопу бумагой, а не наоборот.
04
Serial
.println(i);
Почему у вас вывод стоит перед if.
Код нужен полностью. Не 1000+ строк, конечно, а короткий код в котором чётко проявляется проблема. Так, чтобы этот код можно было запустить и посмотреть.
По нынешнему огрызку сказать ничего нельзя, т.к. ХЗ как описаны переменные и ХЗ когда и как это выполняется.
Код нужен полностью. Не 1000+ строк, конечно, а короткий код в котором чётко проявляется проблема. Так, чтобы этот код можно было запустить и посмотреть.
По нынешнему огрызку сказать ничего нельзя, т.к. ХЗ как описаны переменные и ХЗ когда и как это выполняется.
Код целиком.
Так в строках 45-49 отменяется все, что было сделано в строках 29-33.
Так условия у Вас так рулят... Сперва Вы тут
Нарастили i и выставили флаг butt_led1_flag в 1, что разрешает выполниться
и уменьшить i
Т.е. при нажатии butt_led1 переменная i "топчется на месте"
Смотрите. В строке 25 Вы читаете состояние кнопки. Допустим Ваш butt_led1 стала равной единице. Условие в строке 29 выполнится. i увеличится, флаг взведётся. Дальше пока не интересно до строки 45. Условие выполнится. Соответственно, i уменьшится, флаг, сбросится. Дальше печатается i, которая один раз увеличилась на 1 и один раз уменьшилась на 1, т.е. не изменилась. Уж невелик "алгоритм", можно пальцем по строчкам "отладить". Всё работает, как запрограммировано, а уж чего Вы хотели - другой вопрос.
Вообще изначально задумывалось так - нажал кнопку: значение i стало 1, нажал еще раз - 2, еще - 3, еще нажатие и сброс на 1.
Но пока что такими знаниями не обладаю. Думал, что нужен цикл for, но не знаю, как именно выставить условия.
Остановился на трех кнопках - нажат butt_led1 - горит первый светодиод и тд.
Если говорить об этом коде, как переписать не добавляя куча флажков ?
а хотелось так:
нажал 1 раз загорелся один led, нажал 2-ой добавился второй led и т.д. После 3-го погасли все или стали тухнуть по одному?
или так:
нажал 1 раз загорелся первый led, нажал 2-ой загорелся второй led, а первый погас и т.д.?
а хотелось так:
нажал 1 раз загорелся один led, нажал 2-ой добавился второй led и т.д. После 3-го погасли все или стали тухнуть по одному?
или так:
нажал 1 раз загорелся первый led, нажал 2-ой загорелся второй led, а первый погас и т.д.?
сначала хотел отработать нажатия кнопок используя значения переменной для наглядности, но на практике задумывался второй вариант.
Так в первом условии, где наращиваете счётчик, проверяйте, равен ли он 3-м и тогда присваивайте ему значение 1, вместо наращивания. Вроде, никаких знаний и не надо. ))
Так в первом условии, где наращиваете счётчик, проверяйте, равен ли он 3-м и тогда присваивайте ему значение 1, вместо наращивания. Вроде, никаких знаний и не надо. ))
после Вашего комментария меня почему-то осенило, и я заменил бесконечные if этим кодом:
Бармен, мне два стакана того же самого....
Бармен, мне два стакана того же самого....
Лучше не привыкайте к этой гадости!