Sin embargo otro Daft Punk mesa (5 x 5 LED matriz) (5 / 8 paso)

Paso 5: código

El Arduino sketch dibuja la pantalla de escaneo por fila de arriba hacia abajo, al igual que una pantalla basada en CRT.  Tiene la complejidad añadida que para mantener nuestro actual dentro de los límites que puede manejar el Atmega328P, podemos solamente encendemos a lo más 2 LED a la vez.   Por lo tanto, nosotros también escanear de izquierda a derecha.  Aunque sólo 2 LED a la vez se encienden, a nuestros ojos, que parecen todos estar encendido al mismo tiempo debido a un fenómeno llamado persistencia de la visión.

El código de pantalla es interrupción conducido y utiliza la biblioteca de Timer1 .  Timer1 no está incluido en la instalación del software de Arduino.  Por lo tanto, para instalarlo, debe TimerOne.zip de descargar y descomprimir su contenido en su sketchbook/bibliotecas/TimerOne.

Un marco es un hay de datos. Una forma muy sencilla y común de almacenar los datos sería utilizar un byte para cada LED.  Este usaría 25 bytes por fotograma.   Para ahorrar memoria, la definimos como un conjunto de 5 bytes.  Cada byte representa una fila completa de nuestra pantalla.  Puesto que un byte se compone de 8 bits, y sólo tenemos 5 LED por fila, sólo utilizamos la parte inferior 5 pedacitos, y el superior 3 bits se ignoran.  Hay 5 bytes porque tenemos 5 filas.  Podríamos ahorrar otro byte de embalaje 25 bits en 4 bytes, pero que complica innecesariamente el código y hace imposible ver gráficamente las declaraciones de marco de frames.h.

#define 5 DIM / / x / y dimensión - matriz de 5 x 5
typedef byte Frame [DIM];

Los pernos de columna LED están definidos en la matriz de cols .

int cols [DIM] = {12,11,10,9,8};

Los pernos de LED de la fila se definen en la matriz de filas .

int filas [DIM] = {7,6,5,4,3};

Para encender un LED especial, establecemos su pin de cols alta y sus filas pin bajo.  Esto causa actual para fluir a través del LED seleccionado.  La forma más directa para hacer esto sería utilizar la función digitalWrite() en cada LED en secuencia.  Así que para encender el LED izquierdo superior, podríamos utilizar

digitalWrite(cols[0],HIGH);
digitalWrite(rows[0],LOW);

y hacer para cada LED.  Sin embargo, no es muy eficiente.   En su lugar usamos manipulación puerto directo para encender las columnas.  El registro PORTB corresponde a los pines digitales 8 a 13.
Tenga en cuenta el orden que utilizamos en nuestra declaración de la matriz de cols arriba: 12,11,10,9,8.  Esta manera, bit0 de PORTB corresponde a la columna derecha, albañilería1 corresponde a la siguiente columna a la izquierda, hasta bit4, que corresponde a la columna de la izquierda.  Si establece un poco particular en 1, es el mismo como llamada digitalWrite() con alta y ajuste un poco a 0 es equivalente a llamar digitalWrite() con baja.   Por lo tanto, podríamos teóricamente reemplazamos digitalWrite() llamando 5 veces para configurar todas las columnas de 5 con una escritura a PORTB.  Pero ya que nos permite encender sólo a lo más 2 LED a la vez, tenemos a lazo 3 veces para cada columna, análisis 2 bits a la vez.

Interrumpir la rutina
se llama display() de cada tiempo, se apaga la fila anterior
y en la siguiente fila
máscara de bits bytes = B00000011;
void display() {}
digitalWrite (filas [fila], HIGH); Desactivar la fila entera anterior

Si (máscara de bits == B00010000) {}
máscara de bits = B00000011; columnas de luz de la razón 2 (pines 9,8)
incremento de fila y abrigo si fuera necesario
Si (++ fila == DIM) {}
fila = 0;
}
}
else if (máscara de bits == B00000011) {}
máscara de bits = B00001100; luz el medianas 2 columnas (pins 11,10)
}
Else {/ / bitMaskIdx == B00001100
máscara de bits = B00010000; luz de la columna de la izquierda (pin 12)
}

manipulación de Puerto directo.
PORTB es una variable de pseudo para pernos de digitales 8 a 13 los dos bits altos (6 y 7) no son utilizables y mapa a los pines del cristal
la parte inferior 5 pedacitos son nuestras columnas. No queremos cambiar los bits
así que primero la máscara de los bits de ignorar y luego establecer los bits que queremos a la luz
PORTB & = B11100000;
PORTB | = curFrame [fila] y máscara;

digitalWrite (filas [fila], LOW); Gire en la fila
}

Tenga en cuenta que nuestro comentario anterior dice que display() es una rutina de interrupción.  Esto es porque en lugar de la exploración en la función loop(), lo llamamos en el fondo a través de la biblioteca de Timer1.

intervalo de interrupción en uSec
determina cuánto tiempo mantener cada fila activada
así si tenemos 5 filas, redibujar toda la pantalla
una vez cada 5 filas * 3 ciclos por fila * 1000 usec =.015 seg -> Hz 66,67
Si usted percibe parpadeo puede disminuir a 500 para un ritmo de 133,33 Hz
Timer1.Initialize(1000); fuego la interrupción cada 1000 microsegundos
Timer1.attachInterrupt(Display); llamar display() en cada interrupción.

El principal lazo simplemente pasos a través de todos nuestros cuadros de animación.

void loop() {}
incrementar el índice de marco y abrigo si fuera necesario
Si (++ curFrameIdx == FRAMECNT) {}
curFrameIdx = 0;
}

Seleccione el marco para la exhibición
setFrame(curFrameIdx);

Delay(400); esperar tiempo entre fotogramas en ms - reducir este valor a la velocidad de la animación, aumentarlo para ralentizarlo
}

El bosquejo entero se coloca por debajo.

Artículos Relacionados

Sin embargo otro sobremesa ATX fuente de alimentación

Sin embargo otro sobremesa ATX fuente de alimentación

Hoy voy a darle un rápido Resumen de cómo me volví a la fuente de alimentación de la computadora sobre ATX, en una fuente superior de banco decente. El deseo es cargar baterías de otros gadgets y proporcionar una base para otros gadgets de material r
Sin embargo otro DIY Tutorial de circuitos de la flexión

Sin embargo otro DIY Tutorial de circuitos de la flexión

Hay varias guías en Instructables que explican cómo hacer tus propios circuitos flex. He estado haciendo estos años y el pensamiento que compartir mi propio flujo de trabajo. Aprendí a hacer esto en Instructables me. Asegúrese de revisar el tutorial
Sin embargo, otro de tercera mano para soldar ayuda. [con extractor de humos incorporado]

Sin embargo, otro de tercera mano para soldar ayuda. [con extractor de humos incorporado]

Soldadura es divertido. Soldadura es genial.Recuerdo cuando compré mi primer soldador [tenía 10 años :)]. Al principio estaba bien, para soldar juntas de simple era juego de niños. Pero como mis diseños se volvieron más complicados, necesitaba soluci
Sin embargo otro remolque de bicicleta

Sin embargo otro remolque de bicicleta

hay un montón de otros remolques de bicicleta gran en Instructables, pero pensé post mío. Algunos de los puntos clave: ninguna soldadura se requiere para este trailer, y se construye (sobre todo) de artículos de Home Depot y piezas de repuesto de la
Todavía sin embargo otro marco de Fotos Digital (Linux)

Todavía sin embargo otro marco de Fotos Digital (Linux)

después de haber visto otros diseños que quería probar hacer uno de mi propia. Aunque no es exactamente barato en ~ $135 fue un divertido proyecto y un estoy muy feliz con los resultados. Es limpio sencillo y sólo requiere un pequeño alambre para la
Guy-Manuel Daft Punk casco con iluminación LED programable

Guy-Manuel Daft Punk casco con iluminación LED programable

En este Instructable, construirá un casco Daft Punk de Guy-Manuel de Homem-Christo con iluminación LED programable. Es un proyecto largo que tendrá varias decenas de horas de trabajo. Áreas de experiencia que le ayudará con esta versión incluyen: imp
(Sin embargo, otro) Chasis de plataforma-un Robot robótica Arduino DIY de piezas de repuesto

(Sin embargo, otro) Chasis de plataforma-un Robot robótica Arduino DIY de piezas de repuesto

Dio a mi sobrino un kit del arrancador Arduino hace unos meses. Le pregunté a mi hermana lo que estaba haciendo con él y dijo que había tenido algunos problemas de calcular hacia fuera. Veremos le la semana después de Navidad, así que le dije a traer
Sin embargo otro PipBoy 3000!  (La marca "K") Un trabajo en progreso

Sin embargo otro PipBoy 3000! (La marca "K") Un trabajo en progreso

INTRODUCCIÓN¡ Saludos!Se trata de mi pobre intento de escribir un Instructable sobre mis esfuerzos por construir una totalmente funcional PipBoy 3000 (modelo "K") * basado en la Raspberry Pi.Primero, un poco de historia acerca de mí mismo, mis m
Sin embargo otro escudo del Capitán América... para bastante barato.

Sin embargo otro escudo del Capitán América... para bastante barato.

Es difícil creer que uno de mis primeros Instructables en 2011 y fue el escudo de la segunda guerra mundial Capitán América creado a partir de la parte posterior de un asiento de teatro dañado.Y, como muchos otros, después de ver al soldado del invie
Sin embargo otro fumador de terracota

Sin embargo otro fumador de terracota

sé que se ha hecho muchas veces, pero pensé documento mío también.He estado queriendo hacer uno de ellos desde que vi el episodio de bueno come que introdujo. Mi amigo hace poco tuvo un cumpleaños, y él es un fanático de la carne, así que pensé que e
(Sin embargo, otro) Manera de hacer su propio Nerf dardos

(Sin embargo, otro) Manera de hacer su propio Nerf dardos

Ok, así que. Tienes una pistola de Nerf, impresionante. Pero, sólo 12 dardos y más dardos son demasiado caros, ¿qué haces? HAGA SUS LOS PROPIOS!Ahora, esto no es de cero, sino más bien una adaptación a los dardos. Para su información, sólo sé que ést
Sin embargo otro Arduino 110v regulador de la energía

Sin embargo otro Arduino 110v regulador de la energía

este Instructable muestra cómo construir una caja de salida de la cuadrilla de cuatro en la que cada salida es controlada a través de un Arduino (o cualquier otra señal de nivel de TTL).Diferencia de las otras cajas de relé que no utiliza circuitos y
Sin embargo, otro episodio quesera.

Sin embargo, otro episodio quesera.

En realidad se trata de una extracción de mi pizza haciendo instructable de /. Esto es si no es a pizza pero como queso. El queso en la foto era de dos galones digno de productos lácteos.  se pone muy interesante cuando se utiliza una combinación de
YABBAS - sin embargo, otro desnudo huesos Arduino (sobre placa perforada)

YABBAS - sin embargo, otro desnudo huesos Arduino (sobre placa perforada)

este Instructable demostrará la construcción de los huesos de un desnudo (y realmente barato... menos que $5) módulo compatible Arduino que se puede poner juntos en un pequeño trozo de placa perforada y se puede utilizar en un protoboard o independie