/******************************************************************************* * * Projeto 70 - Exibindo frases em scroll através de uma matriz de leds * Adaptado por: Angelo Luis Ferreira * Referência: Blog MasterWalker Shop * Data: 10/12/2019 (dd/mm/AA) * http://squids.com.br/arduino * *******************************************************************************/ #include "alfa.h" // incluimos a biblioteca alfa.h int linhas[8] = {13, 8, 17, 10, 5, 16, 4, 14}; // Pinos que controlam as linhas int colunas[8] = {9, 3, 2, 12, 15, 11, 7, 6}; // 14 corresponde ao A0 e 15 corresponde ao A1 char msg[] = "PROJETOS SQUIDS ARDUINO."; // Coloque 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 byte 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}; byte timecount = 30; //altere para aumentar ou diminuir a velocidade de exibição int charachter; int pause = 500; // CATODO COMUM - LINHA | ANODO COMUM - COLUNA byte ON = 1, OFF = 0; // ANODO COMUM - LINHA | CATODO COMUM - COLUNA //byte ON = 0, OFF = 1; void setup() { for (int i = 2; i < 18; i++) { // Vai de 2 até 17 definindo os pinos como saida pinMode(i, OUTPUT);; } } void loop() { loadMatrix(); // carrega mapa de bits da matriz showMatrix(timecount); // mostra mapa com velocidade definida pela variável timecount } // Carrega o mapa de bits da matriz void loadMatrix(){ getChar(msg[index]); // Lê o caracter corrente da frase int currentChar = charachter; getChar(msg[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(msg)-2){ index=0; } } // Se shift for igual a 8, carraga o próximo par de carcateres (currentChar e nextCahr) } // Exibe a frase em scroll void showMatrix (int velShift){ for(int j = 0; j < velShift; j++){ // incrementa j para j de 0 a velShift (veolocidade do scroll) for(int c = 0; c < 8; c++) { //incrementa c para c de 0 a 7 (column - coluna) for(int i = 0; i < 8; i++) { digitalWrite(linhas[i], ON); //Desliga todas linhas } for(int i = 0; i < 8; i++){ if(i == c){ digitalWrite(colunas[i], ON); } // limpa colunas else{ digitalWrite(colunas[i], OFF); } // liga as colunas } for(int r = 0; r < 8; r++) { // incrementa r para r de 0 a 7 (row - linha) int bit = (bitsMap[c] >> r) & 1; if(bit == 1) { digitalWrite(linhas[r], OFF); // Se o bit no mapa da matriz está definido, acende o led } } delayMicroseconds(pause); //INTERVALO DE 500MS } } } 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; } }