Led матрицы, нехватка памяти

Тема в разделе "Arduino & Shields", создана пользователем Corax, 2 апр 2015.

  1. Corax

    Corax Нуб

    Доброго времени суток. Сделал бегущую строку на Arduino из трех матриц.

    Все работает идеально, НО есть проблема. Arduino не тянет длинные фразы. Заканчивается память. Решил хранить массив информации на компьютере и передавать его на плату через comпорт.

    Массив вида:

    unsigned char disp1[1][8]={

    {0x00,0x90,0xD7,0x3F,0x3F,0xD7,0x90,0x00},

    };

    То есть в comпорт должны прийти данные вида: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

    А потом эти данные присваиваются массиву. И вот тут я попал в тупик.

    Нужна помощь.
     
  2. X-Dron

    X-Dron Гик

    0x - это только тип представления числа, кода символа.
    массив
    Код (Text):
    unsigned char disp1[1][8]={
    {0x00,0x90,0xD7,0x3F,0x3F,0xD7,0x90,0x00},
    };
    эквивалентен массиву
    Код (Text):
    unsigned char disp1[1][8]={
    {0,144,215,63,63,215,144,0},
    };
    Перевод стринга сом-порта "144" в byte, а потом в char, по-моему достаточно просто.
    Внимание вопросы:
    1. А массивы строк не пытались закинуть в Progmem?
    2. Зачем создаете двухмерный массив, а используете как одномерный.
     
  3. Corax

    Corax Нуб

    Спасибо большое! Попробую. Так правда намного легче.
    Progmem, знаю про эту память, но не стал возиться. Решил сразу глобально увеличить)
    Это многомерный массив. Привел одну строчку чтобы было легче объяснять.
     
  4. Corax

    Corax Нуб

    Увы и ах, но не получилось. Буду очень признателен, если покажите кусок программного кода.
     
  5. X-Dron

    X-Dron Гик

    Ядро можно взять отсюда http://wiki.amperka.ru/конспект-arduino:светильник-управляемый-по-usb
    только убрал комментарии и вывод не на светодиод, а обратно в монитор.
    Код (Text):
        String message;
       
        void setup()
        {
          Serial.begin(9600);
        }
       
        void loop()
        {
          while (Serial.available()) {
            char incomingChar = Serial.read();
            if (incomingChar >= '0' && incomingChar <= '9') {
              message += incomingChar;
            } else if (incomingChar == '\n' or incomingChar == ',' ) {
              Serial.println(message.toInt());
              message = "";
            }
          }
        }
    message.toInt() возвращает целочисленное значение, его и нужно закидывать в массив.
    Доработать, чтобы ',' перебирал индексы массива.
    03-04-2015 18-35-47.png 03-04-2015 18-35-56.png
     
  6. X-Dron

    X-Dron Гик

    Tomasina нравится это.
  7. Corax

    Corax Нуб

    Возможно, но я не понимаю как потом заставить его двигаться. Так в массиве хранится информация сразу целого экрана. При большой длинне выводимого слова количество строк доходит до 300. К сожалению более рационального придумать не смог.