Wolf_Yout
@Wolf_Yout

Не работаю часы в виде бегущей строки, что делать?

Код:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <microDS3231.h>
int pinCS = 9;
int numberOfHorizontalDisplays = 4; // теперь у нас по-горизонтали 6 матриц
int numberOfVerticalDisplays = 1; // а по-вертикали, по-прежнему, одна
unsigned long last = 0;
MicroDS3231 rtc;

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
 
  k = source.length(); i = 0;
 
  while (i < k) {
    n = source[i]; i++;
 
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}
//String h = rtc.getHours();
//String m = rtc.getMinutes();

String tape = rtc.getTimeString(); // текст, который будет плыть
int wait = 50; // время между крайними перемещениями букв

int spacer = 1; // расстояние между буквами
int width = 5 + spacer; // размер шрифта

void setup() {
    matrix.setIntensity(7); // яркость
    matrix.setRotation(0, 1);
    matrix.setRotation(1, 1);
    matrix.setRotation(2, 1);
    matrix.setRotation(3, 1);
}

void loop() {
//    if (Serial.available()) {                  // получили данные
//      tape = utf8rus(Serial_Read());           // Считываем и сохроняе в переменную
//    }
    for ( int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++ ) {
        matrix.fillScreen(LOW);

        int letter = i / width;
        int x = (matrix.width() - 1) - i % width;
        int y = (matrix.height() - 8) / 2; // center the text vertically

        while ( x + width - spacer >= 0 && letter >= 0 ) {
            if ( letter < tape.length() ) {
                matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
            }
            letter--;
            x -= width;
        }

        matrix.write();
        delay(wait);
    }
    /*int h = rtc.getHours();
    int m = rtc.getMinutes();
    matrix.fillScreen(LOW;
    matrix.drawChar(1, 1, "1", HIGH, LOW, 1);
    matrix.drawChar(9, 1, "9", HIGH, LOW, 1);
    matrix.drawChar(17, 1, "2", HIGH, LOW, 1);
    matrix.drawChar(25, 1, "0", HIGH, LOW, 1);
    matrix.write();*/
} 
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */

Матрица просто зависла, ничего не происходит
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 3
@kalapanga
Использовать вывод отладочной информации в монитор порта. Проверяйте всё - значения всех переменных, попадание в те или иные блоки условий. Сразу же и увидите, что не так. Может какое-то условие не выполняется и вообще ничего не рисуется, а может рисуется, но в каких-нибудь запредельных координатах.
А сейчас Вы предлагаете кому-нибудь вместо ардуины всё это в уме посчитать. :)
p.s. А чтобы не потонуть в информации, на время отладки поставьте в конце loop заметную задержку.
Ответ написан
Комментировать
@evgeniy_lm
Странный вопрос. Разумеется искать ошибку. Проверьте вашу схему и работоспособность каждого элемента персонально. Потом используя монитор порта найдите ошибку.

Как вариант наймите кого ни будь и вам все сделают
Ответ написан
Комментировать
@lonelymyp
Хочу вылезти из минуса по карме.
Если часы не работают, надо сделать так, чтобы они заработали!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы