Control remoto de iluminación del humor de Arduino (3 / 6 paso)

Paso 3: El código

Al escribir esto, estoy suponiendo que el constructor sabe cómo añadir una biblioteca a su entorno de desarrollo Arduino. Usted necesitará agregar dos bibliotecas. Aquí un Instructable que le ayudará a comenzar a utilizar un receptor de infrarrojos.

El código hace uso de dos bibliotecas necesarias y una tercera biblioteca opcional que siempre utilizo al depurar. La biblioteca de Streaming permite declaraciones de una línea rápidas que pueden enviarse a la consola de terminal.

La excelente biblioteca de IRLib es una mejora sobre varias otras bibliotecas IR en que encapsula la funcionalidad de una manera que sólo requiere un par líneas para conseguir funcionalidad IR. También cuenta con soporte para la transmisión de la IR, que no utilizo en este proyecto. Está muy bien documentada y un ejemplo del código bueno, apretado. Este es, sin duda uno para guardar en su bolsa de trucos.

Hay una empresa que hace luz tiras usando el mismo chip utilizado por la banda de Radio Shack (RIP). Su biblioteca, PololuLedStrip, proporciona una interfaz fácil de usar en cualquier tira que utiliza el chip TM1804. La biblioteca de chip también soporta otros chips utilizados por las tiras de LED más actuales.

El código está comentado, pero hay algunas cosas a destacar:

  • La presetColor de la matriz es una lista de colores que se cargará al pulsar un botón del mando a distancia. Esta había programado para el botón de "Play" en la mía, pero se puede asignar a lo que te gusta. Estas se designan como valores RGB, {255, 255, 255} ser blanco más brillante y {0, 64, 0} es un verde, por ejemplo. Puede crear ajustes preestablecidos como muchos como usted quisiera. Observe que cada otro preset {0,0,0}, que esencialmente se apaga las luces. Esto es bueno para girar rápidamente la cosas por tiempo soñoliento.
  • En la función loop(), verás el decodificador IR siendo llamado. Hay varios tipos de controles remotos infrarrojos por ahí, y la biblioteca de IRLib puede encontrar muchos de ellos. Usted tendrá que jugar con este código para ver exactamente lo que su control remoto está enviando para que pueda aislar los códigos y asignarlos a la funcionalidad en su programa. Hay excelente documentación en formato PDF en la biblioteca para ayudarle.
  • Este mando a distancia concreto ofrece un valor único para cada botón empujado, pero cuando se mantiene pulsado el botón, envía un valor de 0xFFFFFFFF. Todo lo que necesitamos hacer es recordar el anterior código enviado y, al ver todos F, proceso sólo el último valor.
  • Hay una pequeña función, playTone, que envía pulsos al altavoz. El entorno de desarrollo Arduino tiene una función de tono, pero utiliza interrupciones. Desafortunadamente, esas mismas interrupciones son utilizadas por la biblioteca de IRLib, por lo que no podemos usar el tono y IRLib en el mismo bosquejo sin modificaciones significativas a las bibliotecas. Esta función simple hace todo lo que necesitamos para esta simple aplicación sin utilizar interrupciones. Saber que cuanto mayor sea el número, menor será el tono.
  • Tengo dos mandos que parecen idénticos, pero que proporcionan códigos diferentes para cada botón. No es problema cuando se usa la magia de la estructura switch/case de C. Se dará cuenta de dos casos para cada bloque. Esto indica que los códigos enviados por cada control remoto. Posiblemente podría tener una docena de mandos, cada uno dando un código diferente y atraparlos a todos con este método.
  • El arriba y abajo teclas ajustar el brillo y los botones derecho e izquierdos a pie a través de la rueda de color.
  • El botón de "Menú" inicia el modo de rueda de color. La idea es que utilices las teclas arriba/abajo/derecha/izquierda para conseguir el color inicial y presione el botón Menu. Los colores comenzarán a cambiar, correr todo el camino alrededor de la rueda de color hasta que se pulse otra tecla. Esto proporciona una relajante iluminación de estado de ánimo si estás en ese tipo de cosas.
  • El botón de "Play" proporciona acceso rápido a los colores predefinidos que se mencionaron anteriormente.
  • El programa termina con funciones de conversión para convertir entre RGB y HSV.

Los pernos que usé fueron principalmente para comodidad o hábito. Puede cambiar las clavijas a los que las distintas partes están conectadas siempre y cuando realice los cambios apropiados en el código.

HeadboardLight.h

HeadboardLight.ino

HeadboardLight.ino / / IRLib.h de IRLib-una biblioteca de Arduino para infrarrojo de codificación y descodificación < br > / / versión 1.5 junio de 2014 / / 2014 Copyright por Chris Young < a href = "http://cyborg5.com" rel = "nofollow" > http://cyborg5.com</a> #include < IRLib.h > / / Streaming.h - biblioteca de Arduino para apoyar la << operador de streaming / / Copyright (c) 2010-2012 Mikal Hart. Todos los derechos reservados. #include < Streaming.h > / / práctico biblioteca para facilitar declaraciones de depuración / Chip LED tira biblioteca. En < a href = "https://github.com/pololu/pololu-led-strip-arduino" rel = "nofollow" > http://cyborg5.com</a> #include < PololuLedStrip.h > / Biblioteca luz tira #include "HeadboardLight.h" / incluye archivo para este proyecto //#define DEBUG / global declaración de depuración. Comentario para incluir el código de depuración / / crear un objeto de receptor para escuchar en el pin 11 IRrecv My_Receiver(9); IRdecode My_Decoder; valor largo sin firmar; last_value largo sin firmar; int j; Crear un objeto ledStrip en pin 12. PololuLedStrip < 12 > ledStrip; int onboard_led = 13; sólo para que retroalimentación para asegurarse de que estamos recibiendo algo / / crear un búfer para la celebración de 10 colores. Toma 30 bytes. #define LED_COUNT 10 rgb_color colores [LED_COUNT]; color de rgb_color; Existen dos estándares de color utilizados aquí. RGB impulsa la tira de la luz, / / pero es más conveniente para hacer progresiones de rueda de color HSV. Hay / son funciones para convertir entre los dos. int hsv_h = 0; doble hsv_s = 1; doble hsv_v = 0.1; bool colorWheel = false; hsv_current de hsv_color; presets rápidas. Cada otro es apagado de una manera fácil de convertir todo apagado rgb_color presetColor [] = {{0, 0, 0}, {255, 255, 255}, {0, 0, 0}, {16, 16, 16}, {0, 0, 0}, {64, 0, 0}, {0, 0, 0}, {0, 64, 0}, {0, 0, 0}, {0, 0, 64}, {0, 0, 0}, {64, 64, 0}, {0, 0, 0}, {64, 0, 64}, {0, 0, 0} {0, 64, 64}}; char presetColorSize = sizeof (presetColor) / 3; char presetTracker = 0; int buzzPin = 7; void setup() {#ifdef DEBUG Serial.begin(9600); #endif My_Receiver.enableIRIn(); / / iniciar el color del receptor IR = hsvToRgb (hsv_h, hsv_s, hsv_v); writeLeds(color); / Asegúrese de pernos están apuntando la dirección correcta pinMode (onboard_led, salida); pinMode (buzzPin, salida);} void loop() {//Continuously Busque resultados
. Cuando tienes pasarlos al decodificador Si (My_Receiver.GetResults (& My_Decoder)) {My_Decoder.decode(); //Decode los datos #ifdef DEBUG Serial << "0 x" << _HEX(value) << endl; #endif si (NEC My_Decoder.decode_type==) {valor = My_Decoder.value; #ifdef DEBUG Serial << "\t\tcase 0 x" << _HEX(value) << endl; #endif si (valor == 0xFFFFFFFF) / / presionado para repetir {valor = last_value;} #ifdef DEBUG Serial << _HEX(value) << endl; #endif switch () valor) {0x77E1D074 del caso: caso 0x77E15054: #ifdef DEBUG Serial << "hasta" << endl; #endif hsv_v += 0.05; si (hsv_v > 0,95) {hsv_v = 0.95; playTone(244);} else {playTone(122);} color = hsvToRgb (hsv_h, hsv_s, hsv_v); break; caso 0x77E1E074: caso 0x77E16054: #ifdef DEBUG Serial << «derecho» << endl; #endif hsv_h += 10; si (hsv_h > 359) {hsv_h = 0; playTone(244);} else {playTone(200);} color = hsvToRgb (hsv_h hsv_s, hsv_v); rotura; 0x77E1B074 del caso: caso 0x77E13054: #ifdef DEBUG Serial << "abajo" << endl; #endif hsv_v-= 0.05; Si (hsv_v < 0.05) {hsv_v = 0.0; playTone(244);} else {playTone(122);} color = hsvToRgb (hsv_h, hsv_s, hsv_v); rotura; 0x77E11074 del caso: caso 0x77E19054: #ifdef DEBUG Serial << "izquierda" << endl; #endif hsv_h-= 10; Si (hsv_h < 1) {hsv_h = 359; playTone(244);} else {playTone(200);} color = hsvToRgb (hsv_h, hsv_s, hsv_v); rotura; 0x77E12074 del caso: caso 0x77E1A054: #ifdef DEBUG Serial << "jugar" << endl; #endif color = presetColor [presetTracker]; ++ presetTracker; Si (presetTracker > presetColorSize) presetTracker = 0; para (j = 0; j < 2; j ++) {playTone(122); delay(20); playTone(244); delay(20);} / / valores hsv actuales para la preselección hsv_current = rgbToHsv (color.red, color.green, color.blue); hsv_h = hsv_current.h; hsv_s = hsv_current.s; hsv_v = hsv_current.v; #ifdef DEBUG Serial << "hsv(a):" << hsv_h << "," << hsv_s << "," << hsv_v << endl << "---" << endl; #endif rotura; 0x77E14074 del caso: caso 0x77E1C054: #ifdef DEBUG Serial << "menú" << endl; #endif si (colorWheel) {colorWheel = false; para (j = 1; j < = 5; j ++) {playTone(j * 20);}} else {colorWheel = true; para (j = 5; j > 0; j--) {playTone(j * 20);}} break; } last_value = valor; } writeLeds(color); My_Receiver.resume(); Reiniciar el receptor} delay(30); entrar en modo de rueda de color con corriente s y v si (colorWheel) {si (++ hsv_h > 359) hsv_h = 0; color = hsvToRgb (hsv_h, hsv_s, hsv_v); writeLeds(color); delay(20);}} anular playTone (int valor) {digitalWrite (onboard_led, HIGH); / / enciende el LED (alto es el nivel de voltaje) para (tiempo he = 0; me < 64 * 3; i ++) {/ / 1 2048 Hz = 488uS, o 244uS alta y baja 244uS para crear 50% duty ciclo digitalWrite (buzzPin, HIGH); digitalWrite (buzzPin, bajo), delayMicroseconds(value); delayMicroseconds(value);} digitalWrite (onboard_led, LOW); / / apagar el LED por lo que la tensión baja} void writeLeds (rgb_color c) {para (int me = 0; me < LED_COUNT; i ++) {.red de colores [i] = gris; .green colores [i] = c.green; .blue colores [i] = c.blue; } ledStrip.write (colores, LED_COUNT); } / / Convertir VHS a hsvToRgb de rgb_color RGB correspondiente (int h, s doble, v doble) {rgb_color rgb; / / asegurarse de que nuestros argumentos permanezcan dentro de la gama h = max (0, min (360, h)); s = max (0, min (1,0, s)); v = max (0, min (1,0, v)); if(s == 0) {/ / acromáticas (gris) rgb.red = rgb.green = rgb.blue = round(v * 255); return rgb;} doble capítulo = h / 60.0; / / sector int 0 a 5 me = floor(hs); f doble = hs - i; / / factorial parte de h p doble = v * (1 - s); doble q = v * (1 - s * f); doble t = v * (1 - s * (1 - f)); doble r, g, b; Switch(i) {caso 0: r = v; g = t; b = p; break; caso 1: r = q; g = v; b = p; break; caso 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; caso 4: r = t, g = p; b = v; break; default: / / caso 5: r = v; g = p; b = q;} rgb.red = round(r * 255.0); RGB.Green = round(g * 255.0); RGB.Blue = round(b * 255.0); volver a rgb; } / / convertir RGB a la correspondiente HSV hsv_color rgbToHsv (unsigned char r, g unsigned char, unsigned char b) {doble rd = r/255 (doble); doble gd = g/255 (doble); doble bd = b/255 (doble); doble d_h doble máximo = max (rd, max (gd, bd)), min = min (rd, min (gd, bd)); hsv_color hsv; hsv.v = max; doble d = max - min; hsv.s = max == 0? 0 : d / max; Si (== max min) {d_h = 0;} otro {si (max == rd) {d_h = (gd - bd) / d + (gd < bd? 6: 0);} else if (max == gd) {d_h = (bd - rd) / d + 2;} else if (max == bd) {d_h = (rd - gd) / d + 4;} d_h = 6;} hsv.h = d_h * 360; volver hsv; }

Artículos Relacionados

Iluminación del humor de Arduino

Iluminación del humor de Arduino

este instructable le mostrará que para construir un sistema de iluminación rgb con un arduino. También se puede controlar con un ipod/iphone/ipad con touchOSC. En mi anterior instructable mostré cómo controlar un rgb llevado montones en esto que se p
Iluminación del humor usando recycleables

Iluminación del humor usando recycleables

quería algunos iluminación del humor en mi dormitorio y quería probar mi mano en el uso de LEDs, así que aquí es un artefacto de iluminación ambiente que utiliza LEDs de color rojo y emite suficiente luz y se ve realmente genial. Todo el diseño fue i
Iluminación del humor de gabinete de la TV

Iluminación del humor de gabinete de la TV

gire su TV gabinete en una decoración luz de estado de ánimo que cambia de color! Elegir colores para emparejar su estado de ánimo y compartir con amigos!Paso 1: Las lámparas LED con control remoto inalámbrico Paso 2: Se unió a una cadena de luces de
¿Control de tus LEDs con control remoto de tu TV? || Tutorial de Arduino IR

¿Control de tus LEDs con control remoto de tu TV? || Tutorial de Arduino IR

En este proyecto les mostraré cómo reutilizar los botones inútiles en mi TV remoto para controlar los LEDs detrás de mi TV. También puede utilizar esta técnica para controlar a todo tipo de cosas con un poco de edición de código. También hablaré un p
Teléfono control iluminación del humor de

Teléfono control iluminación del humor de

Los dormitorios son conocidos por su terrible iluminación, así que quería hacer una fuente de luz alternativa cool para mi cuarto en la escuela. Dicho teléfono controlado por lo que sería un fácil e inalámbrico para cambiar el color de la iluminación
Iluminación del humor de

Iluminación del humor de

esto es una gran noche de luz o sólo para tener atmósfera.Tomamos nuestro instructivo y había modificado un poco.Vaya al paso 7 para ver los cambios. No olvide revisar la lista aunque.Paso 1: materiales Titular de LEDLED (Color)Arandela guardabarrosI
Iluminación del humor no aplique, con viejos cds

Iluminación del humor no aplique, con viejos cds

la lámpara de la palabra significa un sostenedor de vela con una espalda plana, a menudo reflexivo. Como solamente hice la parte de atrás no puedo llamo una lámpara, por lo que es un no aplique.Primero hice esto con los CD de sobras de una lámpara qu
Luz del humor de Arduino

Luz del humor de Arduino

Este es un proyecto simple basado en Adafruit Arduino - Lección 3. RGB LEDhttps://Learn.Adafruit.com/Adafruit-Arduino-Lesson-3-RGB-LEDs/Arduino-SketchEncontrarás un montón de información útil sobre LEDs RGB si sigues el enlace.El programa original er
ESTANTES de la plataforma rústica - con iluminación LED del Control remoto

ESTANTES de la plataforma rústica - con iluminación LED del Control remoto

Viviendo en nuestra primera casa de mi novio y no tenía un montón de espacio en nuestra cocina para una mesa de otra entonces un pequeño 2 plazas ' familia get de junto o tener amigos sobre algo difícil. Adyacente hacia fuera a la cocina era una habi
Control remoto de lámpara de tela

Control remoto de lámpara de tela

Lo tackiest... ocupa una planta de flor de Pascua que "ganó" en la fiesta fiesta Yankee Swap en diciembre. Todavía tengo la planta, tiene gran hacer, pero relevó del cubo horrible estaba sentado en. Era tan feo, que no quería fotografiarla como
Luces de Control remoto

Luces de Control remoto

Usted conoce el problema: usted está sentado en la cama leyendo un buen libro (o en Facebook, cualquiera que sea) y quieres apagar la luz sin levantarse de la cama. ¿Tal vez algunas luces controladas remotos sería perfectos? Es lo que pensé de todos
Lámpara estrella de la muerte IKEA con control remoto

Lámpara estrella de la muerte IKEA con control remoto

Siendo Ingeniero yo no pude resistir añadir control remoto a esta lámpara extensible manualmente que vi en IKEA, sin importar el costo. En este proyecto he reemplazado la cadena tire con varilla roscada M3 y motor de la C.C., agrega un microcontrolad
Control remoto de osito

Control remoto de osito

el mando de oso de peluche se sienta muy bien en tu sofá o cama y puede utilizarse para controlar su iPod o computadora. Es una linda modificación a un mando a distancia RF y es sorprendentemente suave. El proyecto es difícil de hacer y requiere muy
Estación de Control remoto IR para Android - baje la TV

Estación de Control remoto IR para Android - baje la TV

Nota: esta guía también puede encontrarse en TECHBITAR.COMACTUALIZACIÓN28 de noviembre de 2013: Aparece en prototipos peligroso http://goo.gl/FjwNoQINTRODUCCIÓNEn esta guía voy a explicar la elaboración y operación de un circuito simple de basados en