Оператор For
- Войдите на сайт для отправки комментариев
Ср, 29/06/2022 - 22:18
Оператор For после прохождения автоматически выполняет действия во втором if. Причем даже если во втором if условие выполнено For его игнорирует. В чем может быть проблема.
void Open(){ for (int h=1; h<10; h++){ if (Password == "BULKA"){ Clear_display(); ResetDisplay = false; pos = 45; myservo.write(pos); display.setCursor(3,1); display.setTextColor(WHITE); display.setTextSize(2); display.println("Push Enter for close"); display.display(); delay(1000); if(Key_read>870 and Key_read<890){ ResetDisplay = true; display.clearDisplay(); pos = 90; myservo.write(pos); delay(100); //resetFunc(); display.println("Kot"); } } } }
в том, что ты не читаешь, что сам написал, может быть?
Key_read>870 and Key_read<890
И что тут не так?
Откуда в С++ оператор and?
причем тут оператор For?
что, если заменить for на while - условие перестанет выполняться?
Откуда в С++ оператор and?
с
в Си нет, а в Ардуино - есть
причем тут оператор For?
что, если заменить for на while - условие перестанет выполняться?
Разве что-то поменяется?
причем тут оператор For?
что, если заменить for на while - условие перестанет выполняться?
Теперь вообще всё перестало работать)
в Си нет, а в Ардуино - есть
Есть и в Си, если включить iso646.h из стандартной библиотеки.
Разделительные скобки условий все равно желательно ставить. У меня была ситуация когда нужно было добавить скобки для корректной работы условия.
Serial.println(Key_read);
Я писал эту команду и монитор порта показывает Key_read больше чем значения в условии, т.е. оно не должно выполняться
начните со скобок.
И поменяйте and на && - хоть это и допустимо, лучше пользоваться традиционным синтаксисом Си
Ну вот, почему не выполняется, вы выяснили
Ну вот, почему не выполняется, вы выяснили
Так оно наоборот выполняется. Значение в условии от 870 до 890, а в мониторе порта показывает 1023, т.е. не должно выполняться условие
Тогда сделайте, как вам посоветовали в #12 сообщении. Похоже, что таки and в условии не работает
Тогда сделайте, как вам посоветовали в #12 сообщении. Похоже, что таки and в условии не работает
Ну вот я так и планирую когда доберусь до компьютера
А что это тут сегодня все добрые телепаты такие? Взялись какой-то огрызок кода обсуждать. Mysteriousapels, выкладывайте минимальный законченный скетч, в котором проявляется ошибка. Со вставленным выводом переменной условия в сериал. А то хз что там у Вас ещё происходит и где именно Вы её проверяете.
p.s. подобное условие вполне себе работает как есть - с and и без дополнительных скобок. Причина не в этом. Где-нибудь в логике проблема.
А что это тут сегодня все добрые телепаты такие? Взялись какой-то огрызок кода обсуждать.
и то верно...
А что это тут сегодня все добрые телепаты такие? Взялись какой-то огрызок кода обсуждать. Mysteriousapels, выкладывайте минимальный законченный скетч, в котором проявляется ошибка. Со вставленным выводом переменной условия в сериал. А то хз что там у Вас ещё происходит и где именно Вы её проверяете.
p.s. подобное условие вполне себе работает как есть - с and и без дополнительных скобок. Причина не в этом. Где-нибудь в логике проблема.
А что это тут сегодня все добрые телепаты такие? Взялись какой-то огрызок кода обсуждать. Mysteriousapels, выкладывайте минимальный законченный скетч, в котором проявляется ошибка. Со вставленным выводом переменной условия в сериал. А то хз что там у Вас ещё происходит и где именно Вы её проверяете.
p.s. подобное условие вполне себе работает как есть - с and и без дополнительных скобок. Причина не в этом. Где-нибудь в логике проблема.
Так в Serial как раз таки все нормально и значения, которые он показывает не попадают под условие. Открываю монитор порта, там значение 1023, if при этом все равно выполняется
Надо бы int h = 0; Или необязательно?
Здесь компилятор ругается, надо не 9, а 10
Вот ещё ошибка
Зачем 192 строка если есть 204?
Условие 137 строки выполняется всегда? А 158 строки тоже получается выполняется? Вообще не люблю работу с глобальными переменными в подпрограммах - лучше передавать в виде параметра. Или все-таки они выполняются при нажатии на какие-то определенные кнопки?
Схему похоже тоже не помешает.
Код - мечта мазохиста.
Надо бы int h = 0; Или необязательно?
смотря для чего :) Чтобы программа работала так, как задумал автор - стоило бы :) Но вообще необязательно, ни к чему фатальному в этом участке кода это приводить не должно.
Здесь компилятор ругается, надо не 9, а 10
Опять же в данном коде не имеет значения, буквы используются по отдельности, а не в составе строк.
Зачем 192 строка если есть 204?
Условие 137 строки выполняется всегда? А 158 строки тоже получается выполняется? Вообще не люблю работу с глобальными переменными в подпрограммах - лучше передавать в виде параметра. Или все-таки они выполняются при нажатии на какие-то определенные кнопки?
Схему похоже тоже не помешает.
Код - мечта мазохиста.
158 строка выполняется как надо. Я использую аналоговую клавиатуру из 5 кнопок, т.е. у каждой свое сопротивление.
Upd: 192 не знаю как попала)
Я чего-то непонятно видать объяснил. Сейчас Вы можете видеть значение переменной в конце loop, но где подтверждение что срабатывает условие?
Автор, Вы утверждаете, что у Вас какой-то конкретный if выполняется, хотя по Вашему мнению не должен. Так вот не где попало, а прямо первым оператором в блоке, который выполняется по условию, нужно вывести в сериал эту Вашу переменную условия. Из других мест печать убрать, чтобы не путаться!
Т.е. например, если речь идёт об условии в строке 137, то печатайте Key_read в сериал перед строкой 138. И убедитесь, что дважды два всё-таки четыре, а не пять, раз уж Вы в этом засомневались.
А по существу, Вы бы лучше обычными словами (без ссылок на код) описали что программа должна делать, и что делается не так, как Вы ожидаете.
Я чего-то непонятно видать объяснил. Сейчас Вы можете видеть значение переменной в конце loop, но где подтверждение что срабатывает условие?
Автор, Вы утверждаете, что у Вас какой-то конкретный if выполняется, хотя по Вашему мнению не должен. Так вот не где попало, а прямо первым оператором в блоке, который выполняется по условию, нужно вывести в сериал эту Вашу переменную условия. Из других мест печать убрать, чтобы не путаться!
Т.е. например, если речь идёт об условии в строке 137, то печатайте Key_read в сериал перед строкой 138. И убедитесь, что дважды два всё-таки четыре, а не пять, раз уж Вы в этом засомневались.
А по существу, Вы бы лучше обычными словами (без ссылок на код) описали что программа должна делать, и что делается не так, как Вы ожидаете.
Не умею я объяснять проблему, это правда. Программа по сути представляет из себя кодовый замок. На экран выводится буквы, с помощью аналоговой клавиатуры мы вводим пароль. Как только комбинация совпадает сервоприводы открывают затвор, на экран выводится сообщение "Нажать ввод для закрытия", после чего сервоприводы закрывают затвор и плата перезагружается в начало. То, что указано в условии соответствует значениям кнопки ввода на аналоговой клавиатуре.
Вы оказались правы, считывание аналогового входа останавливается после вызова функции Open(). Key_Read запоминала последнее значение, которое и было вводом. Спасибо за подсказку, на самом деле мой первый серьезный код, который я три месяца писал через интернет)
~2 строки в день ...
Программа по сути представляет из себя кодовый замок. На экран выводится буквы, с помощью аналоговой клавиатуры мы вводим пароль. Как только комбинация совпадает сервоприводы открывают затвор, на экран выводится сообщение "Нажать ввод для закрытия", после чего сервоприводы закрывают затвор и плата перезагружается в начало. То, что указано в условии соответствует значениям кнопки ввода на аналоговой клавиатуре. Вы оказались правы, считывание аналогового входа останавливается после вызова функции Open(). Key_Read запоминала последнее значение, которое и было вводом.
Кнопки видимо соответствуют стрелкам влево, вправо, вверх, вниз и ввод. Чтобы выбрать букву, нужно выделить её стрелками и нажать ввод. Видимо так?
А как планировалось проверять пароль? Принимать символы до первого неправильного и выдавать ошибку? Или принимать какое-то количество символов и после сверять введёное с паролем? Или ещё как?
Когда разберёмся, что хотели сделать, станет понятно что именно реализовано не так.
Программа по сути представляет из себя кодовый замок. На экран выводится буквы, с помощью аналоговой клавиатуры мы вводим пароль. Как только комбинация совпадает сервоприводы открывают затвор, на экран выводится сообщение "Нажать ввод для закрытия", после чего сервоприводы закрывают затвор и плата перезагружается в начало. То, что указано в условии соответствует значениям кнопки ввода на аналоговой клавиатуре. Вы оказались правы, считывание аналогового входа останавливается после вызова функции Open(). Key_Read запоминала последнее значение, которое и было вводом.
Кнопки видимо соответствуют стрелкам влево, вправо, вверх, вниз и ввод. Чтобы выбрать букву, нужно выделить её стрелками и нажать ввод. Видимо так?
А как планировалось проверять пароль? Принимать символы до первого неправильного и выдавать ошибку? Или принимать какое-то количество символов и после сверять введёное с паролем? Или ещё как?
Когда разберёмся, что хотели сделать, станет понятно что именно реализовано не так.
Да, кнопками выбираются буквы. Проверка пароля путем сравнения, но это уже потом, если руки дойдут. Самое главное сделано.