Programar o seu 4x4x4 arduino levou cubo para fazer algumas coisas mais impressionantes

Na última semana eu construiu um cubo de LED - 64 LEDs

que você pode programar para fazer fantásticas apresentações futuristas luz - e eu espero que você fez também, porque é um grande projeto para motivá-lo e expandir seu conjunto de habilidades Arduino. Deixei-te com alguns aplicativos básicos para você pensar, mas hoje vou apresentar mais alguns pedaços de software que eu fiz para o cubo, juntamente com explicações de código. O objetivo deste é ao mesmo tempo dar-lhe algumas lightshows mais bonitas para executar, mas também para aprender sobre algumas das limitações de programação do cubo, e aprender alguns novos conceitos de programação no processo.Como fazer um cubo pulsante LED Arduino que parece que veio do futuroComo fazer um cubo pulsante LED Arduino que parece que veio do futuroSe você já se envolveu com alguns projectos Arduino iniciantes, mas está procurando algo um pouco permanente e em um outro nível de impressionante, então o humilde 4 x 4 x 4 cubo LED é ...consulte Mais informação

Este é algum Codificação- bastante avançado, você realmente precisa de ter lido toda a minha anterior tutoriais Arduino e nosso guia Arduino de principiante antes de personalizar o código fornecido.

App 1: Mini Cobra

Em vez de executar um conjunto seqüência padrão de cobra, eu queria programar uma cobra - um um artifical que tornaria as próprias escolhas aleatórias, e ser completamente imprevisível. É limitado a 2 segmentos apenas, que eu vou explicar mais tarde, e você pode ver a demonstração abaixo. Faça o download do código completo aqui.

Ao lidar com espaço 3D, você precisa de 3 coordenadas para um único ponto: X, Y, e Z.

arduino levou cubo

No entanto, no nosso cubo, os planos X e Z são representados por meio de pinos de LED, enquanto que o Y está directamente mapeados para os planos de cátodo. Para facilitar o trabalho com essas coordenadas e descobrir o movimento em torno do cubo, I, portanto, criou um novo tipo de dados (Usando struct) para representar um único ponto no cubo - o que chamei de “xyz”. Ele consiste de apenas dois números inteiros: “xz” e “y”. Com esta estrutura, que pode, em seguida, também representam uma direcção, indicada a seguir no nosso sistema especial (xz, y) de coordenadas:

Y movimento (cima baixo): (Xz, y + 1), (xz, y-1)
Z movimento (Para a frente, para trás): (XZ-1, y), (xz + 1, y)
movimento X (esquerda direita): (Xz + 4, y), (XZ-4, y)

Por exemplo, para mover a posição em LED (0,0) um para a esquerda, aplicamos (Xz + 4, y) e acabar com (0,4).

Video: 4X4X4 LED Cube Construction

Existem certos limites que ser colocados em movimento - ou seja, que as coordenadas Y só pode ser uma possível 0-3 (Sendo 0 a camada inferior, sendo a parte superior 3), e as coordenadas XZ só poderia ser 0-15. Um outro limite é colocado sobre o movimento Z para evitar “salto” de trás para a frente do cubo, e vice-versa. Neste caso, usamos a função módulo para testar múltiplos de 4 e negar que a tentativa movimento. Essa lógica é representada no válido() , que devolve verdadeiro se a direcção proposto é um movimento aceitável, e de outro modo falso. I adicionou-se uma função adicional para verificar se há uma direcção inversa - isto é, se a cobra está caminhando em uma direção, não queremos que ele vá para trás em si, mesmo que seja de outra forma um local válido para passar para - e uma mover() função, que leva uma coordenada, uma direção, e retorna a nova coordenada.

o XYZ tipo de dados, válido(), mover() e inverso() funções podem ser encontrados no xyz.h arquivo no downloads. Se você está se perguntando por que isso foi colocado em um arquivo separado em vez do arquivo do programa principal, é devido a algumas regras complicadas do compilador do Arduino que impedem funções de retornando tipos de dados personalizados- eles devem ser colocados em seu próprio arquivo, em seguida, importado no início do arquivo principal.

Voltar no arquivo de tempo de execução principal, uma série de direções armazena todos os possíveis movimentos a cobra pode make podemos simplesmente escolher um membro da matriz aleatória para obter uma nova direção. As variáveis ​​também são criados para armazenar a localização atual (agora), o anterior direção e anterior localização. O resto do código deve ser bastante óbvio para você- apenas for laços, e ligar e desligar os LEDs. No circuito principal, vamos verificar para ver se a direção proposta é válida, e se for, então nós ir por esse caminho. Se não, vamos escolher uma nova direção.



A única coisa a salientar no circuito principal é algumas verificações para corrigir um bug que encontrei envolvendo multiplexing: se a nova localização foi no mesmo plano cátodo ou mesmo pino ânodo, desligando o LED anterior resultaria em ambos indo para fora. É também neste momento que percebi que vai além de uma cobra 2 segmento ia ser impossível com a minha implementação atual: tentar acender 3 LEDs em um arranjo de canto. Você não pode, porque com 2 camadas e 2 LEDs pinos actived, 4 LEDs iria ligar, não 3. Este é um problema inerente com nosso projeto cubo multiplexado limitado, mas não se preocupe: nós simplesmente precisamos usar o poder de persistência da visão para reescrever o método de desenho.

Persistência da visão significa que quando a luz atinge os nossos olhos sequencialmente - mais rápido do que podemos processá-lo - parece ser uma única imagem. No nosso caso, em vez de desenhar todas as quatro camadas, ao mesmo tempo, devemos desenhar a primeira, desativá-lo, chamar a segunda e desativá-lo: mais rápido do que podemos dizer a qualquer mudança é mesmo acontecendo. Este é o princípio sobre por que os escritores de mensagens trabalhar, como este:

Método Draw New Usando persistência de visão

Primeiro, em seguida, uma nova rotina de sorteio. Eu criei um 4 x 16 de matriz bidimensional de bits (true ou false) sejam uma representação literal do estado do cubo LED. A rotina de sorteio irá implementar persistência da visão, simplesmente interagindo sobre isso e liberação de cada camada para o cubo por um breve momento. Ele vai continuar a chamar-se no estado atual até que o tempo de atualização tenha decorrido, altura em que vamos passar o controle volta para o loop main (). Guardei esta seção do código neste arquivo LED_cube_POV, por isso, se você quiser apenas saltar para programar seus próprios jogos e tal, então fique à vontade para usar isto como uma base.

App 2: Jogo da Vida

Por agora, vamos desenvolver isso em uma versão básica do Jogo de Conway da vida. Para aqueles de vocês que não estão familiarizados (Tente usar o Google para encontrar uma animação incrível ovo de páscoa), a Jogo da vida é um exemplo de autômatos celulares que cria um padrão fascinante de comportamento emergente dada apenas algumas regras simples.

http://youtube.com/embed/XcuBvj0pw-E

Este é, por exemplo, como as formigas parecem mover-se com inteligência e uma mente colmeia, apesar do fato biológico que eles real basta seguir regras hormonais muito básicas. Aqui está o código completo para download: pressione o restabelecer botão para reiniciar. Se você encontrar-se obter o mesmo padrão mais e mais, tente manter pressionado o botão de descanso por mais tempo.

Video: Charlieplexed 4x4x4 RGB LED Cube

http://youtube.com/embed/iBnL8pulJ

Aqui estão as regras do jogo da vida:

Video: Cubo led 4x4x4

  • Qualquer célula viva com menos de dois vizinhos vivos morre, como se causado por sub-população.
  • Qualquer célula viva com dois ou três vizinhos vivos vive para a próxima geração.
  • Qualquer célula viva com mais de três vizinhos vivos morre, como se por superlotação.
  • Qualquer célula morta com exatamente três vizinhos vivos se torna uma célula viva, como se pela reprodução.

Executar o código. Você notará dentro de 5 a 10 “gerações”, os autômatos provavelmente venha a um descanso, estabilizando em um determinado posição- vezes esse padrão estável mudará localização e mudar em torno da placa. Em casos raros, eles podem até ter morrido completamente fora. Esta é uma limitação de só ter LEDs 4x4x4 para trabalhar, mas é um bom exercício de aprendizagem de qualquer maneira.

Para explicar o código:

  • Você pode estar familiarizado com memcpy () função. Eu usei isso para salvar o estado do jogo anterior, como matrizes não pode apenas ser atribuído a outro como variáveis ​​normais - você tem que copiar na verdade em todo o espaço de memória (neste caso, 64 bits).
  • howManyNeighbours () função deve ser auto-explicativo, mas no caso não é - este método tem uma única coordenada, e vai até cada vizinho possível (o mesmo conjunto de indicações que anteriormente utilizados na aplicação de cobra), para verificar se eles são válidos. Em seguida, verifica se esses LEDs vizinhos eram ‘on` no estado jogo anterior, e conta quantos existem.
  • A principal função deste jogo de aplicativo A vida é progressGame (), que aplica as regras de autômatos para o estado do jogo actual.

melhorias: Eu passei muito tempo sobre isso até agora, mas que você pode querer tentar adicionar em um cheque que repõe automaticamente a bordo após 5 ou mais gerações do mesmo padrão. então por favor me avise! Eu também sugerem a tentar adicionar a metodologia POV para o jogo de cobra para fazer esperamos uma cobra mais possível.

É isso de mim hoje. I podem revisitar mais alguns aplicativos cubo LED Arduino em um momento posterior, mas espero que você deve estar em uma posição para modificar meu código e criar suas próprias regras do jogo: deixe-nos saber o que você venha com nos comentários, para que todos possamos baixar suas criações! Como sempre, eu estarei aqui para responder suas perguntas e defender minhas habilidades de codificação horrendos.


Artigos relacionados