| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Ардуино. Изменение значения переменной при нажатии кнопки. https://radiokot.ru/forum/viewtopic.php?f=57&t=196497 |
Страница 1 из 1 |
| Автор: | vem566 [ Ср янв 22, 2025 19:14:48 ] |
| Заголовок сообщения: | Re: Ардуино. Изменение значения переменной при нажатии кнопк |
А сбрасывать значение program кто будет? |
|
| Автор: | OKF [ Ср янв 22, 2025 19:31:13 ] |
| Заголовок сообщения: | Re: Ардуино. Изменение значения переменной при нажатии кнопк |
Если оформишь как положено (в текстовом виде, отступы, табуляция, пробелы), тогда можно и говорить дальше. |
|
| Автор: | Ivanoff-iv [ Чт янв 23, 2025 08:01:20 ] |
| Заголовок сообщения: | Re: Ардуино. Изменение значения переменной при нажатии кнопк |
if (program=1) //посмотри на эту строчку внимательней |
|
| Автор: | CемиКОТдуктор [ Пт янв 31, 2025 11:54:53 ] |
| Заголовок сообщения: | Re: Ардуино. Изменение значения переменной при нажатии кнопк |
А сбрасывать значение program кто будет? Да, сбрасываться будет (уже сбрасывается) как положено! Получилась китайская гирлянда с 8 режимами. Выполнено было в таком варианте, дабы не отвлекаться пока на остальное. Если оформишь как положено (в текстовом виде, отступы, табуляция, пробелы), тогда можно и говорить дальше. Осталась привычка от предыдущей среды программирования. Всегда оформлял так и лепил друг на друга, чтобы не растягивать визуально объём. Замечание понял. if (program=1) //посмотри на эту строчку внимательней Да, в этом и была проблема. В проверке, как понял случайно, нужно указывать двойное равенство. "If что-то true = тому-то..." До Ардуино в программах работало всё с одним равенством. А false или != оформлялся в штатном режиме. Какой занудный Си, а ещё высокоуровневым представился |
|
| Автор: | v1ct0r [ Пт янв 31, 2025 12:27:56 ] |
| Заголовок сообщения: | Re: Ардуино. Изменение значения переменной при нажатии кнопк |
Задумка такая. Для начала при нажатии на кнопку менять значение переменной. А от переменной зависит, будет ли выполняться условие. из вашего описания практически ничего не понял возможно вам поможет этот скетч описание работы в комментарии к нему Код: [code] [code]
//!!!!!!!!!!!!!!!!!ВНИМАНИЕ!!!!!!!!!!!!!!! //Для проверки работы используется кнопка, подключенная к A0 и "-"питания платы //и светодиод на плате, который служит индикатором работы и в зависимости от варианта //реализации платы будет или зажигаться на 3 секунды или наоборот тухнуть, //как при подаче низкого уровня("-") на контакт A0 платы ардуино(кнопка нажата), //так и при снятии этого сигнала (кнопка отпускается). //Кнопка(контакт) подключает 0 вольт, на ненажатой кнопке присутствует //высокий уровень от встроенного "подтягивающего" резистора. //При использовании других пинов ввода/вывода подставлять //нужные обозначения только в строках #define !!!!!! //Если необходимо убрать дребезг контактов - раскоментировать строку "delay(50)". #define OUT_PIN 13 // номер вывода для вкл.исполнительного устройства равен 13 #define BUTTON1_PIN A0 // номер вывода для кнопки(сигнала) равен A0 boolean buttonState1; // состояние кнопки boolean buttonPrevState1; // предыдущее состояние кнопки boolean outState; // состояние выхода void setup() { pinMode(OUT_PIN, OUTPUT); //определяем вывод 13 (исполнит. устр-во) как выход pinMode(BUTTON1_PIN, INPUT_PULLUP);//определяем вывод A0(кнопка или сигнал) как вход digitalWrite(OUT_PIN, LOW); //устанавливаем выход в выключенное состояние buttonPrevState1 = HIGH; //исходное состояние кнопки выключена } void loop() { buttonState1 = digitalRead(BUTTON1_PIN); //запис.сост.кнопки в переменную buttonState // delay(50); //задержка на дребезг контактов if (buttonPrevState1 != buttonState1) // если состояние кнопки изменилось { outState = ! outState; // инверсия состояния выхода digitalWrite(OUT_PIN, outState); // включение выхода delay(3000); // на 3 секунды outState = ! outState; // инверсия состояния выхода digitalWrite(OUT_PIN, outState); //выключение выхода } buttonPrevState1 = buttonState1; // предыдущее состояние кнопки = текущему } |
|
| Автор: | Ivanoff-iv [ Пт янв 31, 2025 12:38:51 ] |
| Заголовок сообщения: | Re: Ардуино. Изменение значения переменной при нажатии кнопк |
"If что-то true = тому-то..." До Ардуино в программах работало всё с одним равенством. А false или != оформлялся в штатном режиме. Нифига не понял... Одно "=" - это присвоение, в С можно в условие присвоение или какую нибудь другую операцию вписать, например if(x--){...}; //будет проверять что х!=0, затем декрементировать его, а затем (не)выполнять тело ветвления. Есть рекомендация писать условие не (x==0) а (0==x), т.е константой вперёд, тогда, если равно забудешь - будет явная ошибка... но я ни разу не видел, чтоб этой рекомендации ктото следовал... |
|
| Автор: | Jack_A [ Пт янв 31, 2025 15:39:07 ] |
| Заголовок сообщения: | Re: Ардуино. Изменение значения переменной при нажатии кнопк |
Совершенно верно. Ни в одной из версий ( Arduino тут не при чём) Си в (if = ...) не выполняет сравнение - только присваивание. (Может, речь о других ЯП? Delphi, например?) Возможно, тут компилятор вообще выбрасывает сравнение - только присваивание и безусловный переход (интересно бы посмотреть листинг с кодом ). Ну вообще-то вменяемый компилятор в таком случае, как минимум, даёт warning: "Фигня тут у тебя, хлопче". А что иногда работало - так это случайное сочетание условий, потому что неправильно в принципе. |
|
| Автор: | BOB51 [ Пт янв 31, 2025 16:26:38 ] |
| Заголовок сообщения: | Re: Ардуино. Изменение значения переменной при нажатии кнопк |
Это ежли в IDE включена опция сообщения об ошибках. По умолчанию она отключена - лапками надо самому уровень подсказок об ошибках выставить. (файл -> настройки -> окошко "сообщения компилятора" выставить "ВСЕ") Да и в последних версиях (2.х.х) почему то встроенный оффлайн справочник по "референсу" удалили... Весьма неплохой справочник для начинающего был. Теперь его только при прямом доступе на сайте адуринки читать можно. (Или копию от старых версий IDE использовать). |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|



Уже часов 5 перебираю и ищу варианты, но ничего. Пожалуйста, помогите понять данный момент.