Mega ложное срабатывание кнопки

Тема в разделе "Arduino & Shields", создана пользователем AN-Misha, 9 сен 2017.

  1. AN-Misha

    AN-Misha Нуб

    Всем привет
    Написал код:
    Код (C++):
    int buttons[12] = {31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53};
    int BUTLED[12]  = {22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44};

    void setup() {
      Serial.begin(9600);


      for (int i = 0; i < 12; ++i)
      {

        pinMode(buttons[i], INPUT_PULLUP);

        pinMode(BUTLED[i], OUTPUT);
        digitalWrite(BUTLED[i], LOW);
      }

    }


    void loop() {

      for (int i = 0; i < 12; ++i)
      {
        if (digitalRead(buttons[i]) == LOW) {
          digitalWrite(BUTLED[i], HIGH);
          Serial.println(i);
        }
      }
    }

    Код простой, 12 кнопок, 12 светодиодов. По нажатию кнопки зажигается соответствующий светодиод.

    И вот все вроде хорошо, но по нажатию второй или третьей кнопки ардуино думает, что я нажал их обе (зажигает их оба и отправляет в сериал 121212121212....).

    Я уже весь монтаж проверил, все прозвонил, кнопки эти поменял и порты тоже менял..
    Замерял напряжение между контактами кнопки, при нажатии на одну, напряжение на второй также проседает до нуля, хотя я прозвонил, кз между пинами нет.
    В чем может быть ошибка?
     
  2. AN-Misha

    AN-Misha Нуб

    Фото монтажа, хотя тут навес, сложно по фотке понять что-то
     

    Вложения:

    • image.jpg
      image.jpg
      Размер файла:
      1,1 МБ
      Просмотров:
      56
  3. Tomasina

    Tomasina Иномирянин

    Ошибка где-то в монтаже.
     
  4. SergeiL

    SergeiL Гик

    У Вас 12 элементов массива (от 0 до 11).
    При этом у Вас в сериал выдается 12. Не смущает?

    Правильней будет i++ :
    Код (C++):
     for (int i = 0; i < 12; ++i)
    У Вас нет обработки дребезга контактов кнопок.
    Есть много разных вариантов.
    Один из вариантов выкладывал здесь. Там и пример есть.
     
    Последнее редактирование: 9 сен 2017
  5. SergeiL

    SergeiL Гик

    Хотя проверил, для данного примера не принципиально.
    Но не понимаю, откуда у Вас берется 12 в сериал?
    Что-то тут не так, или код не тот, или 12 не должно быть.

    И как то не стыкуется:
    и Serial.println
    Код (C++):
     Serial.println(i);
     
    Последнее редактирование: 9 сен 2017
  6. AN-Misha

    AN-Misha Нуб

    Не 12, кнопки номер 1 и номер 2 глючат
    Он почему-то выдаёт в сериал
    ОдинДваОдинДва
    Будто я их жму одновременно
    И если я жму на кнопку 1 (или 2), то загораются оба светодиода (один и два)
     
  7. AN-Misha

    AN-Misha Нуб

    К тому же, остальные 10 кнопок работают без обработки дребезга, хотя тоже грешил на него
     
  8. AN-Misha

    AN-Misha Нуб

    Я не могу понять, почему напряжение на кнопке проседает при нажатии второй
    Это не может быть связано со внутреннеми пулапами?
     
  9. Tomasina

    Tomasina Иномирянин

    почему у тебя к каждой кнопке припаяны 3 провода?
    Нарисуй схему для двух-трех кнопок.
     
  10. b707

    b707 Гик

    AN-Misha, вы уверены, что у вас в ардуине именно этот код? Вам SergeiL уже указал на то, что у вас в сериал номер нажатой кнопки должен выводится по одному на строку, а не как у вас - 12121212
    Кроме того, в приведенном коде вы не гасите светодиоды - они у вас должны загораться после первого нажатия и потом гореть постоянно...
     
  11. b707

    b707 Гик

    общая земля скорее всего
     
  12. AN-Misha

    AN-Misha Нуб

    1212 выводится в столбик
    1
    2
    1
    2
    Надо было заскринить, простите, что сразу не сказал

    Вот схема. Пин кнопки при нажатии замыкается на землю, pull-up встроенные.
    Светодиоды встроены в кнопки, земля общая у всех кнопок и светодиодов. Между пинами глючащих кнопок кз нет, проверял
     

    Вложения:

    • image.jpg
      image.jpg
      Размер файла:
      1,1 МБ
      Просмотров:
      46
  13. Tomasina

    Tomasina Иномирянин

    Попробуй отключить встроенные светодиоды (оба провода), есть подозрение что при зажигании светодиода в кнопке уровня оставшегося после светодиода напряжения хватает для срабатывания соседнего пина.
     
  14. SergeiL

    SergeiL Гик

    Для понимания вопроса нужна схема. Уже бы давно было бы понятно.
    Так приходится гадать. Нужно завать вопросы.
    Например: какие токоограничивающие резисторы используются последовательно светодиодам?
     
  15. AN-Misha

    AN-Misha Нуб

    Схема
    Резисторы 470 Ом
     

    Вложения:

    • IMG_5050.JPG
      IMG_5050.JPG
      Размер файла:
      1 МБ
      Просмотров:
      35
  16. AN-Misha

    AN-Misha Нуб

    Результата не дало
     

    Вложения:

  17. AN-Misha

    AN-Misha Нуб

    Короче
    Я сыграл в лотерею, судя по всему (заменил кнопку на дохлую)
    Ещё раз заменил кнопку на новую и поменял порты, теперь все работает

    Хотя я все равно не могу понять, как, с точки зрения физики, эта кнопка влияла на соседнюю
     
  18. DetSimen

    DetSimen Гик

    оне по аське синхронизировались.
     
  19. Limoney

    Limoney Гик

    Обратите внимание не дребезг контактов кнопок, также влияет на точность считывания состояния кнопки.