Всем привет Написал код: Код (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....). Я уже весь монтаж проверил, все прозвонил, кнопки эти поменял и порты тоже менял.. Замерял напряжение между контактами кнопки, при нажатии на одну, напряжение на второй также проседает до нуля, хотя я прозвонил, кз между пинами нет. В чем может быть ошибка?
У Вас 12 элементов массива (от 0 до 11). При этом у Вас в сериал выдается 12. Не смущает? Правильней будет i++ : Код (C++): for (int i = 0; i < 12; ++i) У Вас нет обработки дребезга контактов кнопок. Есть много разных вариантов. Один из вариантов выкладывал здесь. Там и пример есть.
Хотя проверил, для данного примера не принципиально. Но не понимаю, откуда у Вас берется 12 в сериал? Что-то тут не так, или код не тот, или 12 не должно быть. И как то не стыкуется: и Serial.println Код (C++): Serial.println(i);
Не 12, кнопки номер 1 и номер 2 глючат Он почему-то выдаёт в сериал ОдинДваОдинДва Будто я их жму одновременно И если я жму на кнопку 1 (или 2), то загораются оба светодиода (один и два)
Я не могу понять, почему напряжение на кнопке проседает при нажатии второй Это не может быть связано со внутреннеми пулапами?
AN-Misha, вы уверены, что у вас в ардуине именно этот код? Вам SergeiL уже указал на то, что у вас в сериал номер нажатой кнопки должен выводится по одному на строку, а не как у вас - 12121212 Кроме того, в приведенном коде вы не гасите светодиоды - они у вас должны загораться после первого нажатия и потом гореть постоянно...
1212 выводится в столбик 1 2 1 2 Надо было заскринить, простите, что сразу не сказал Вот схема. Пин кнопки при нажатии замыкается на землю, pull-up встроенные. Светодиоды встроены в кнопки, земля общая у всех кнопок и светодиодов. Между пинами глючащих кнопок кз нет, проверял
Попробуй отключить встроенные светодиоды (оба провода), есть подозрение что при зажигании светодиода в кнопке уровня оставшегося после светодиода напряжения хватает для срабатывания соседнего пина.
Для понимания вопроса нужна схема. Уже бы давно было бы понятно. Так приходится гадать. Нужно завать вопросы. Например: какие токоограничивающие резисторы используются последовательно светодиодам?
Короче Я сыграл в лотерею, судя по всему (заменил кнопку на дохлую) Ещё раз заменил кнопку на новую и поменял порты, теперь все работает Хотя я все равно не могу понять, как, с точки зрения физики, эта кнопка влияла на соседнюю