Ардуинка живет своей жизнью.

Тема в разделе "Arduino & Shields", создана пользователем Olexias, 20 июн 2021.

  1. Olexias

    Olexias Нуб

    Код на картинке работает неправильно. При нажатии кнопки в консоли должна появиться надпись 1 раз. Но надпись бесконечно пишется. Помогите решить проблему. Я джун, не судите пжлст.
     

    Вложения:

    • хрень.png
      хрень.png
      Размер файла:
      7,6 КБ
      Просмотров:
      102
  2. NikitOS

    NikitOS Король шутов Администратор

    Код вставляется в текст сообщения.

    Между отправками нет проверок на то, было ли уже отправлено сообщения для текщего нажатия, поэтому сообщения будут отправляться постоянно, пока зажата кнопка. Решение — флаги. Как пример: Кнопочный переключатель.
     
    Olexias, Airbus и issaom нравится это.
  3. a1000

    a1000 Гуру

    Да и антидребезгом даже не пахнет.
     
  4. parovoZZ

    parovoZZ Гуру

    С чего бы вдруг??? Там же по-русски написано

     
  5. Olexias

    Olexias Нуб

    Ну, типо, ты нажимаешь, и появляется надпись.
     
  6. parovoZZ

    parovoZZ Гуру

    Ну да. А что-то не так?
     
  7. a1000

    a1000 Гуру

    Дело в том, что конструкция
    Код (C++):
    void loop()
    {
      // put your main code here, to run repeatedly:

    }
    есть бесконечный цикл. Он выполняется постоянно и непркрывно. Как только микроконтроллер дойдёт до нижней фигурной скобки }, он перейдёт к верхней { и начнётся всё с начала. При рабочей частоте в 16 МГц, в вашем случае, будет выполняться несколько тысяч раз в секунду. Даже при самом кратком нажатии на кнопку он успеет прокрутиться много-много раз. И каждый раз он будет проверять нажатие кнопки, обнаруживать её и слать в serial ваше сообщение.
    Это очень, очень кратко. А что-бы в этом разобраться надо учить теорию.
     
    NikitOS нравится это.
  8. fogary

    fogary Гик

    Код (C++):
    pinMode(A0, INPUT_PULLUP);
    ...
    boolean button = degitalRead(A);
    if(button == 1) {...}
    Подозреваю, что с такими настройками состояние нажатой кнопки должно быть равно "0", а не "1".
     
    KindMan нравится это.
  9. a1000

    a1000 Гуру

    Хотелось --бы увидеть как там вообще кнопка подключена. Сюрпризы и там могут быть :):)
     
    Ariadna-on-Line нравится это.
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Входы А0-А5 ценны свойствами аналогового входа. Нафига на них вешать примитивные кнопки ? Для этого есть тупые цифровые пины.
    2. Если там INPUT_PULLUP - значит состояние не нажатой кнопки ==1, тк подключен внутренний резистор подтяжки входа к плюсу питания. Соответственно кнопка должна притягивать в ноль и код надо переделать под ноль. Дребезг кнопки обычно не больше 50 миллисекунд. После первого обнаруженного нуля засекаем время. Через 50 мсек - снова читаем. Если ноль сохраняется - выставляем флаг "обнаружено нажатие".
     
    Последнее редактирование: 21 июн 2021
  11. parovoZZ

    parovoZZ Гуру

    в атиньке каждый вход - аналоговый. Теперь что - вообще дискретные сигналы никуда не подавать? А если в схеме аналоговых сигналов вообще нет?

    у самой разбитой кнопки - не дольше 20.
     
    issaom нравится это.
  12. Airbus

    Airbus Радиохулиган Модератор

    Больше Дела-меньше слов!
    Код (Text):

    bool state = true; //флаг взведен
    void setup()
    {
      pinMode(A0, INPUT); //A0 это вход!
      Serial.begin(9600);
    }

    void loop()
    {
      if (digitalRead(PIR)&&(state)) { // если включился датчик и флаг взведен
      Serial.println("Goodnight moon!"); //пишем письма
      state=false;                // Сбросим флаг шоб никогда более
      }
    }
     
  13. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Система должна флаг снова взвести чтобы очередное нажатие отследить. Надо задержку делать, чтоб понять - кнопку отпустили или это всё еще дребезг жужжит. А то по вашему коду получится - посмотрел на Луну и "помер".
    Не все АТмеловские процессоры - АТтини >)))
     
    Последнее редактирование: 22 июн 2021
  14. Airbus

    Airbus Радиохулиган Модератор

    Согласен не по фен шую антидребезг, Гайвер Батон, и другие рок Звёзды. Задача была другая показать ТС-Как? Дальше пусть сам умные книшки читает. Это один из способов-в лоб. Есть ещё 100500. Хотя у меня работает и так на Эхо-репитере без антидребезгов кусок кода оттуда выдран.
     
    Ariadna-on-Line нравится это.
  15. b707

    b707 Гуру

    Вот вы разошлись-то
    ТС только от одной новости, что LOOP это цикл - уже в осадок выпал и в ветке не появляется. а вы ему дребезг принялись обьяснять :)
     
    Ariadna-on-Line и Airbus нравится это.
  16. Airbus

    Airbus Радиохулиган Модератор

    Лето. Жара