faça você mesmo

Como fazer o jogo da vida de um LED Matrix Conway alimentado por Arduino - faça você mesmo

Como fazer o jogo da vida de um LED Matrix Conway alimentado por Arduino - faça você mesmo

Bytes curtos: Cada hobby tem seus próprios projetos de marco, como a introdução Hello World na programação. A comunidade do Arduino gosta de começar as pessoas com a luz LED piscando. Mas o que poderíamos fazer com 64 LEDs em uma matriz? Podemos exibir todos os tipos de coisas, como números, letras e até imagens simples. Neste artigo, veremos como fazer isso, bem como o Jogo da Vida de Conway.

O Arduino teve uma popularidade explosiva na última década. Existem milhares de bibliotecas disponíveis para isso. É uma plataforma muito bem documentada e incrível para aprender a programar e projetar eletrônicos.

Neste artigo, cobriremos levemente o uso dos drivers de LED MAX7219 e MAX7221 com a biblioteca LedControl, que está disponível para download e instalação no IDE do Arduino e também no Github, e implementaremos o Game of Life de Conway. As duas partes importantes de que você precisa para isso são um dos drivers de LED mencionados acima e uma matriz de LED compatível (além do Arduino e alguns componentes eletrônicos padrão, é claro). Você pode encontrar muitos por muito barato (menos de US $ 3USD) em diferentes lojas online, como eBay, Banggood e AliExpress. É muito importante ler a descrição do que você está comprando, porque muitos deles vêm como kits que precisam ser montados e soldados. Dependendo de onde você mora, o tempo de envio pode ser de algumas semanas, então certifique-se de verificar o tempo estimado de chegada para sua área.

Eu fui em frente e compartilhei a fonte deste projeto no meu (barão) Página do Github, fique à vontade para baixá-la, modificá-la, postá-la novamente ou o que você quiser. Será necessário acompanhar e há muitos comentários no código do Github que não estão incluídos neste artigo simplesmente porque seria um artigo longo e eles são muito mais eficazes no código real do que tentar comprimi-los neste artigo.

Após o arquivo de cabeçalho e as definições de pino, você encontrará uma linha que pode não fazer sentido.

LedControl lc = LedControl (DIN, CLK, CS, 0);

Isso cria o objeto LedControl que é usado para fazer interface com nosso driver de LED, fornecendo a entrada digital, o relógio e os pinos de sinal do chip, bem como especificando o número de dispositivos (eles podem ser encadeados em série para um display grande). O protocolo de controle entre o driver LED e o Arduino é SPI (Interface Periférica Serial), mas não temos que entrar nisso porque temos um objeto da classe LedControl para fazer nosso lance por nós.

A próxima parte, no configurar() função, é principalmente autoexplicativa, mas vamos abordá-la para maior clareza.

lc.shutdown (0, falso); lc.setIntensity (0, 8); lc.clearDisplay (0);

O driver LED estará em um estado de desligamento quando for ligado pela primeira vez, então precisamos dizer para ele despertar, que é o que a primeira linha faz. O segundo define o brilho, uma vez que estamos usando apenas uma única tela, o primeiro parâmetro, o endereço da matriz, é 0, e a intensidade deve ser definida como você preferir, o valor máximo válido sendo 15. Por último, limpamos a exibição de quaisquer valores anteriores possíveis. Isso normalmente não é um problema, mas se o seu Arduino reiniciar por algum motivo, ele pode deixar LEDs indesejados acesos.

Antes de entrarmos na programação, é importante entender o que é o Jogo da Vida de Conway e quais são as regras. O jogo é um jogo de “jogador zero”. Tudo isso significa que o jogador escolhe o estado inicial, o que faremos aleatoriamente, e depois segue as regras. O Jogo da Vida é muito simples e possui apenas quatro regras:

  1. Qualquer célula viva com menos de dois vizinhos vivos morre, como se causada por subpopulação.
  2. Qualquer célula viva com dois ou três vizinhos vivos vive para a próxima geração.
  3. Qualquer célula viva com mais de três vizinhos vivos morre, como se por superpopulação.
  4. Qualquer célula morta com exatamente três vizinhos vivos torna-se uma célula viva, como se por reprodução.

- Wikipedia

Obtenha sua própria placa Arduino e comece a fazer você mesmo hoje

Para representar a grade, usamos duas matrizes bidimensionais. Como estamos trabalhando com matrizes 8 × 8, essas são as dimensões que aplicamos às nossas matrizes. Embora as matrizes de bytes sejam muito mais eficientes na memória (e, na verdade, sejam usadas com frequência em aplicativos como esse), os booleanos são muito mais fáceis de modificar em uma matriz do que os bits em um byte. Modificar bits dentro de um byte exigiria o uso de bit a bit operações que complicariam as coisas um pouco em comparação com os arrays booleanos simples. A segunda matriz é porque temos que calcular o próximo estado a partir do estado atual, mas se alterarmos o estado atual, não obteremos o estado sucessivo desejado.

Os próximos dois loops for são para inicializar o cgrid array com valores aleatórios e o ngrid array com falso valores. Há uma chance em quatro de que a célula esteja 'viva', isso é feito gerando um número aleatório entre 0 e 3, se o número for maior que 2, a célula está viva.

O resto do código é simples o suficiente para não precisar de nenhuma explicação adicional ou tem uma explicação no código. Mas o displayGeneration () função é mais interessante. Essa função, com poucas modificações, é capaz de pegar matrizes de bytes e colocá-las diretamente na matriz. O lc.setColumn () A chamada do método, na verdade, leva um byte, pois é o último argumento, sendo o primeiro o endereço e a coluna que está sendo definida. Usando isso e configurando conforme abaixo, você pode criar facilmente uma função que exibirá uma matriz de bytes de oito elementos, como uma letra ou imagem, na matriz.

void printByte (byte ba [8]) para (int i = 0; i < 8; i++) lc.setRow(0,0,ba[i]); 

Você pode ver que o método usado é o setRow () método em oposição ao setColumn () método. O que isso faz é simplesmente aplicar o byte horizontalmente em oposição à vertical, uma rotação simples de 90 graus. Este é um ponto importante visto que a orientação do seu projeto não será necessariamente igual à minha. Além disso, você pode inverter a ordem em que os bytes são colocados usando (7 - i) como seu segundo argumento, espelhando efetivamente a saída. Esta é uma maneira muito fácil de orientar corretamente a saída do seu projeto.

Se você pretende exibir texto em sua matriz, pode encontrar fontes de matriz 8 × 8 online. No entanto, é muito importante observar a quantidade total de RAM que seu microcontrolador possui. Usei o Uno para este projeto e uma das fontes incluiu definições para as configurações de 128 bits além do padrão ASCII de 7 bits. Isso foi demais para o meu Uno (isso é 8 bytes x 256 = 2048 bytes, todo o Uno capacidade) e precisei reduzir a metade do conjunto para as 128 definições ASCII originais para fazer essa fonte funcionar. Portanto, lembre-se de que sua milhagem pode variar dependendo do seu microcontrolador.

Depois de um curto período de trabalho, você pode sentar e assistir o efeito hipnotizante do Jogo da Vida em seu pequeno display de matriz de LED.

Há algum outro projeto do Arduino que você gostaria de ver coberto no Fossbytes? Deixe-nos saber nos comentários abaixo.

Como instalar o aplicativo UK Turks Playlist (APK) em uma caixa de TV Android
UK Turks Playlist tem um novo APP (APK) que pode ser instalado em caixas de Android TV ou no Fire TV Stick.Possui seções de TV ao vivo, programas de T...
Como instalar o Filelinked em um Android TV Box ou Fire TV Stick
Índice da página Como instalar o Filelinked em uma caixa de TV Android Como instalar o Filelinked em um cabo de TV Fire Filelinked é um aplicativo...
Adicionar portas a um smartphone Android com um hub tipo C HDMI, Ethernet, USB, cartão SD
Novos smartphones Android podem facilmente ter portas adicionadas, como saída HDMI, Ethernet, USB e slots para cartões SD. Isso significa que eles po...