/******************************************************************************* * * Projeto 75 - Dado eletrônico com módulo atriz de leds- MAX7219 * Autor: Angelo Luis Ferreira * Data: 14/01/2020 (dd/mm/AA) * http://squids.com.br/arduino * *******************************************************************************/ #include #include "faces.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 = 1; LedControl lc=LedControl(2,3,4, N_MTX); const int faces[] = {F1,F2,F3,F4,F5,F6}; // define pino de entrada do Arduino para o push button const byte btn = 11; 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 */ } // define botões como entrada e pull up interno do Arduino pinMode(btn, INPUT_PULLUP); // randomSeed() basicamente "embaralha" a função random() randomSeed(analogRead(0)); // mostra a primeira face (aleatório) drawScreen(faces[random(0, 6)]); } void loop() { if(!digitalRead(btn)) { // se o botão for acionado (digitalRead(btn) = 0 - pullup) while (!digitalRead(btn)) {}; // aguarda soltar o botão lc.clearAll(); // limpa a matriz delay(200); diceRound(); // roda uma jogada do dado } } void diceRound() { byte result = 0; // inicializa a variável "result" com 0 byte rodada = random(15, 35); // gera comprimento da rodada, quantos números passarão for (byte i = 0; i < rodada; i++) // loop de 0 até comprimento da rodada { result = random(0, 6); // gera número de 0 a 5, devido a string começar em 0 e finalizar em 5 drawScreen(faces[result]); // mostra as faces do dado até o dado parar delay(50 + i * 10); // espera para passar cada número (varia velocidade) } } void drawScreen(byte buffer[]) { 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 } } }