Enorme luz de estado de ánimo (8 / 8 paso)

Paso 8: software

Califique este instructable si te gusta! :) aquí está el código que usé para que puede copiar y pegar:
#define DRAW_PWM_DELAY 10
#define MAX_INTENSITY 8

* LED Driver

Byte [] columnPins = {2,3,4,6,7,8,11,12,13}; las conexiones de la matriz de columnas
Byte [] levelPins = {5,9,10}; conexiones de los niveles de la matriz de

Inicializa el controlador de LED (establece modos de pin y apaga todos los LEDs)
void ledInit() {}
para (byte i = 0; i < 9; i ++) {}
pinMode (columnPins [i], salida);
digitalWrite (columnPins [i], LOW);
}
para (byte i = 0; i < 3; i ++) {}
pinMode (levelPins [i], salida);
digitalWrite (levelPins [i], HIGH);
}
}

encender LEDs individuales
causa otros LEDs luz para arriba si el conductor no está en estado inicializado
(no pueden abordar todos los 27 LEDs con 12 pins a la vez)
{} void ledOn (columna bytes de tamaño, nivel de byte)
digitalWrite (columnPins [columna], HIGH);
digitalWrite (levelPins [nivel], LOW);
}

igual como ledOn
void ledOff (columna byte, byte nivel) {}
digitalWrite (columnPins [columna], LOW);
digitalWrite (levelPins [nivel], HIGH);
}

/********************************************************************************
* API de dibujo básica (almacenador intermediario de voxel, sistema de coordenadas Cartesianas, etc..)
********************************************************************************/

búfer de bytes [27]; buffer de voxel

dibuja el búfer de voxel (haciendo caso omiso de intensidades)
cualquier voxel > 1 se encenderá el LED correspondiente
{} void draw (n bytes)
col de int, lvl;
para (t bytes = 1; t < n; t ++) {}
para (byte i = 0; i < 27; i ++) {}
Si (buffer[i]) {}
col = i / 3;
LVL = 3 %;
ledOn(col,lvl);
delayMicroseconds(DRAW_PWM_DELAY);
ledOff(col,lvl);
} else {}
delayMicroseconds(DRAW_PWM_DELAY);
}
}
}
}

void draw() {}
Draw(1);
}

dibuja el búfer de voxel (toma intensidad en cuenta)
Esta función utiliza un software de PWM y es más lento aproximadamente 128 veces
que el binario de llamar la función
void drawPwm() {}
col de int, lvl;
para (t bytes = 1; t < = 128; t ++) {}
para (byte i = 0; i < 27; i ++) {}
Si (! () t % (1 < <(8-buffer[i]))) {
col = i / 3;
LVL = 3 %;
ledOn(col,lvl);
delayMicroseconds(DRAW_PWM_DELAY);
ledOff(col,lvl);
} else {}
delayMicroseconds(DRAW_PWM_DELAY);
}
}
}
}

borra buffer de voxel
void clearBuffer() {}
para (byte i = 0; i < 27; i ++) {}
buffer [i] = 0;
}
}

llena el búfer de voxel
void fillBuffer (valor del byte) {}
para (byte i = 0; i < 27; i ++) {}
buffer [i] = valor;
}
}

recupera valores de voxel buffer (usando coordenadas cartesianos)
byte getVoxel (char x, char y, char z) {}
byte me = 9 * x - y + 3 * z + 13;
volver buffer [i];
}

establece los valores de búfer de voxel (usando coordenadas cartesianos)
void setVoxel (char x, char y, char z, valor de byte) {}
byte me = 9 * x - y + 3 * z + 13;
Si (i > = 0 & & i < = 27) {}
buffer [i] = valor;
}
}

interpola los puntos arbitrarios entre vóxeles
Valor nulo (float x, float y, float z, valor de byte) {}
¿char xint = x > 0? 1:-1;
¿char yint = y > 0? 1:-1;
¿char zint = z > 0? 1:-1;

Interpolate(x,y,z,Value,0,0,0);
Interpolate(x,y,z,Value,0,yint,0);
Interpolate(x,y,z,Value,0,0,Zint);
Interpolate(x,y,z,Value,0,yint,Zint);
Interpolate(x,y,z,Value,xint,0,0);
Interpolate(x,y,z,Value,xint,yint,0);
Interpolate(x,y,z,Value,xint,0,Zint);
Interpolate(x,y,z,Value,xint,yint,Zint);
}

vacío interpolar (float x, float y, float z valor de byte, char xint, char yint, char zint) {}
flotador d = sqrt(pow(xint-x,2) + pow(yint-y,2) + pow(zint-z,2));
byte me = 9 * xint - yint + 3 * zint + 13;
Si (i > = 0 & & i < = 27) {}
buffer [i] += (valor * (1-d));
}
}

/********************************************************************************
* Algunos Demos
********************************************************************************/

Juegos pin Estados manualmente (no utilizar el conductor)
void demoLowLevel() {}
ledInit();
Aquí no ocurre nada visible
para (lvl byte = 0; lvl < 3; lvl ++) {}
digitalWrite (levelPins [lvl], LOW);
}
Ahora seleccionamos a las columnas todo
para (ciclo byte = 0; ciclo < 2; ciclo ++) {}
para (col byte = 0; col < 9; col ++) {}
¿digitalWrite (columnPins [col], ciclo % 2 == 0? ALTO: BAJA);
Delay(100);
}
}

ledInit();
Aquí no ocurre nada visible
para (col byte = 0; col < 9; col ++) {}
digitalWrite (columnPins [col], HIGH);
}
Ahora seleccionamos todos niveles
para (ciclo byte = 0; ciclo < 2; ciclo ++) {}
para (lvl byte = 0; lvl < 3; lvl ++) {}
¿digitalWrite (levelPins [lvl], ciclo % 2 == 0? BAJA: ALTA);
Delay(200);
}
}

ledInit();
}

algunas rotaciones (ninguÌ n conductor usado así)
void demoRotation() {}
secuencia de rotación
Byte [] seq = {0,1,2,5,8,7,6,3};

ledInit();
activa todos los niveles
para (lvl byte = 0; lvl < 3; lvl ++) {}
digitalWrite (levelPins [lvl], LOW);
}
columna media
digitalWrite (columnPins [4], HIGH);

Ahora seleccionamos a las columnas todo
ciclos de int = 3 * 3 * 9;
para (ciclo int = 0; ciclo < ciclos; ciclo ++) {}
digitalWrite (columnPins [seq [ciclo 8%]], HIGH);
digitalWrite (columnPins [seq [(cycle-1) %8]], baja);
Si (ciclo > = 3 * 9) {}
digitalWrite (columnPins [seq [(cycle+4) %8]], alto);
digitalWrite (columnPins [seq [(cycle+3) %8]], baja);
}
Si (ciclo > = 2 * 3 * 9) {}
digitalWrite (columnPins [seq [(cycle+2) %8]], alto);
digitalWrite (columnPins [seq [(cycle+1) %8]], baja);

digitalWrite (columnPins [seq [(cycle+6) %8]], alto);
digitalWrite (columnPins [seq [(cycle+5) %8]], baja);
}
Delay(100);
}

ledInit();
}

acceso directo al búfer de voxel (coordenadas cartesianos no utilizados)
void demoFill() {}
clearBuffer();
para (ciclo int = 0; ciclo < 2; ciclo ++) {}
para (int i = 0; i < 27; i ++) {}
Si (ciclo % 2 == 0) {}
buffer [i] = 8;
} else {}
buffer [i] = 0;
}
Draw(50);
}
}
}

trata de vóxeles como contenedores y llenan poco a poco al azar
void demoBinFill() {}
clearBuffer();
para (int i = 0; i < 100; i ++) {}
buffer[RANDOM(0,28)] += 2;
drawPwm();
}
}

aseado al azar de la chispa
void demoSparkle() {}
para (densidad int = 0; densidad < 50; densidad ++) {}
para (ciclo int = 0; ciclo < 3; ciclo ++) {}
clearBuffer();
para (int i = 0; i < densidad; i ++) {}
buffer[RANDOM(0,28)] = random(0,9);
}
drawPwm();
}
}
}

hace todo pulso LED síncrono
void demoPulse() {}
para (ciclo int = 0; ciclo < 80; ciclo ++) {}
fillBuffer(-abs(cycle%16-8)+8);
drawPwm();
}
}

onda de pulsada
void demoPulseWave() {}
r de bytes;
para (ciclo byte = 0; ciclo < 80; ciclo ++) {}
para (char x =-1; x < = 1; x ++) {}
para (char y =-1; y < = 1; y ++) {}
para (char z =-1; z < = 1; z ++) {}
r = (x * x + y * y + z * z);
setVoxel (x, y, z, - abs((cycle-r)%16-8)+8);
}
}
}
drawPwm();
}
}

muestra la interpolación
void demoGlowfly() {}
flotador de dx, dy, dz;
pasos de bytes = 10;

flotador de px = random(-100,101)/100.0;
flotador py = random(-100,101)/100.0;
flotador pz = random(-100,101)/100.0;

para (ciclo int = 0; ciclo < 8; ciclo ++) {}
DX = (random(-100,101)/100.0 - px) / pasos;
DY = (random(-100,101)/100.0 - py) / pasos;
DZ = (random(-100,101)/100.0 - pz) / pasos;

para (int i = 0; i < pasos; i ++) {}
PX += dx;
py += dy;
PZ += dz;

clearBuffer();
Punto (px, py, pz, MAX_INTENSITY);
drawPwm();
}
}
}    

Artículos Relacionados

Crear un dispositivo de luz de estado de ánimo

Crear un dispositivo de luz de estado de ánimo

¿No sería increíble tener una luz de estado de ánimo que se puede controlar con el teléfono desde la comodidad de tu cama? Con un simple Módulo Bluetooth, un Arduinoy un LED RGB, usted puede hacer este sueño posible.En este tutorial vamos a mostrar c
Luz de estado de ánimo de Arduino y titular

Luz de estado de ánimo de Arduino y titular

aprende a hacer tu propia luz de estado de ánimo de un Arduino!!!!!!Paso 1: Reunir los materialesVas a querer reunir estos materiales, si usted quiere construir la luz de estado de ánimo:1 Uno de x Arduino1 LED x RGB3 x 330 Omh resistencias1 x Breadb
Luz de estado de ánimo del cráneo RGB

Luz de estado de ánimo del cráneo RGB

Color tu Halloween con esta luz de estado de ánimo de cráneo. Utilizar como un cetro o una linterna.Para este proyecto usé 3d casco impreso y attiny2313 a bordo de pequeños prototipos.Paso 1: casco de impresión 3dHe utilizado la impresora 3d para imp
Luz de estado de ánimo de dormitorio

Luz de estado de ánimo de dormitorio

sorprende a tu pareja con la luz del estado de ánimo romántico en tu dormitorio.Instale la tira del LED detrás de su cama y habitación con luz ambiente cálida de la especia.Nota: Este es proyecto viejo, por lo que no hay fotos de avances. Espero que
Luz de estado de ánimo fácil

Luz de estado de ánimo fácil

esto es una manera fácil de hacer su propio $50 + valor estado de ánimo con una experiencia mínima de piezas, esfuerzo, costo y eléctrica o electrónica. Incluso soldadura puede evitarse!.Costo total podría ser tan poco como $2.Paso 1: El corazón de l
Decoración de luz de estado de ánimo (PMB pt1)

Decoración de luz de estado de ánimo (PMB pt1)

Esta es la primera parte de mi proyecto Pimp mi balcón (PMB).Hace un tiempo decidí limpiar mi balcón y hacerlo acogedor y un lugar impresionante posible utilizando sobre todo cosas reconstruido viejas.Lo que necesitarás para este instructivo son:-Bol
Luz de estado de ánimo al azar de Arduino

Luz de estado de ánimo al azar de Arduino

¿has visto esas luces de estado de ánimo fresco, pero caro,? Aquí es una manera de obtener tu propio... y se ve más bonito, demasiado...Esencialmente, este dispositivo al azar genera un color, y luego se desvanece a él. Más información en las tripas
Concha simple LED luz o estado de ánimo lámpara de noche (circuito del conductor w/LED)

Concha simple LED luz o estado de ánimo lámpara de noche (circuito del conductor w/LED)

así que esto es un instructivo de dos partes, la primera siendo el circuito controlador de LED, (no te preocupes, es muy simple) la segunda parte es la física. Este es un diseño muy flexible, casi cualquier LED se puede utilizar, y casi cualquier baj
Luz de estado de ánimo impresionante

Luz de estado de ánimo impresionante

esta luz humor impresionante se ve muy bien y es fácil de hacerla también utiliza reciclado material.Paso 1: Paso 1 cortar el sable de luz Encontré este sable de luz ahí y pensó que tendría una luz de gran humor ya que tenía todos los colores utiliza
Cómo hacer una luz de estado de ánimo fresco

Cómo hacer una luz de estado de ánimo fresco

hacer una impresionante linterna led.Paso 1: Reunir los materiales. Reunir nuestros materiales:2 led throwies1 carrete de pesca claro o de colorpegamentoPaso 2: Poner junto Primero agregar una línea de pegamento en las dos caras del carrete donde el
Cómo hacer una luz de ambiente del estado de ánimo: un Tutorial de principiante

Cómo hacer una luz de ambiente del estado de ánimo: un Tutorial de principiante

Este Instructable expone cómo construir y programar una ambiente luz utilizando una placa Arduino y algunos componentes de circuito comunes. Este proyecto mezcla un rojo, verde y azul LED para obtener una amplia gama de colores, y ciclos de la Arduin
Cómo construir una lámpara de estado de ánimo del LED / luz de seguridad de la soldadura

Cómo construir una lámpara de estado de ánimo del LED / luz de seguridad de la soldadura

Hola,¿Cuántas veces han quemado abajo de su casa porque usted se olvidó de apagar eso cautín o pistola de pegamento? Bien nunca he quemado abajo de mi casa (y esperemos que no lo has hecho bien) pero en este instructable voy a enseñarte a crear una l
Interactivo, indicador de estado de ánimo fuente abierta

Interactivo, indicador de estado de ánimo fuente abierta

este instructable pasará por cómo hacer una luz de humor interactivo, múltiples funciones. El núcleo de este proyecto es el I2C BlinkM RGB LED. Estaba navegando la web un día, lo BlinkM me llamó la atención, y sólo pensé que era demasiado cool para p
Imagen de ambiente del estado de ánimo con mando a distancia

Imagen de ambiente del estado de ánimo con mando a distancia

este instructable le guiará por el proceso de hacer la imagen del propio humor ambiente!¿Quieres crear un efecto de luz de estado de ánimo único o una luz de noche? Estás en el lugar correcto.Esto vino a la existencia absolutamente accidentalmente, l