LED матрица 8*8 (всё вверх ногами)

Тема в разделе "Arduino & Shields", создана пользователем Intobs, 28 июл 2014.

  1. Intobs

    Intobs Нуб

    Добрый день, уважаемые форумчане.
    Имеется в наличии Arduino MEGA и 8*8 матрица на контроллере MAX7219ENG, такая: [​IMG]
    Столкнулся с такой проблемой, что при попытке вывести что-либо на матрицу, это всё выводится вверх ногами.
    Как и положено, вернулся к самому простому, запустил пример из библиотеки, но и тут всё вверх ногами...
    PHP:
    //We always have to include the library
    #include "LedControl.h"

    /*
    Now we need a LedControl to work with.
    ***** These pin numbers will probably not work with your hardware *****
    pin 12 is connected to the DataIn
    pin 11 is connected to the CLK
    pin 10 is connected to LOAD
    We have only a single MAX72XX.
    */

    LedControl lc=LedControl(12,11,10,1);

    /* we always wait a bit between updates of the display */
    unsigned long delaytime=1000;

    void setup() {
      /*
      The MAX72XX is in power-saving mode on startup,
      we have to do a wakeup call
      */

      lc.shutdown(0,false);
      /* Set the brightness to a medium values */
      lc.setIntensity(0,8);
      /* and clear the display */
      lc.clearDisplay(0);
    }

    /*
    This method will display the characters for the
    word "Arduino" one after the other on the matrix.
    (you need at least 5x7 leds to see the whole chars)
    */

    void writeArduinoOnMatrix() {
      /* here is the data for the characters */
      byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
      byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
      byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
      byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
      byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
      byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
      byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};

      /* now display them one by one with a small delay */
      lc.setRow(0,0,a[0]);
      lc.setRow(0,1,a[1]);
      lc.setRow(0,2,a[2]);
      lc.setRow(0,3,a[3]);
      lc.setRow(0,4,a[4]);
      delay(delaytime);
      lc.setRow(0,0,r[0]);
      lc.setRow(0,1,r[1]);
      lc.setRow(0,2,r[2]);
      lc.setRow(0,3,r[3]);
      lc.setRow(0,4,r[4]);
      delay(delaytime);
      lc.setRow(0,0,d[0]);
      lc.setRow(0,1,d[1]);
      lc.setRow(0,2,d[2]);
      lc.setRow(0,3,d[3]);
      lc.setRow(0,4,d[4]);
      delay(delaytime);
      lc.setRow(0,0,u[0]);
      lc.setRow(0,1,u[1]);
      lc.setRow(0,2,u[2]);
      lc.setRow(0,3,u[3]);
      lc.setRow(0,4,u[4]);
      delay(delaytime);
      lc.setRow(0,0,i[0]);
      lc.setRow(0,1,i[1]);
      lc.setRow(0,2,i[2]);
      lc.setRow(0,3,i[3]);
      lc.setRow(0,4,i[4]);
      delay(delaytime);
      lc.setRow(0,0,n[0]);
      lc.setRow(0,1,n[1]);
      lc.setRow(0,2,n[2]);
      lc.setRow(0,3,n[3]);
      lc.setRow(0,4,n[4]);
      delay(delaytime);
      lc.setRow(0,0,o[0]);
      lc.setRow(0,1,o[1]);
      lc.setRow(0,2,o[2]);
      lc.setRow(0,3,o[3]);
      lc.setRow(0,4,o[4]);
      delay(delaytime);
      lc.setRow(0,0,0);
      lc.setRow(0,1,0);
      lc.setRow(0,2,0);
      lc.setRow(0,3,0);
      lc.setRow(0,4,0);
      delay(delaytime);
    }

    void loop() {
    writeArduinoOnMatrix();
    }
    Подключение проверял, все провода подключены на свои места.
    В чём может быть проблема?
     
  2. Unixon

    Unixon Оракул Модератор

    Может быть, "верх" и "низ" не там расположены?
     
  3. Intobs

    Intobs Нуб

    Я не совсем верно выразился, всё отображается зеркалированно по вертикали, грубо говоря "R" отображается как "Я" вверх ногами, "d" как "b", и т.д.,(если принять низ за ту часть, где расположен контроллер.
     
  4. Unixon

    Unixon Оракул Модератор

    Ну, в таком случае, остается только отзеркалить выводимые данные...
     
  5. altex

    altex Гик

    Для d вы записываете вот что

    Код (Text):
    byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
    Код (Text):
    00011100
    00100010
    00100010
    00010010
    11111110
    Код (Text):
       @@@
      @   @
      @   @
       @  @
    @@@@@@@
    Это либо буква b, которую повернули на 90 градусов влево
    Либо буква d, повёрнутая влево на 90 градусов, и отражённая горизонтально

    Нужно обратиться к библиотеке, чтобы понять, почему она в таком формате рисует
     
  6. altex

    altex Гик

    Получается, чтобы это заработало, нужно вместо

    Код (Text):
      lc.setRow(0,0,d[0]);
      lc.setRow(0,1,d[1]);
      lc.setRow(0,2,d[2]);
      lc.setRow(0,3,d[3]);
      lc.setRow(0,4,d[4]);
     
    написать

    Код (Text):
      lc.setRow(0,0,d[4]);
      lc.setRow(0,1,d[3]);
      lc.setRow(0,2,d[2]);
      lc.setRow(0,3,d[1]);
      lc.setRow(0,4,d[0]);
    А библиотека решает порядок рядов в lcd матрице - где нулевой, где первый и так далее
    В программе они перепутаны
     
  7. Intobs

    Intobs Нуб

    Спасибо, зеркальность пропала, со сменой верха/низа разберусь.;)