Matriz Arduino controlada por Bluetooth com texto de rolagem
Componentes e suprimentos
| | × | 1 | |
| | × | 1 | |
| Módulo de matriz led 8x8 com MAX7219 | | × | 7 | |
| | × | 1 | |
| | × | 2 | |
Aplicativos e serviços online
Sobre este projeto
Após várias tentativas de fazer um texto de rolagem na matriz 8x8, encontrei o manual mais completo na página do Embedded Lab:http://embedded-lab.com/blog/portable-bluetooth-enabled-scrolling-led-matrix-display -parte 1/.
O dispositivo contém um Arduino nano, módulo Bluetooth para recebimento de dados do smartphone e matrizes de LED 8x8 acionadas pelo MAX7219.
Ao contrário de lá, usei módulos de matriz 8x8 prontos com chip MAX7219 que podem ser adquiridos muito barato no Ebay ou Alexpress. No momento, eu tinha apenas 7 módulos, então fiz uma pequena modificação no código. Não existe mais um aplicativo Android na Google Play Store, então você pode baixá-lo em:
https://bluetooth-spp-pro.en.uptodown.com/android
. Ele pode controlar a velocidade de rolagem, o brilho dos leds, pausar, apagar texto e vários botões de texto predefinidos.
No final, coloquei todo o aparelho em uma caixa, que fiz de um material de PVC e coloquei sobre ela com um papel de parede preto.
Bibliotecas Arduino:
https://github.com/markruys/arduino-Max72xxPanel
https://github.com/adafruit/Adafruit-GFX-Library
Código
código Arduino
/ * Aqui estão os comandos que o Arduino reconhece. 1. Qualquer fluxo de caracteres deve ser enviado entre parênteses. Exemplo:suponha que se deseja exibir a mensagem "Olá! Como vai você?" Você deve enviar assim:(Olá! Como você está?) Quando o Arduino recebe o primeiro caractere como '(', ele entende que os próximos caracteres são dados de exibição até que ')' seja recebido. A mensagem é exibida rolando da direita para a esquerda. 2. A intensidade da exibição pode ser aumentada ou diminuída enviando / + ou / - respectivamente. Cada vez que o Arduino recebe '/', ele entende que é um comando. Suporta 16 níveis de brilho. 3. Da mesma forma, a velocidade de rolagem pode ser aumentada ou diminuída enviando / respectivamente. 4. / p é usado para pausar a mensagem de rolagem. O envio deste comando novamente retoma a rolagem. 5. / e é usado para apagar o buffer e apagar o display Conexões:Easy Matrix Arduino VCC + 5V DIN MOSI (Pino 11) Pinos LOAD definidos no programa abaixo CLK SCK (Pino 13) GND Gnd A comunicação UART acontece a 9600 baud . Escrito por:Rajendra Bhatt Contato:[email protected] Link do produto Easy Matrix:http://embedded-lab.com/blog/?p=9186 * / # include #include #include int pinCS =10; // Anexe CS a este pino, DIN a MOSI e CLK a SCK (cf http://arduino.cc/en/Reference/SPI) int numberOfHorizontalDisplays =7; int numberOfVerticalDisplays =1; Max72xxPanel matrix =Max72xxPanel (pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); int scrollspeed =100; // Velocidade de rolagem padrão (milissegundos) int spacer =1; // Espaço entre dois caracteresint width =5 + spacer; // A largura da fonte é 5 pixelsboolean inChar =false, NewData =false, pause =false; boolean dataAvailable =false; char inputString [512]; int count =0, BTvalue =5; void setup () {matrix.setIntensity (1 ); // Use um valor entre 0 e 15 para o brilho // Ajuste conforme suas necessidades matrix.setPosition (0, 0, 0); // A primeira exibição está em <0, 7> matrix.setPosition (1, 1, 0); // O segundo display está em <1, 0> matrix.setPosition (2, 2, 0); // O terceiro display está em <2, 0> matrix.setPosition (3, 3, 0); // E a última exibição está em <3, 0> matrix.setPosition (4, 4, 0); // A primeira exibição está em <0, 0> matrix.setPosition (5, 5, 0); // O segundo display está em <1, 0> matrix.setPosition (6, 6, 0); // O terceiro display está em <2, 0> // ... // matrix.setRotation (0, 2); // A primeira exibição é a posição de cabeça para baixo // matrix.setRotation (3, 2); // O mesmo é mantido para a última exibição matrix.fillScreen (0); matrix.write (); Serial.begin (9600); // inicialização da comunicação serial // Usando a interrupção 0 no pino digital 2. pinMode (2, INPUT); digitalWrite (2, BAIXO); attachInterrupt (0, serialInterrupt, CHANGE); } void loop () {if (dataAvailable) {display_data (); }} void display_data () {for (int i =0; i =0 &&letra> =0) {if (letra 0) {NewData =true; }}}} if (ch =='/') {// Modo de comando inChar =true; while (inChar) {if (Serial.available ()) {ch =Serial.read (); // '/ +' é para incremento de brilho if (ch =='+') {if (BTvalue <15) {BTvalue ++; matrix.setIntensity (BTvalue); } pausa; } // '/ -' é para diminuição do brilho if (ch =='-') {if (BTvalue> 0) {BTvalue -; matrix.setIntensity (BTvalue); } pausa; } // '/>' é para desacelerar a rolagem if (ch =='>') {if (scrollspeed <200) {scrollspeed =scrollspeed + 20; } pausa; } // '/ <' é tornar a rolagem mais rápida if (ch =='<') {if (scrollspeed> 10) {scrollspeed =scrollspeed-10; } pausa; } // '/ e' deve apagar a exibição if (ch =='e') {dataAvailable =false; pausa; } // '/ p' é para pausar a exibição if (ch =='p') {if (pause ==false) {pause =true; } mais {pausa =falso; } pausa; } else {break; // Comando não reconhecido}}}} // if (ch =='!')} // while (serial.available) inService =false;}
Esquemas