Paso 60: Software: efecto 4, caja shrinkgrow y woopwoop
Hicimos dos funciones de animación de cuadro por el cubo del LED. Effect_box_shrink_grow() dibuja una caja de estructura metálica llenar el cubo entero, luego disminuye hasta un voxel en una de las 8 esquinas. Llamamos a esta función una vez para cada una de las 8 esquinas para crear un efecto agradable. Effect_box_woopwoop() dibuja un cuadro que comienza como una 8 x 8 x 8 caja de alambre relleno el cubo entero. Luego se contrae hasta un 2 x 2 x 2 caja en el centro del cubo. O en revés si se especifica.
Así es como funciona effect_box_shrink_grow().
Toma cuatro argumentos, número de iteraciones, rotación, flip y retraso. Rotación especifica de rotación alrededor del eje Z en intervalos de 90 grados. Tapa > 0 voltea el cubo boca abajo.
Para hacer la función tan simple como sea posible, simplemente dibuja una caja de 0,0,0 a cualquier punto a lo largo de la diagonal entre 0,0,0 y 7,7,7 luego utiliza las funciones de espejo de eje de draw.c para girarla.
1) entrar en bucle de iteración principal.
2) entrar en un bucle for() va de 0 a 15.
3) sistema xyz a 7-i. Esto hace xyz la inversa de i. Queremos reducir la caja primero y luego crecer. XYZ es el punto a lo largo de la diagonal. Sólo usamos una variable desde x, y y z son todos iguales a lo largo de esta diagonal.
4) cuando i = 7, el cuadro se ha reducido a un 1 x 1 x 1 caja, y no podemos reducirlo más. Si i es mayor que 7, xyz se establece en i-8, que hace xyz viajar de 0 a 7 viaja desde 8 a 15. Hicimos este truco para no tener dos bucles, un pasando poco con de 7-0 y de 0-7.
5) espacio en blanco del cubo y retrasar un poco para asegurarse de que el borrado se procesa en el cubo. Desactivar la rutina de interrupción. Hacemos esto porque las funciones de espejo toma un poco de tiempo. Sin necesidad de deshabilitar las interrupciones, el cuadro de alambre flash brevemente en la rotación original antes de que se muestra rotado.
6) dibujar el cuadro de estructura metálica en su rotación original. lado de la caja es 0,0,0 mientras los otros recorridos a lo largo de la diagonal.
7) rotaciones. Si el tirón es mayores que 0, el cubo se gira boca abajo. rot toma un número de 0 a 3 donde 0 es 0 grados de rotación alrededor de Z y 3 es de 270 grados. A 270 grados que simplemente espejo en X e Y.
8) habilitar las interrupciones mostrar el cubo ahora rotado.
9) retrasar por un tiempo y luego borrar el cubo.
La otra función implicados en el efecto de caja de alambre es effect_box_woopwoop(). El nombre woopwoop solo sonaba natural cuando vio por primera vez el efecto que se procesa en el cubo ;)
La función woopwoop sólo hace una iteración y toma dos argumentos, retraso y crece. Si crecer es mayor que 0, el cuadro comienza como un 2 x 2 x 2 caja y crecer a un 8 x 8 x 8 caja.
Aquí es cómo funciona:
1) borrar el cubo llenado el buffer con 0 x 00;
2) para ()-bucle de 0 a 3.
4) set ii a i. Si crecer es especificado establece en 3-i para invertirlo.
5) trazar un rectángulo de alambre centrado a lo largo de la diagonal entre 0,0,0 y 7,7,7. Una de las esquinas de la caja usa las coordenadas 4 + ii en todos los ejes, de 4-7. La otra esquina utiliza 3-ii en todos los ejes, pasando de 3-0.
6) demora un rato, luego claro el cubo.
Estas dos funciones se utilizan como un solo efecto en el launcher de efecto. En primer lugar el encogimiento crecer efecto es llamado 8 veces, una para cada esquina, entonces woopwoop se llama cuatro veces, dos encogerán y crecen ciclos.
Para iniciar la contracción crece la función, usamos un bucle con algunos trucos de manipulación de bit limpio interior para evitar la escritura de 8 líneas de código.
El segundo argumento de la contracción crece funciones es la rotación, en 4 pasos. Contamos de 0 a 7, así que simplemente no podemos alimentar a la función. Utilizamos el modulo operador % para mantener el número dentro de un rango de 0-4. El modulo operador se divide por el número especifica y devuelve el resto.
El tercer argumento es el flip. Cuando flip = 0, no se voltea el cubo. > 0 cambia. Utilizamos el operador AND bit a bit para sólo leer bit 3 de i.
Los operadores bit a bit son un absoluto debe para conocer cuando se trabaja con micro controladores, pero que está fuera del alcance de este instructable. Los chicos en el AVR Freaks han publicado alguna información sobre este tema. Puedes leer más en http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=37871