Один бесплатный значок. Нужно отобразить вывод для пользователя?
Я работаю с голубым бобом. У меня есть устройство, которое записывает данные на SD-карту при длительном нажатии кнопки и переключает то, что будет записано (из списка из 5 пунктов) при коротком нажатии кнопки.
Вывод, распечатанный как на SD-карту, так и на последовательный порт, выглядит следующим образом:
12:38, 7/15/15, subway
12:55, 7/15/15, subway
12:38, 7/15/15, bus
12:55, 7/15/15, rail
и т. д. По сути, это отметка времени, а затем значение из этого списка:
char* modes[]= {"walking", "subway", "bus", "railroad", "other"};
Это отлично работает. Но у компонента очень мало контактов:
- 5 SCK — подключен к SD-карте.
- 4 MISO — подключено к SD-карте.
- 3 MOSI — подключено к SD-карте.
- 2 SS — подключено к SD-карте.
- 1 – кнопка ввода, требуется долгое и короткое нажатие
- 0 --
- A1 SDA --- подключен к часам реального времени для отметки времени
- A0 SCL --- подключен к RTC (часам реального времени) для отметки времени.
У меня есть один бесплатный ЦИФРОВОЙ PIN-код. Мне нужно сообщить пользователю, что он выбрал. Это можно было бы сделать с помощью 5 светодиодов, которые загорались бы рядом с выбором пользователя, или, может быть, отображать текст? Это портативный предмет, поэтому сервопривод, указывающий на выбор пользователя, может оказаться слишком ненадежным.
Я провел небольшое исследование сдвиговых регистров. Кажется, им всем нужно минимум 3 цифровых контакта. Если бы я мог сделать это с помощью 2, я мог бы переделать кнопку...
Идеи?
@futurebird, 👍1
Обсуждение3 ответа
Лучший ответ:
С 7-сегментным дисплеем все в порядке, но на нем отображаются 4 цифры. Это не совсем 5 светодиодов. В любом случае на этой плате есть чип, и если вы собираетесь купить еще один чип, вы также можете приобрести Attiny и использовать его. Просто подключите последовательный вход (так же, как на 7-сегментной плате).
На Attiny имеется 8 контактов, 3 из которых будут зарезервированы: Vcc, Gnd, Reset. В результате у вас остается 5 для связи и 5 светодиодов. Итак, используйте один контакт для входящего последовательного порта или два контакта для SDA/SCL, а оставшиеся 3 контакта используйте для светодиодов. Вы можете использовать Charlieplexing, чтобы использовать 3 контакта для подсветки до 6 светодиодов.
Для интереса я составил пример на своем Uno (он по-прежнему использует только 3 контакта для подсветки 6 светодиодов).
На схеме установлены резисторы 3 x 100 Ом. Один полностью скрыт светодиодами (идет от среднего желтого провода к средним контактам светодиодов).
Код:
const byte X1 = bit (2); // D2 на Уно
const byte X2 = bit (3); // D3 на Уно
const byte X3 = bit (4); // D4 на Уно
const byte patterns [7] [2] = {
// ПОРТ ГДР
{ 0, 0, }, // все выключено
{ X1, X1 | X2 }, // LED1: X1 вкл., X2 выкл., X3 HiZ
{ X2, X1 | X2 }, // LED2: X1 выключен, X2 включен, X3 HiZ
{ X2, X2 | X3 }, // LED3: X2 вкл., X3 выкл., X1 HiZ
{ X3, X2 | X3 }, // LED4: X2 выключен, X3 включен, X1 HiZ
{ X1, X1 | X3 }, // LED5: X1 вкл., X3 выкл., X2 HiZ
{ X3, X1 | X3 }, // LED6: X3 вкл., X1 выкл., X2 HiZ
};
void setup ()
{
} // конец настройки
void loop ()
{
for (int i = 0; i < 7; i++)
{
DDRD = patterns [i] [1];
PORTD = patterns [i] [0];
delay (500);
} // конец цикла for
} // конец цикла
Код отображает каждый из 6 светодиодов (плюс все выключенные) поочередно. Для каждого из них он настраивает DDR (регистр направления данных) и PORT (выходной регистр) соответствующим образом для включения нужного светодиода.
Он работает отлично, за исключением того, что вам, возможно, придется экспериментально определить, какой светодиод какой.
Похоже, что у вас есть I²C на плате, вы могли бы использовать рюкзак с ЖК-дисплеем I²C, например, из выходных панелей, если у вас уже есть ЖК-дисплей, это означает, что вы можете использовать RTC и отображение на шине I²C и, возможно, многое другое.
Кажется, вы упомянули еще один вариант: светодиоды, вы все равно можете использовать шину I²C, использовать расширитель ввода-вывода, подключить к нему светодиоды и адресовать их через I²C. Вы можете использовать PCF8575 (16 входов/выходов), так как существуют библиотеки Arduino. Для этого есть прорывы. Или вы можете сделать свой собственный из другого AVR, например, из линейки ATTiny, там, кажется, 5 светодиодов.
Пример шины I²C:
(источник: ermicro.com)
Похоже, вы хотите использовать ШИМ, вы можете использовать микросхему драйвера точки/полосы, например LM3914 принимает аналоговое значение и отображает его в виде точки на полосе светодиодов, пример ниже:
ИС также может работать при напряжении до 3 В.
Вам нужно будет добавить фильтр нижних частот, чтобы преобразовать ШИМ в плавное аналоговое значение. . Вы добавите это вместо входной схемы (D1 и C1):
Если у вас возникли какие-либо затруднения с LM3914, в Google есть немало руководств.
l2C использует два контакта в дополнение к питанию и земле - оба упомянутых вами варианта требуют столько же контактов, сколько сдвиговый регистр. Возможно, мне просто придется перепроектировать...., @futurebird
Я отдаю вам должное за помощь, но, возможно, мой вопрос должен был быть более ясным., @futurebird
@futurebird I2C использует те же два контакта, что и вы, это шина? Вы можете использовать как RTC, так и опцию отображения вместе. Что в этом плохого?, @RSM
l2C использует два контакта в дополнение к питанию и земле
- вы используете одни и те же два контакта. Каждое устройство на шине I2C имеет свой адрес. Этот ответ был вполне осуществим., @Nick Gammon
Может ли он работать при 3,3 В? Компонент представляет собой устройство с напряжением 3,3 В, а проект питается от батареи (невозможно добавить источник питания)., @futurebird
@futurebird — Да, микросхема может работать от 0 до 3,3 В, [техническое описание](http://www.ti.com/lit/ds/symlink/pcf8575c.pdf), @RSM
Пиковый детектор оригинальной схемы '3914 может нормально работать в качестве ФНЧ., @Ignacio Vazquez-Abrams
@IgnacioVazquez-Abrams — ок, хорошая мысль, +1, продолжайте в том же духе, @RSM
Я нашел решение! Коммутационная панель с 7-сегментным дисплеем.
Это работает при напряжении 3,3 В, что критично для голубого боба. Я думаю, что сервопривод может быть самым креативным решением.
Я все еще убежден, что должен быть какой-то способ использовать ШИМ...
Похоже, что эта конкретная плата (может) использовать асинхронный последовательный порт, поэтому однопроводное решение (плюс питание и земля) будет использовать последовательный выход для управления ею., @Nick Gammon
Если вы собираетесь использовать эту плату, вы также можете использовать на ней MCU и сбросить компонент., @Ignacio Vazquez-Abrams
У компонента очень хороший BLE (Bluetooth). Я бы не хотел отказываться от этой функции., @futurebird
- Nextion Display не получает обновленных данных
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
- Запуск 7-контактного OLED-дисплея с 4 контактами (I2C)
- Не удалось выделить SSD1306 при добавлении константы
- Чтение текста с SD-карты возвращает странные символы
- Serial.print печатает, а lcd.print - нет.
- Подключение считывателя microSD и электронного бумажного дисплея к Nano одновременно?
- Проблема с SD-картой Arduino RTC
Вы рассматривали азбуку Морзе? ;), @Majenko
Используйте SPI для отправки данных в сдвиговый регистр (или несколько) для управления светодиодами или 7-сегментными дисплеями и т. д. Свободный вывод становится сигналом фиксации сдвиговых регистров. SPI — это шина, используйте ее как шину., @CrossRoads