Max7219 Бегущая строка. Helpните начинающему !

Тема в разделе "Arduino & Shields", создана пользователем MegaSGA, 15 мар 2014.

  1. MegaSGA

    MegaSGA Нуб

    Доброго Времени суток!

    Неделю назад приобрел Arduino Mega 2560 и Max7219 Led Matrix 8х8, нашел в сети готовую программу подключил матрицу к ардуино загрузил скетч все работает но не могу разобраться в скетче.

    Мне нужно создать бегущюю строку с надписью Arduino mega 2560 Max7219.

    Если кому не трудно помогите и с подробным пояснением кода программы пожалуйсто !
     
  2. Megakoteyka

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

    Вы предлагаете форумчанам самостоятельно отыскать ту же самую программу?
    Вложить в сообщение код или хотя бы ссылку на программу мысли не возникало?
    Схема подключения тоже не повредит.
     
  3. zsm

    zsm Гик

    Вот пример бегущей строки, но для меги надо эту LedControl lc=LedControl(12,11,10,1);
    строчку скорее всего исправить(указать выводы в первых трёх числах), а с помощью этой таблицы можете свои символы добавить.

    пример работы http://yadi.sk/d/-EQBCkcmKcoJg



    [​IMG]

    По поводу библиотеки LedControl.h все здесь расписано очень подробно.


    Код (Text):
    //We always have to include the library

    #include "LedControl.h"

    //pin 12 is connected to the DataIn
    //pin 11 is connected to the CLK
    //pin 10 is connected to LOAD

    //LedControl(int dataPin, int clkPin, int csPin, int numDevices);
    LedControl lc=LedControl(12,11,10,1);

    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 (0~15 possible values)
      lc.setIntensity(0,2);
      //and clear the display
      lc.clearDisplay(0);
    }

    #define SP {0, 0, 0, 0, 0}              //Espacio
    #define EX {0, 125, 0, 0, 0}            //Exclamacion !
    #define A {31, 36, 68, 36, 31}
    #define B {127, 73, 73, 73, 54,}
    #define C {62, 65, 65, 65, 34}
    #define D {127, 65, 65, 34, 28}
    #define E {127, 73, 73, 65, 65}
    #define F {127, 72, 72, 72, 64}
    #define G {62, 65, 65, 69, 38}
    #define H {127, 8, 8, 8, 127}
    #define I {0, 65, 127, 65, 0}
    #define J {2, 1, 1, 1, 126}
    #define K {127, 8, 20, 34, 65}
    #define L {127, 1, 1, 1, 1}
    #define M {127, 32, 16, 32, 127}
    #define N {127, 32, 16, 8, 127}
    #define O {62, 65, 65, 65, 62}
    #define P {127, 72, 72, 72, 48}
    #define Q {62, 65, 69, 66, 61}
    #define R {127, 72, 76, 74, 49}
    #define S {50, 73, 73, 73, 38}
    #define T {64, 64, 127, 64, 64}
    #define U {126, 1, 1, 1, 126}
    #define V {124, 2, 1, 2, 124}
    #define W {126, 1, 6, 1, 126}
    #define X {99, 20, 8, 20, 99}
    #define Y {96, 16, 15, 16, 96}
    #define Z {67, 69, 73, 81, 97}

    //Escribimos la frase separando cada letra por comas
    //En el primer numero lo adaptaremos la longitud de la frase (caracteres)
    byte frase[5][5]={H,O,L,A,SP};
    int largo = sizeof(frase)/5;
    int gnd[18]={-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12};

    void loop() {

      for (int letra=0; letra<largo; letra++){
        for (int desplaza = 18; desplaza>=5; desplaza--) {
          for (int i=0; i<5; i++){
            lc.setRow(0,gnd[i+desplaza-5],frase[letra][i]);
          }
        delay(100); // speed of animation
        lc.clearDisplay(0);
        }
        if(letra == largo){
        letra = 0;}
      }//end for letra

    }
     
    Последнее редактирование: 17 мар 2014
  4. asmodey86

    asmodey86 Нуб

    Очень хорошая статья. Но как можно узнать все возможные функции для светодиодов, если допустим использовать не МАХ, а саму ардуино, тем более что количество выходов позволяет, или самое распространённое 74hc595... Другими словами, можете подсказать книгу или книги по ардуино, чтобы было побольше рассказано именно о светодиодах?
     
  5. ANV

    ANV Гуру

    Ардуино тут ни при чем. Почитайте статьи по ключевой фразе "динамическая индикация"
     
  6. asmodey86

    asmodey86 Нуб

    Вы уверены что статьи лучше чем полноценная книга? Ведь с помощью светодиодов многие создают игры, такие как тетрис. Будет ли статей достаточно чтобы предусмотреть все варианты переменных и манипуляций с ними?
     
  7. ANV

    ANV Гуру

    Да, я уверен что статья лучше. Потому что для подключения светодиодов Вам надо понять не так уж и много вещей:
    - светодиод проводит ток
    - светодиод проводит ток только в одну сторону
    - светится от тока, а не напряжения
    - нагрузочная способность выходов микросхем
    - транзисторные ключи

    После этого Вы сможете подключать любые светодиоды как захотите. Если про подключение светодиодов написана целая книжка, то она только показывает как их подключить и совсем не учит думать.
     
  8. asmodey86

    asmodey86 Нуб

    Спасибо за подробный ответ!
     
  9. asmodey86

    asmodey86 Нуб

    Помогите! Приведённый пример с (#include "LedControl.h") , у меня не работает. Библиотеку скачал, подключение проверил. Для проверки работы использовал вот этот код, работает:

    int dataIn = 2;
    int load = 3;
    int clock = 4;

    int maxInUse =1;
    int e = 0;


    byte max7219_reg_noop = 0x00;
    byte max7219_reg_digit0 = 0x01;
    byte max7219_reg_digit1 = 0x02;
    byte max7219_reg_digit2 = 0x03;
    byte max7219_reg_digit3 = 0x04;
    byte max7219_reg_digit4 = 0x05;
    byte max7219_reg_digit5 = 0x06;
    byte max7219_reg_digit6 = 0x07;
    byte max7219_reg_digit7 = 0x08;
    byte max7219_reg_decodeMode = 0x09;
    byte max7219_reg_intensity = 0x0a;
    byte max7219_reg_scanLimit = 0x0b;
    byte max7219_reg_shutdown = 0x0c;
    byte max7219_reg_displayTest = 0x0f;

    void putByte(byte data) {
    byte i = 8;
    byte mask;
    while(i > 0) {
    mask = 0x01 << (i - 1);
    digitalWrite( clock, LOW);
    if (data & mask){
    digitalWrite(dataIn, HIGH);
    }else{
    digitalWrite(dataIn, LOW);
    }
    digitalWrite(clock, HIGH);
    --i;
    }
    }

    void maxSingle( byte reg, byte col) {


    digitalWrite(load, LOW);
    putByte(reg);
    putByte(col);
    digitalWrite(load, LOW);
    digitalWrite(load,HIGH);
    }




    void setup () {


    pinMode(dataIn, OUTPUT);
    pinMode(clock, OUTPUT);
    pinMode(load, OUTPUT);

    }

    void loop () {



    maxSingle(1,85);
    maxSingle(2,170);
    maxSingle(3,85);
    maxSingle(4,170);
    maxSingle(5,85);
    maxSingle(6,170);
    maxSingle(7,85);
    maxSingle(8,170);
    ...

    Почему не работает пример приведённый в 3 комментарии?
     
  10. asmodey86

    asmodey86 Нуб

    Простите, моя ошибка. Всё работает!