Нужна помощь для вывода на на семи сегментные индикаторы.
- Войдите на сайт для отправки комментариев
Чт, 15/03/2018 - 21:49
Имееется экран из пяти семисигментных индикаторов (восьмёрки с точкой) и пять сдвиговых регистра 74HC595. На один сегмент получаетс я отправить нужные значения, но на пять уже получается хаос.
Знаний не хватает что бы сделать хотя бы рабочий таймер на этих пяти сегментах. Прошу помощи!
Код, схема - тайна?
Ну и в чем проблема. Создайте буфер из 5 байт. И выводите сразу 5 байт сразу по функции show();
/**/ const byte latchPin = 8; const byte clockPin = 12; const byte dataPin = 11; byte buffer[5]; void show() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, buffer[0]); shiftOut(dataPin, clockPin, MSBFIRST, buffer[1]); shiftOut(dataPin, clockPin, MSBFIRST, buffer[2]); shiftOut(dataPin, clockPin, MSBFIRST, buffer[3]); shiftOut(dataPin, clockPin, MSBFIRST, buffer[4]); digitalWrite(latchPin, HIGH); } void print(byte pos, byte c) { buffer[pos] = c; } void clear() { for (int i = 0 ; i < 5; ++i) buffer[i] = 0; } //--------------------------- void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); clear(); show(); } void loop() { } /*Скетч использует 892 байт (2%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 14 байт (0%) динамической памяти, оставляя 2034 байт для локальных переменных. Максимум: 2048 байт. */Где цикл, Квон, где честный Си? Что ты делаешь с заветами Страуструппа!
извините честный Си не знаю. Видно Гугл забанил эту версию. И так если нужен класс. Но скетч еще пилить и пилить. Не проверял
/**/ #include <Print.h> class Cl_GFX : public Print { protected: const byte latchPin; const byte clockPin; const byte dataPin; static const byte maxBuf = 5; char buffer[maxBuf]; byte pos; virtual size_t write(uint8_t c) { if (c = '\n') pos = 0; else { if (pos < maxBuf) /* сюда надо подключть знакогенератор*/ buffer[pos++] = c; } return 1; } public: /*конструктор*/ Cl_GFX(byte l, byte c, byte d): latchPin(l), clockPin(c), dataPin(d) {} void init() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); clear(); show(); } void clear() { for (int i = 0 ; i < 5; ++i) buffer[i] = 0; pos = 0; } void show() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, buffer[0]); shiftOut(dataPin, clockPin, MSBFIRST, buffer[1]); shiftOut(dataPin, clockPin, MSBFIRST, buffer[2]); shiftOut(dataPin, clockPin, MSBFIRST, buffer[3]); shiftOut(dataPin, clockPin, MSBFIRST, buffer[4]); digitalWrite(latchPin, HIGH); } }; //------------------------------------------------ Cl_GFX GFX(/*latch*/8,/*clock*/12,/*data*/11); //--------------------------- void setup() { GFX.init(); GFX.print(123); GFX.show(); } void loop() { } /*Скетч использует 1406 байт (4%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 30 байт (1%) динамической памяти, оставляя 2018 байт для локальных переменных. Максимум: 2048 байт. */