цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Экономим выводы Arduino: управляем большим количеством линий без Чарлиплексирования



Экономим выводы Arduino: управляем большим количеством линий без Чарлиплексирования

Автор: Mike(admin) от 19-08-2024, 03:55

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


Экономим выводы Arduino: управляем большим количеством линий без Чарлиплексирования

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


Экономим выводы Arduino: управляем большим количеством линий без Чарлиплексирования

Как подключить этот макет, содержащий семь кнопок и семь светодиодов? Взгляните на цветные кружки на рисунке выше. Отверстия, отмеченные желтым, подходят к контактам для управления каждым каналом, в нашем случае от вывода 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: управляем большим количеством линий без Чарлиплексирования

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




© digitrode.ru


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий