Нужна помощь для вывода на на семи сегментные индикаторы.

MorAlex
Offline
Зарегистрирован: 12.10.2015

Имееется экран из пяти семисигментных индикаторов (восьмёрки с точкой) и пять сдвиговых регистра 74HC595. На один сегмент получаетс я отправить нужные значения, но на пять уже получается хаос.

Знаний не хватает что бы сделать хотя бы рабочий таймер на этих пяти сегментах. Прошу помощи!

sadman41
Offline
Зарегистрирован: 19.10.2016

Код, схема - тайна? 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну и в чем проблема. Создайте буфер из 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 байт.
*/

sadman41
Offline
Зарегистрирован: 19.10.2016

Где цикл, Квон, где честный Си? Что ты делаешь с заветами Страуструппа!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

извините честный Си не знаю. Видно Гугл забанил эту версию. И так если нужен класс. Но скетч еще пилить и пилить. Не проверял

/**/
#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 байт.
*/