Схема приведена в том же посте, не буду её повторять. Как видим, на пин заводится напряжение с делителя. В верхнем плече делителя резисторы всех нажатых кнопок, соединённые параллельно, а в нижнем – pull-down резистор.
Чтобы не пересчитывать потом в попугаи, положим, что напряжение питания равно 1024 вольта, тогда по этой формуле получим сразу готовые попугаи.
Ну, вот я загнал в Excel эту формулу и посчитал для всех 15 комбинаций нажатых кнопок (предпоследний столбец – сопротивление параллельных “кнопочных резисторов”, а последний – собственно попугаи).
Pull-down
R1
R2
R3
R4
Rupper
Попугаи
10
11
11,00
488
10
18
18,00
366
10
11
18
6,83
609
10
36
36,00
223
10
11
36
8,43
556
10
18
36
12,00
465
10
11
18
36
5,74
651
10
68
68,00
131
10
11
68
9,47
526
10
18
68
14,23
423
10
11
18
68
6,20
632
10
36
68
23,54
305
10
11
36
68
7,50
585
10
18
36
68
10,20
507
10
11
18
36
68
5,29
670
Всё, как видите, совпало. А у Вас какая строка не совпала? Как считали?
Вот поэтому и не нужно считать на бумажке, когда рядом стоит компьютер, а у тебя есть какие-никакие навыки программирования.
Кстати, без “стягивающего” резистора там везде должно получаться 5 В, не насторожило?
Ещё вопросик. Пишем const uint16_t _sensor, а не uint16_t _sensor потому что в этой функции данная переменная более изменяться не будет?
Это как - то влияет на “быстродействие” и т.п. или так грамотнее?
Чаще не влияет, но бывают ситуации, когда это позволяет оптимизатору улучшить код или сэкономить память. Хуже от этого точно не будет, а развязать руки оптимизатору - всегда полезно.
Ну и это страховка от непредумышленного (на уровне описки) изменения.
if (UP.get() && DOWN.get()) {
DEBUGS.print("UP-DOWN ");
DEBUGS.print(millis());
DEBUGS.println("");
}
Я получаю результат каждые 5000 мс.
Проверяю в протеусе, обе кнопки нажаты, в монитор порта получаю UP-DOWN каждые 5000 мс.
Задача проверить если кнопка 00 удерживается не менее 500 мс и кнопка 01 удерживается не менее 500 мс - выполнить действие.
Ну, всё правильно. У Вас такая логика. Прошло 500мс - фиксируем нажата. Если Вам нужно, чтобы нажатие фиксировалось только один раз сколько ни держи, то надо вводить флажок “фиксировать нажатие” Изначально он true, когда зафиксировано - становится false, а когда кнопка отпущена - становится снова true. И фиксировать нажатие только когда он true.
От технологии изготовления конденсатора зависит. Проще говоря паразитное сопротивление таких конденсаторов выше. (ESR) При наличии прибора ESR, надо выбирать его пониже.