Ардуино. Изменение значения переменной при нажатии кнопки.

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
CемиКОТдуктор
Родился
Сообщения: 13
Зарегистрирован: Сб дек 14, 2024 15:07:38

Ардуино. Изменение значения переменной при нажатии кнопки.

Сообщение CемиКОТдуктор »

Не так давно заинтересовался Ардуино, как подспорье новичку познакомиться с МК, тем более на высокоуровневом языке. Всем привет, кстати! Делал различные программы, даже игры, в основном в среде разработки GML. Могу малость программить. Понял, как зажечь светодиод, помигать, запрограммил ШИМ. Да вот не всё так просто оказалось с СИ, как говорилось.
Задумка такая. Для начала при нажатии на кнопку менять значение переменной. А от переменной зависит, будет ли выполняться условие.
Ко(Т)д:
Изображение
Если просто проверять уровень кнопки, всё работает. Но если выполнять условие при значении переменной, программа исполняется без нажатия кнопки, как будто переменная program всегда равна 1. Логики совсем нет :dont_know: Уже часов 5 перебираю и ищу варианты, но ничего. Пожалуйста, помогите понять данный момент.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Ардуино. Изменение значения переменной при нажатии кнопк

Сообщение vem566 »

А сбрасывать значение program кто будет?
OKF
Это не хвост, это антенна
Сообщения: 1382
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Ардуино. Изменение значения переменной при нажатии кнопк

Сообщение OKF »

Если оформишь как положено (в текстовом виде, отступы, табуляция, пробелы), тогда можно и говорить дальше.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Ардуино. Изменение значения переменной при нажатии кнопк

Сообщение Ivanoff-iv »

if (program=1) //посмотри на эту строчку внимательней
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
CемиКОТдуктор
Родился
Сообщения: 13
Зарегистрирован: Сб дек 14, 2024 15:07:38

Re: Ардуино. Изменение значения переменной при нажатии кнопк

Сообщение CемиКОТдуктор »

[uquote="vem566",url="/forum/viewtopic.php?p=4674359#p4674359"]А сбрасывать значение program кто будет?[/uquote]
Да, сбрасываться будет (уже сбрасывается) как положено! Получилась китайская гирлянда с 8 режимами. Выполнено было в таком варианте, дабы не отвлекаться пока на остальное.
[uquote="OKF",url="/forum/viewtopic.php?p=4674368#p4674368"]Если оформишь как положено (в текстовом виде, отступы, табуляция, пробелы), тогда можно и говорить дальше.[/uquote]
Осталась привычка от предыдущей среды программирования. Всегда оформлял так и лепил друг на друга, чтобы не растягивать визуально объём. Замечание понял.
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4674549#p4674549"]if (program=1) //посмотри на эту строчку внимательней[/uquote]
Да, в этом и была проблема. В проверке, как понял случайно, нужно указывать двойное равенство. "If что-то true = тому-то..." До Ардуино в программах работало всё с одним равенством. А false или != оформлялся в штатном режиме. Какой занудный Си, а ещё высокоуровневым представился :))
Аватара пользователя
v1ct0r
Нашел транзистор. Понюхал.
Сообщения: 189
Зарегистрирован: Вс мар 18, 2018 22:12:38

Re: Ардуино. Изменение значения переменной при нажатии кнопк

Сообщение v1ct0r »

[uquote="CемиКОТдуктор",url="/forum/viewtopic.php?p=4674357#p4674357"]Задумка такая. Для начала при нажатии на кнопку менять значение переменной. А от переменной зависит, будет ли выполняться условие.[/uquote]
из вашего описания практически ничего не понял
возможно вам поможет этот скетч
описание работы в комментарии к нему

Код: Выделить всё

 [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
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Ардуино. Изменение значения переменной при нажатии кнопк

Сообщение Ivanoff-iv »

[uquote="CемиКОТдуктор",url="/forum/viewtopic.php?p=4677594#p4677594"]"If что-то true = тому-то..." До Ардуино в программах работало всё с одним равенством. А false или != оформлялся в штатном режиме.[/uquote]Нифига не понял... :dont_know:

Одно "=" - это присвоение, в С можно в условие присвоение или какую нибудь другую операцию вписать, например if(x--){...}; //будет проверять что х!=0, затем декрементировать его, а затем (не)выполнять тело ветвления.

Есть рекомендация писать условие не (x==0) а (0==x), т.е константой вперёд, тогда, если равно забудешь - будет явная ошибка... но я ни разу не видел, чтоб этой рекомендации ктото следовал...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ардуино. Изменение значения переменной при нажатии кнопк

Сообщение Jack_A »

Совершенно верно. Ни в одной из версий ( Arduino тут не при чём) Си в (if = ...) не выполняет сравнение - только присваивание. (Может, речь о других ЯП? Delphi, например?) Возможно, тут компилятор вообще выбрасывает сравнение - только присваивание и безусловный переход (интересно бы посмотреть листинг с кодом ). Ну вообще-то вменяемый компилятор в таком случае, как минимум, даёт warning: "Фигня тут у тебя, хлопче".
А что иногда работало - так это случайное сочетание условий, потому что неправильно в принципе.
Изображение
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15540
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ардуино. Изменение значения переменной при нажатии кнопк

Сообщение BOB51 »

Это ежли в IDE включена опция сообщения об ошибках.
По умолчанию она отключена - лапками надо самому уровень подсказок об ошибках выставить.
(файл -> настройки -> окошко "сообщения компилятора" выставить "ВСЕ")
8)
Да и в последних версиях (2.х.х) почему то встроенный оффлайн справочник по "референсу" удалили...
Весьма неплохой справочник для начинающего был.
Теперь его только при прямом доступе на сайте адуринки читать можно. (Или копию от старых версий IDE использовать).
:(
Ответить

Вернуться в «AVR»