Paso 5: El electonics
No pude resistirme a añadir un poco de tecnología a la cama, así que instalé unas tiras del RGB de led y un twinking estrellas campo/glow-worms en la parte inferior de la litera.
Las tiras de led fueron fáciles. Opté por un regulador fijo fuera de ebay, como se muestra en la foto, como yo sabía que un control remoto desaparecen después de algunos días. He puesto una tira en la litera de arriba y otra debajo para la lectura.
El techo llevó un poco de esfuerzo... Adaptado este código (http://playground.arduino.cc/Main/AnalogAndDigital...) para utilizar las 6 salidas pwm de un arduino mini. Mi código está por debajo (siente libre de dejarme saber que si usted tiene alguna sugerencia, todavía estoy aprendiendo arduino).
He añadido un interruptor y un potenciómetro para ajustar el brillo del LED en una pequeña caja de control bajo la litera. Conectado junto a grupos de 6 LEDs a cada salida PWM del arduino y añade una resistencia de ohm k 1 a cada uno llevó para mantener la corriente abajo (no tienen que ser tan brillante) y todos los leds no sobrecargue el arduino. Escondí el desordenado cableado estirando una hoja de poliéster negro en la parte inferior de la litera y asegurándolo con los pedazos finos de moldura de pino. El brillo del LED muy bien a través de la tela, tipo de se puede ver en las fotos adjuntas.
#define MAX_FIREFLIES_ON 6
int PotPin = A0; ** analógico conectado al pote int fade = 0;
Cambiar estos valores para determinar cuánto el LED permanece apagado y cuánto tiempo permanecerá ON para las luciérnagas analógicas. Estos valores son en milisegundos 10 (es decir, 27 = 270 milisegundos). #define ANALOG_MIN_OFF 41 #define #define ANALOG_MAX_OFF 300 ANALOG_MIN_ON 50 #define ANALOG_MAX_ON 200
Cambiar estos valores para determinar cuánto el LED permanece apagado y cuánto tiempo permanecerá ON para las luciérnagas Digital. Estos valores son en milisegundos. #define DIGITAL_MAX_OFF 30000 de #define DIGITAL_MIN_OFF 4410 #define #define DIGITAL_MIN_ON 210 DIGITAL_MAX_ON 2100
El número de niveles de transición antes de que el LED está apagado con un PWM digital. Mejor no cambiar estos #define DIGITAL_FADE_INTERVAL 20 #define DIGITAL_FADE_WAIT 20
Utiliza para indicar los 4 Estados podemos ser pulg typedef enum {FADEUP, ON, FADEDOWN, OFF} FireflyState;
typedef struct FireFlyStruct {pin bytes; //PWM pines de salida son 3,5,6,9,10 y 11 FireflyState; //used para determinar qué estado el LED es, desvaneciéndose hasta abajo o en/valor largo sin firmar; //used como valor actual de LED
Duración de int de valores analógico; especifica cuánto tiempo el led estará encendido
Valores sin firmar largo tiempo digital; Utilizado para los cálculos de tiempo para ver si es tiempo de cambiar palanca boolean estado; Utilizado para cambiar el LED en/apagado con PWM sin firmar largo fundido; para calcular cuánto tiempo el led estará encendido para PWM durante una transición subida-bajada fadeWait largo sin firmar; utilizado para aumentar el tiempo que tarda en desaparecer por lo que sólo dura un poco más. } Firefly;
UNO R3 - 14 pins int analogPins [] = {3, 5, 6, 9, 10, 11}; int allPins [] = {3, 5, 6, 9, 10, 11};
Luciérnaga fireflies[sizeof(allPins)/sizeof(*allPins)];
Utilizado para determinar si el pin actual es un análogo o un Pin Digital. Boolean isAnalog (int pin) {int longitud = sizeof(analogPins)/sizeof(*analogPins); para (int i = 0; i
Al final de esta función, todas las luciérnagas será configuración //with los datos que necesitan para funcionar correctamente. También encendemos luciérnagas MAX_FIREFLIES_ON para empezar nosotros. ¿anular initialize() {para (int i = 0; i < (sizeof(fireflies)/sizeof(Firefly)); i ++) {//Why estoy usando esta notación puntero de tomar la dirección de la //and objeto entonces eliminar la referencia lo? Fue mostrar a alguien cómo hacerlo. Si te molesta, reemplace cada aparición de "ff ->" con "luciérnagas [i]." y //it ejecutará el mismo. Firefly * ff = & luciérnagas [i]; FF -> pin = allPins [i]; Si (i < MAX_FIREFLIES_ON) ff -> Estado = ON; otro ff -> Estado = OFF; FF -> valor = 0;
Ff de valores analógico -> duración = 0;
Digital valores ff -> tiempo = 0; FF -> toggle = true; FF -> fade = 0; FF -> fadeWait = 0;
Si (< MAX_FIREFLIES_ON) {si (isAnalog (ff -> pin) == true) ff -> duración = random (ANALOG_MIN_ON, ANALOG_MAX_ON); otro ff -> valor = millis() + random (DIGITAL_MIN_ON, DIGITAL_MAX_ON);} else {si (isAnalog (ff -> pin) == true) ff -> duración = random (ANALOG_MIN_OFF, ANALOG_MAX_OFF); otro ff -> valor = ff -> tiempo + random (DIGITAL_MIN_OFF DIGITAL_MAX_OFF); } } }
Determinar son cuantos LED actualmente en y si es igual a MAX_FIREFLIES_ON, devuelva true. Boolean isMaxFireflies() {boolean retValue = false; int cnt = 0; para (int i = 0; me < (sizeof(fireflies)/sizeof(Firefly)); i ++) {Firefly * ff = & luciérnagas [i]; si (ff -> Estado! = OFF) cnt ++;} si (cnt > = MAX_FIREFLIES_ON) {retValue = true;} volver retValue;}
Utilizado para nuestro retardo de 10 ms para analógico. analogDelayTime largo sin signo = 0;
/ * Nota de LUCIÉRNAGAS analógica: (hay un retardo de 10ms en todas luciérnagas analógicos).
Hay 4 Estados que las luciérnagas pueden. EN = mantiene el LED de encendido hasta que el contador llegue a la duración en. OFF = mantiene el LED apagado hasta que el contador llegue a la duración en. FADEUP = a lo largo de 500ms, cambio el LED brillo sobre 51 veces FADEDOWN = en el transcurso de 500ms, cambio el LED brillo unos 51 veces
Una vez terminada la luciérnaga es FADEUP determinará una duración aleatoria durante cuánto tiempo mantener el LED. Asimismo, FADEDOWN determina una duración aleatoria durante cuánto tiempo mantener el LED.
Si un LED está listo para activarse (FADEUP) comprobamos si hemos llegado a MAX_FIREFLIES_ON. Si tenemos, entonces fijamos ese LED al estado OFF y Dile que espere otra vez sin encender. * / void analogFireflies() {}
Poner un retardo de 10 ms en todas las cosas análogas. Si (millis ()-< 50 analogDelayTime) volver; analogDelayTime = millis();
Iterar a través de todas las luciérnagas analógicas para (int i = 0; i < (sizeof(fireflies)/sizeof(Firefly)); i ++) {Firefly * ff = & luciérnagas [i];
Si (isAnalog (ff -> pin) == false) continuar;
Si (ff -> Estado == ON) {/ / Pin en analogWrite (ff -> pin, fade);
FF -> valor += 1; Si (ff -> valor == ff -> duración) {ff -> Estado = FADEDOWN; ff -> valor = descolórese;}} else if (ff -> Estado == OFF) {/ / Pin Off analogWrite (ff -> pin, 0);
FF -> valor += 1; Si (ff -> valor == ff -> duración) {si (isMaxFireflies()) {ff -> valor = 0; ff -> Estado = OFF; ff -> duración = random (ANALOG_MIN_OFF, ANALOG_MAX_OFF);} else {ff -> Estado = FADEUP; ff -> valor = 0;}}} else if (ff -> Estado == FADEUP) {/ / se descolora de Pin Up ff -> valor += 1; //previously 5 analogWrite (ff -> pin, ff -> valor);
Si (ff -> valor == se descolora) {ff -> valor = 0; ff -> Estado = ON; ff -> duración = random (ANALOG_MIN_ON, ANALOG_MAX_ON);}} else if (ff -> Estado == FADEDOWN) {/ / se descolora abajo de Pin ff -> valor-=1; //previously 5 analogWrite (ff -> pin, ff -> valor);
Si (ff -> valor == 0) {ff -> valor = 0; ff -> Estado = OFF; ff -> duración = random (ANALOG_MIN_OFF, ANALOG_MAX_OFF);}} } }
//----------------------------------------------------------------------------------------------------
void turnLedOn (int pin) {}
Si (isAnalog(pin) == true) analogWrite (pin, 255); } void turnLedOff (int pin) {}
Si (isAnalog(pin) == true) analogWrite (pin, 0); }
Recorre en iteración todas las clavijas (digitales y analógicas) y enciende (hasta MAX_FIREFLIES_ON). Nos permite una oportunidad para asegurarse de que todos los LED están conectados y trabajo antes del comienzo del programa //and cuando en el arduino. void caterpillar() {int allcount = (sizeof(allPins)/sizeof(*allPins));
para (int i = allcount-1; i > = 0; i--) {si (i < allcount-MAX_FIREFLIES_ON) turnLedOff(allPins[MAX_FIREFLIES_ON+i]); turnLedOn(allPins[i]); delay(250);}
para (int i = MAX_FIREFLIES_ON-1; i > = 0; i--) {turnLedOff(allPins[i]); delay(250);}}
void setup() {//Set todos los pines digitales para salida pinMode (PotPin, entrada); Serial.Begin(9600); para (int i = 0; i < (sizeof(allPins)/sizeof(*allPins)); i ++) {/ / si (isAnalog(i) == false) / / pinMode (i, salida); / /}
Caterpillar(); Initialize(); }
void loop() {fade = map(analogRead(PotPin), 0, 1023, 1, 255); / / fade = 255; Serial.println(fade); analogFireflies(); }