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 */

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

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

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

Войти через центр авторизации
Похожие вопросы