Иногда вам нужно управлять одинаковым количеством светодиодов и кнопок, и, возможно, у вас не хватает выводов. Вы можете подумать о Чарлиплексировании, но это немного усложняет проводку и программное обеспечение.

Мы представим способ использовать столько же выводов, сколько у вас кнопок/светодиодов, плюс два дополнительных контакта. Таким образом, вы можете уменьшить количество выводов (контактов) с N x 2 до N + 2. Это можно сделать, установив обработчик прерываний (ISR), который постоянно переключается между светодиодами и кнопками.

Как подключить этот макет, содержащий семь кнопок и семь светодиодов? Взгляните на цветные кружки на рисунке выше. Отверстия, отмеченные желтым, подходят к контактам для управления каждым каналом, в нашем случае от вывода 3 до вывода 9. Отверстие, отмеченное красным рядом с резистором сопротивлением 47 Ом, идет к контакту 10, который временно будет установлен на Vcc. Отверстие, отмеченное синим цветом, идет к контакту 2, который временно будет установлен на GND. Хитрость заключается в том, чтобы установить pinMode для plusPin и minusPin на INPUT или OUTPUT перед использованием этих контактов. Код, показанный ниже, показывает пример игры с использованием Arduino UNO, где 7 кнопок управляют 7 светодиодами, и цель состоит в том, чтобы перевести все светодиоды во включенное состояние. Используя все 20 контактов Arduino UNO, вы могли управлять 18 кнопками и 18 светодиодами.
const byte minusPin = 2;
const byte thePins[] = {3, 4, 5, 6, 7, 8, 9};
const byte plusPin = 10;
const byte sop = sizeof thePins;
boolean ledState[sop];
int cnt = 0;
int btn = -1;
void setup() {
Serial.begin(9600);
digitalWrite(minusPin, LOW);
TCCR2A = 0;
TCCR2B = 4;
TIMSK2 = 1;
rnd16();
newGame();
}
void loop() {
if (btn < 0) return;
Serial.println(btn);
Будьте осторожны: если вы хотите запустить этот скетч с использованием нового Arduino UNO R4, вам необходимо изменить как минимум эти три вещи:
- заменить ISR процедурой таймера (просто)
- найти другой способ инициализировать случайный seed (без понятия как)
- увеличить резистор, управляющий светодиодами (470 Ом вместо 47 Ом)

Вот так без Чарлиплексирования можно управлять большим количеством выводов на Arduino.
© digitrode.ru