/******************************************************************************* ** * Projeto 76 - Exibindo textos com rolagem horizontal - Módulo Matriz MAX7219 * Autor: Angelo Luis Ferreira * Data: 08/01/2020 (dd/mm/AA) * http://squids.com.br/arduino * *******************************************************************************/ #include "LedControlMS.h" #include "alfa.h" // incluimos a biblioteca alfa.h /* Criando o objeto lc ***** Definindo os pinos de conexão do módulo MAX7219 ***** pino 2 conectado no DIN pino 3 conectado no CLK pino 4 conectado no CS N_MTX = 1 - Número de dispositivos (Máximo de 8 módulos MAX7219) */ const byte N_MTX = 3; LedControl lc=LedControl(2,3,4, N_MTX); char texto[] = " APRENDA COM OS PROJETOS SQUIDS ARDUINO. "; // colocque qualquer frase aqui // Variáveis usadas para rolagem ambas começam em 0 int index = 0; // Caractere atual a ser mostrado int shift = 0; // Quantidade de colunas de deslocamento // Array para armazenar o mapa de bists a ser mostrado int bitsMap[] = {0,0,0,0,0,0,0,0}; // Vetor contendo a potência de 2 para calcular o que mostrar const int twoPowers[] = {1,2,4,8,16,32,64,128}; int charachter; byte speedCount = 2; //altere para aumentar ou diminuir a velocidade de exibição (0 a 20) void setup() { for (int i=0; i< N_MTX; i++){ lc.shutdown(i,false); lc.setIntensity(i,8); /* define o brilho dos leds - médio */ lc.clearDisplay(i); /* limpa o display */ } } void loop() { loadMatrix(); drawScreen(bitsMap); } // Carrega o mapa de bits da matriz void loadMatrix(){ getChar(texto[index]); // Lê o caracter corrente da frase int currentChar = charachter; getChar(texto[index+1]); // Lê o próximo caractere int nextChar = charachter; executeMatrix(currentChar, nextChar); } // Monta o mapa de bits da matriz void executeMatrix(int currentBuffer[], int nextBuffer[]) { for(int r=0; r < 8; r++){ // incrementa r para r de 0 a 7 (row - linha) bitsMap[r] = 0; // resetar a linha for(int c=0; c < 8; c++){ // incrementa c para c de 0 a 7 (column - coluna) bitsMap[r] = bitsMap[r] + ((twoPowers[c] & (currentBuffer[r] << shift))); // Carrega o caractere atual compensado pelo deslocamento bitsMap[r] = bitsMap[r] + (twoPowers[c] & (nextBuffer[r] >> (8 - shift) )); // Carrega o próximo caractere compensado pelo deslocamento } } shift++; // incrementa a variável shift responsável pelo deslocamento de um linha if(shift==8){ shift = 0; index++; if(index == sizeof(texto)-2){ index=0; } } // Se shift for igual a 8, carraga o próximo par de carcateres (currentChar e nextCahr) } void drawScreen(int buffer[]) { for (int v = 0; v < speedCount; v++) { for (int i = 0; i < 8; i++) { // linhas for (int j = 0; j < 8; j++) { // colunas lc.setLed(0, i, j, bitRead(buffer[i], 7 - j)); // usando bitRead() //lc.setLed(0, i, j, (buffer[i] >> 7-j) & 0X01); // usando operador bitwise } } } } void getChar(char msgChar) { switch(msgChar){ case 'A': charachter = A; break; case 'a': charachter = A; break; case 'B': charachter = B; break; case 'b': charachter = B; break; case 'C': charachter = C; break; case 'c': charachter = C; break; case 'D': charachter = D; break; case 'd': charachter = D; break; case 'E': charachter = E; break; case 'e': charachter = E; break; case 'F': charachter = F; break; case 'f': charachter = F; break; case 'G': charachter = G; break; case 'g': charachter = G; break; case 'H': charachter = H; break; case 'h': charachter = H; break; case 'I': charachter = I; break; case 'i': charachter = I; break; case 'J': charachter = J; break; case 'j': charachter = J; break; case 'K': charachter = K; break; case 'k': charachter = K; break; case 'L': charachter = L; break; case 'l': charachter = L; break; case 'M': charachter = M; break; case 'm': charachter = M; break; case 'N': charachter = N; break; case 'n': charachter = N; break; case 'O': charachter = O; break; case 'o': charachter = O; break; case 'P': charachter = P; break; case 'p': charachter = P; break; case 'Q': charachter = Q; break; case 'q': charachter = Q; break; case 'R': charachter = R; break; case 'r': charachter = R; break; case 'S': charachter = S; break; case 's': charachter = S; break; case 'T': charachter = T; break; case 't': charachter = T; break; case 'U': charachter = U; break; case 'u': charachter = U; break; case 'V': charachter = V; break; case 'v': charachter = V; break; case 'W': charachter = W; break; case 'w': charachter = W; break; case 'X': charachter = X; break; case 'x': charachter = X; break; case 'Y': charachter = Y; break; case 'y': charachter = Y; break; case 'Z': charachter = Z; break; case 'z': charachter = Z; break; case ' ': charachter = _; break; case '3': charachter = B2; break; case '<': charachter = TEMP; break; case '*': charachter = FULL; break; case '|': charachter = LINE; break; case '_': charachter = _; break; case ':': charachter = COL; break; case '-': charachter = DASH; break; case ')': charachter = BRA2; break; case '%': charachter = SMILE; break; case '.': charachter = DOT; break; case '^': charachter = COLDOT; break; } }