Advertisement
Villalba2006

POST_75

Dec 20th, 2016
8,079
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.94 KB | None | 0 0
  1. /*  TITULO: Panel luminoso de Matrices LED 8x8 controlado mediante Bluetooth
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     Con este programa vamos a visualizar mensajes de texto desplazandose de derecha a izquierda a través
  14.     de un panel luminoso compuesto por 4 matrices LED 8x8 con driver MAX7219. Los mensajes podrán ser
  15.     enviados mediante el software "Octoplus Terminal" a través de un PC con Bluetooh, o desde un Dongle
  16.     Bluetooth si nuestro PC no lo trae de fábrica, despúes de haber vinculado y conectado dicho Bluetooth
  17.     al del módulo HC-06, que tenemos conectado a nuestro Arduino, a través del software "BlueSoleil".
  18.     También podremos enviar mensajes de texto a través de Bluetooth mediante la aplicación "Bluetooth
  19.     Terminal HC-05" desde un SmartPhone Android.  
  20.    
  21.    
  22.     Descarga del Software "BlueSoleil":        
  23.     https://mega.nz/#!m1g0AKpY!30qFELOSFuCmUvTSQDyb3dNYVYwZwX-nzB0NHgw_NO0
  24.    
  25.    
  26.     Descarga del Software "Octoplus Terminal":
  27.     https://mega.nz/#!flw1ERha!dauzpH6k-4KNqF1glacQNsGvyApTT_LW-2BzkKG-f5o
  28.    
  29.    
  30.     Descarga de "Bluetooth Terminal HC-05":
  31.     https://play.google.com/store/apps/details?id=project.bluetoothterminal&hl=es
  32.    
  33.    
  34.    
  35.     ESQUEMA DE CONEXION
  36.    
  37.                                       +-----+
  38.          +----[PWR]-------------------| USB |--+
  39.          |                            +-----+  |
  40.          |         GND/RST2  [ ][ ]            |
  41.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |
  42.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  
  43.          |                             AREF[ ] |
  44.          |                              GND[ ] |
  45.          | [ ]N/C                    SCK/13[ ] |  
  46.          | [ ]IOREF                 MISO/12[ ] |  
  47.          | [ ]RST                   MOSI/11[ ]~|  
  48.          | [ ]3V3    +---+               10[ ]~|   Pin CLK del módulo MAX7219 (el de la derecha)
  49.          | [ ]5v    -| A |-               9[ ]~|   Pin CS del módulo MAX7219 (el de la derecha)
  50.          | [ ]GND   -| R |-               8[ ] |   Pin DIN del módulo MAX7219 (el de la derecha)
  51.          | [ ]GND   -| D |-                    |
  52.          | [ ]Vin   -| U |-               7[ ] |   Pin RX del módulo Bluetooth HC-06
  53.          |          -| I |-               6[ ]~|   Pin TX del módulo Bluetooth HC-06
  54.          | [ ]A0    -| N |-               5[ ]~|  
  55.          | [ ]A1    -| O |-               4[ ] |  
  56.          | [ ]A2     +---+           INT1/3[ ]~|  
  57.          | [ ]A3                     INT0/2[ ] |  
  58.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  59.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  60.          |            [ ] [ ] [ ]              |
  61.          |  UNO_R3    GND MOSI 5V  ____________/
  62.           \_______________________/
  63.  
  64.   NOTAS:
  65.  
  66.    - La alimentación del panel luminoso (VCC y GND) puede ir directamente conectada a los pines
  67.      +5V y GND de nuestro Arduino, aunque es recomendable alimentar el panel luminoso
  68.      mediante una fuente de alimentación de 5VDC/3000mA para evitar problemas en el puerto USB
  69.      de nuestro PC.
  70.    - Para conectar las 4 matrices LED 8x8 con driver MAX7219 en cascada, es suficiente con conectar
  71.      las salidas del módulo situado más a la derecha (el que hemos conectado a nuestro Arduino), a las
  72.      entradas del inmediatamente anterior (el de su izquierda) y así sucesivamente hasta llegar al
  73.      primer módulo, el cual deberá tener sus salidas desconectadas puesto que no se tiene que comunicar
  74.      con ninguno otro. Todos los módulos tienen que estar correctamente alimentados.  
  75.    - Alimentación del módulo Bluetooth HC-06:
  76.      - Pin +5V del módulo Bluetooth HC-06 --> +5V de Arduino.
  77.      - Pin GND del módulo Bluetooth HC-06 --> GND de Arduino.    
  78. */
  79.  
  80.     // Librerías necesarias
  81.     #include <MaxMatrix.h>
  82.     #include <avr/pgmspace.h>
  83.     #include <SoftwareSerial.h>
  84.      
  85.     // Definimos el objeto para la comunicación serie (Bluetooth)
  86.     SoftwareSerial BT(6,7); // 6 RX, 7 TX.
  87.    
  88.     // Definición de los caracteres
  89.     PROGMEM unsigned char const CH[] =
  90.     {
  91.     3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
  92.     1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
  93.     3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
  94.     5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
  95.     4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
  96.     5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
  97.     5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
  98.     1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
  99.     3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
  100.     3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
  101.     5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
  102.     5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
  103.     2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
  104.     4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
  105.     2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
  106.     4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
  107.     4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
  108.     3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
  109.     4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
  110.     4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
  111.     4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
  112.     4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
  113.     4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
  114.     4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
  115.     4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
  116.     4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
  117.     2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
  118.     2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
  119.     3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
  120.     3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
  121.     3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
  122.     4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
  123.     5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
  124.     4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
  125.     4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
  126.     4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
  127.     4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
  128.     4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
  129.     4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
  130.     4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
  131.     4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
  132.     3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
  133.     4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
  134.     4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
  135.     4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
  136.     5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
  137.     5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
  138.     4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
  139.     4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
  140.     4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
  141.     4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
  142.     4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
  143.     5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
  144.     4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
  145.     5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
  146.     5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
  147.     5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
  148.     5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
  149.     4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
  150.     2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
  151.     4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
  152.     2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
  153.     3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
  154.     4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
  155.     2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
  156.     4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
  157.     4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
  158.     4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
  159.     4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
  160.     4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
  161.     3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
  162.     4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
  163.     4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
  164.     3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
  165.     4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
  166.     4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
  167.     3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
  168.     5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
  169.     4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
  170.     4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
  171.     4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
  172.     4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
  173.     4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
  174.     4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
  175.     3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
  176.     4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
  177.     5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
  178.     5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
  179.     5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
  180.     4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
  181.     3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
  182.     3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
  183.     1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
  184.     3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
  185.     4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
  186.     };
  187.    
  188.     int data = 8;    // Pin digital para el pin DIN del módulo MAX7219
  189.     int load = 9;    // Pin digital para el pin CS del módulo MAX7219
  190.     int clock = 10;  // Pin digital para el pin CLK del módulo MAX7219
  191.    
  192.     int maxInUse = 4;    // Cambiar este valor dependiendo del número de matrices que conectes (máx.8)
  193.    
  194.     // Declaración del objeto para el módulo MAX7219
  195.     MaxMatrix m(data, load, clock, maxInUse);
  196.    
  197.     byte buffer[10];
  198.    
  199.     char mensaje[50]; // Cadena para almacenar los caracteres que recibimos del puerto serie del IDE (máximo 50).
  200.     char mensaje2[]= "       "; // Cadena que almacena el separador de los mensajes.
  201.    
  202.     byte posicion=0;  // Variable para cambiar la posición de los caracteres de la cadena.
  203.    
  204.      
  205.     void setup()
  206.     {
  207.       pinMode(8,OUTPUT); // Pin digital 8 como SALIDA
  208.       pinMode(9,OUTPUT); // Pin digital 9 como SALIDA
  209.       pinMode(10,OUTPUT); // Pin digital 10 como SALIDA
  210.      
  211.       BT.begin(9600); // Comienzo de la comunicación con el módulo Bluetooth HC-06 (por defecto)
  212.       m.init(); // Inicializa el módulo MAX7219 de cada matriz 8x8
  213.       m.setIntensity(1); // Intensidad luminosa de los puntos de la matriz (entre 1-5)
  214.     }
  215.    
  216.     void loop()
  217.     {
  218.       if(BT.available()) // Nos dice si hay datos dentro del buffer, procedentes de la comunicación Bluetooth
  219.       {
  220.         memset(mensaje, 0,sizeof(mensaje)); // memset borra el contenido de la cadena "mensaje" desde la posición 0 hasta el final sizeof
  221.    
  222.         while(BT.available()>0) // Mientras haya datos en el buffer...
  223.         {
  224.           delay(5); // delay para mejorar la recepción de datos
  225.           mensaje[posicion] = BT.read(); // Lee un carácter y lo almacena en una posición de la cadena "mensaje"
  226.           posicion++; // Se incrementa una posición de la cadena
  227.         }
  228.         posicion=0; // Inicializamos la posición
  229.       }  
  230.       delay(100); // Tiempo de inicio de un nuevo ciclo de mensajes
  231.       m.shiftLeft(false, true); // Desplazamiento del texto de izquierda a derecha    
  232.      
  233.       // Despliega los mensajes almacenados en las cadenas
  234.       printStringWithShift(mensaje, 100); // El último término se utiliza para modificar la velocidad del mensaje
  235.       printStringWithShift(mensaje2, 100);
  236.     }
  237.    
  238.     // Función para imprimir un carácter en el panel luminoso
  239.     void printCharWithShift(char c, int shift_speed)
  240.     {  
  241.       if (c < 32) return;
  242.       c -= 32;
  243.       memcpy_P(buffer, CH + 7*c, 7);
  244.       m.writeSprite(maxInUse*8, 0, buffer);
  245.       m.setColumn(maxInUse*8 + buffer[0], 0);
  246.      
  247.       for (int i=0; i<buffer[0]+1; i++)
  248.       {
  249.         delay(shift_speed);
  250.         m.shiftLeft(false, false);
  251.       }
  252.     }
  253.    
  254.     // Función para imprimir una cadena de caracteres en el panel luminoso
  255.     void printStringWithShift(char* s, int shift_speed)
  256.     {        
  257.       while (*s != 0)
  258.       {
  259.         printCharWithShift(*s, shift_speed);
  260.         s++;
  261.       }
  262.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement