Hechos a mano accionado Arduino RGB Moodlamp (5 / 7 paso)

Paso 5: El código:

En las fotos ver mi proceso con Arduino. En primer lugar he intentado todo con mi bolsa ProtoShield, una batería y algunas clases de LEDs.
Empecé con "Spooky proyectos" y "BionicArduino" de TodEKurt hace unos meses.
http://todbot.com/blog/spookyarduino/

Mi código es sólo una combinación difícil de su código de proyecto.
"RGBMoodlight", "RGBPotMixer"
y algunas extensiones.
Tres análogos de y.
digital en como selector de modo (gracias a Ju por la rutina de interrupción :).
Los LEDs están conectados a D9, D10 y D11, que PulseWithModulation.

Si lo desea, puedo publicar el bosquejo, pero es una combinación realmente desnuda de estas dos grandes códigos.

Aquí está mi código original de la lámpara.
Se ve un poco desordenado, porque era mi etapa muy temprana en la programación...
Pero si copiarlo, debería funcionar muy bien.

Hay paces finas, como el "PotColorMixer", "RGBfadingFunction" y la rutina de interrupción para el conmutador de modo.

/ * nejo June2008

  • Código para mi "Moodlamp", basada en "dimmingLEDs" de Clay Shirky < clay.shirky

* nejo Sep2008

  • Código final para el moodlamp con el interruptor de modo de interrupción, marcación analógica para desvanecimiento de RGB y RGB color cambio.
  • La función de regulación funciona sólo para el color blanco

* nejo October2008

  • Extensión de sonido para el moodlamp:
  • Un micrófono de condensador con un pequeño amplificador de LM368, un más recifier y un filtro RC-low-pass
  • con otro analogInput usar la función RGBPotMixer para cambiar el color haciendo la señal de micrófono.

*
*
* Código de fundido cruzado 3 LEDs, rojo, verde y azul o LED tri-color, utilizando PWM

  • El programa Cruz-se descolora lentamente de rojo a verde, verde y azul, azul rojo
  • El código de depuración asume Arduino 0004, ya que utiliza el nuevo Serial.begin ()-funciones del estilo
  • originalmente "dimmingLEDs" por Clay Shirky < clay.shirky

*

  • AnalogRead está habilitada en el Pin A0 para variar la velocidad de decoloración de RGB
  • AnalogRead está habilitado el Pin A2 para variar el color de hueRGB

*
*
*/

#include < avr/interrupt.h >
Salida
int ledPin = 13; controlPin para la depuración
redPin int = 9; LED rojo, conectado al pin digital 9
int greenPin = 10; LED verde, conectado al pin digital 10
bluePin int = 11; LED azul, conectado al pin digital 11

int dimredPin = 3; Pins para el análogo valor, conectado al conductor de transistor de regulación
int dimgreenPin = 5;
int dimbluePin = 6;

Entrada
int switchPin = 2; conmutador está conectado al pin D2
int val = 0; variable para lectura del estado del pin
int buttonState; variable que contenga el estado del botón
int buttonPresses = 0; 3 Prensas para ir!
int potPin0 = 0; Olla para ajustar el retardo entre que se descolora en Moodlamp;
int potPin2 = 2; Salida del potenciómetro para cambiar el color de hueRGB
int potVal = 0; Variable para almacenar la entrada desde el potenciómetro
int maxVal = 0; valor para salvar el defecto de factor atenuación es 255, si no Pot está conectado
int dimPin = 4; Pote conectado a A4 para atenuar el brillo

Variables de programa
int redVal = 255; Variables para almacenar los valores para enviar a los pasadores
greenVal int = 1; Valores iniciales son full rojo, verde y azul de
int blueVal = 1;

int i = 0; Contador de bucle
int espera; / / = 15; retraso de 50ms (.05 segundo); acortar para se desvanece más rápido
int k = 0; valor para el control de la función de abrir y cerrar
int DEBUG = 0; DEPURACIÓN de contador; Si establece en 1, escribir valores detrás vía serie
int LCD = 0; Contador LCD; Si establece en 1, escribir valores detrás vía serie

void setup()
{
pinMode (ledPin, salida);
pinMode (redPin, salida); define los pines como salida
pinMode (greenPin, salida);
pinMode (bluePin, salida);
pinMode(dimredPin,OUTPUT);
pinMode(dimgreenPin,OUTPUT); define los pines como salida
pinMode(dimbluePin,OUTPUT);
pinMode (potPin2, entrada); //
pinMode (potPin0, entrada); //
pinMode (dimPin, entrada); //
pinMode (switchPin, entrada); Configurar el pin de interruptor como entrada
attachInterrupt(0,isr0,RISING);

Si (depurar) {/ / si queremos ver los valores del pin para la depuración...
Serial.Begin(9600); ... fijó hasta la salida serial en estilo 0004
}
}

Principal del programa
void loop()
{

Si (buttonPresses == 0) {}
Moodlamp(); llama a la función Moodlight
}
Si (buttonPresses == 1) {}
RGBPotMixer(); llama a la función de mezcla de manuel
}
Si (buttonPresses == 2) {}

White(); Es todo blanco aquí
}
Si (buttonPresses == 3) {}

}

Moodlamp();
RGBPotMixer();
White();

Monitor();
DIM();
}
void Monitor() {/ estado, enviar al monitor

Si (depurar) {/ / si queremos leer la salida
DEPURAR += 1; Incrementar el contador de depuración
Si (depurar > 10) {/ / imprime cada 10 lazos
DEBUG = 1; El contador de
Serial.Print(i); Comandos serie estilo 0004
Serial.Print("\t"); Imprimir una ficha de
Serial.Print("R:"); Indican que la salida es valor rojo
Serial.Print(redVal); Imprimir valor rojo
Serial.Print("\t"); Imprimir una ficha de
Serial.Print("G:"); Repita para verde y azul...
Serial.Print(greenVal);
Serial.Print("\t");
Serial.Print("B:");
Serial.Print(blueVal); println, para terminar con un retorno de carro
Serial.Print("\t");
Serial.Print("dimValue:");
Serial.Print(maxVal); println, para terminar con un retorno de carro
Serial.Print("\t");
Serial.Print("Wait:");
Serial.Print(Wait); escribe el valor de la potPin0 en el monitor
Serial.Print("\t");
Serial.Print("hueRGBvalue");
Serial.Print(potVal); escribe el valor de la potPin0 en el monitor
Serial.Print("\t");
Serial.Print("buttonState:");
Serial.Print(buttonState); escribe el valor de la potPin0 en el monitor
Serial.Print("\t");
Serial.Print("buttonPresses:");
Serial.println(buttonPresses); escribe el valor de la buttonPresses en el monitor

}
}
}

void dim() / / función para la regulación blanco / / tal vez más adelante para todos los modos
{
maxVal = analogRead(dimPin);
maxVal = 4; Escala analógica de 0..1024--> demasiado para amortiguar el valor 0..255
analogWrite(dimredPin,maxVal);
analogWrite(dimgreenPin,maxVal);
analogWrite(dimbluePin,maxVal);

}

void Moodlamp()
{
esperar = analogRead(potPin0); Busque el valor de la potPin0;
Si no Pot está conectado: esperar 255

i += 1; Contador de incremento
i = i - maxVal;
Si (i < 255) / / primera fase de fusiones
{
redVal-= 1; Rojo hacia abajo
greenVal += 1; Verde para arriba
blueVal = 1; Baja azul
}
else if (< 509) / / segunda fase de fusiones
{
redVal = 1; Rojo bajo
greenVal-= 1; Verde abajo
blueVal += 1; Arriba azul
}
else if (< 763) / / tercera fase de transiciones
{
redVal += 1; Rojo hasta
greenVal = 1; Lo2 verde
blueVal-= 1; Abajo azul
}
Else / / volver a poner el contador, y reactivar los fundidos
{
i = 1;
}

hacemos "255-redVal" en lugar de simplemente "redVal" porque el
LEDs están enganchados a + 5V en vez de tierra

analogWrite (redPin, 255 - redVal); Escribir valores actuales a los pines del LED
analogWrite (greenPin, 255 - greenVal);
analogWrite (bluePin, 255 - blueVal);

/ * dimredVal = min (redVal - maxVal, 255); atenuación
dimredVal = max (redVal - maxVal, 0);
dimgreenVal = min (greenVal - maxVal, 255);
dimgreenVal = max (greenVal - maxVal, 0);
dimblueVal = min (blueVal - maxVal, 255);
dimblueVal = max (blueVal - maxVal, 0);

analogWrite (redPin, 255 - dimredVal); Escribir valores actuales a los pines del LED
analogWrite (greenPin, 255 - dimgreenVal);
analogWrite (bluePin, 255 - dimblueVal);
*/

esperar / = 4;
Delay(Wait); Pausa para 'esperar' milisegundos antes de reanudar el lazo

}

void RGBPotMixer()
{
potVal = analogRead(potPin2); leer el valor del potenciómetro en la entrada de pin
potVal = potVal / 4; convertir de 0-1023 a 0-255

hue_to_rgb (potVal); potVal como tono y convertir a rgb vals

"255-" es porque tenemos LEDs de ánodo común, no común-cátodo
analogWrite (redPin, 255-redVal); Escribir valores en los pines del LED
analogWrite (greenPin, 255-greenVal);
analogWrite (bluePin, 255-blueVal);

}

void White() {}
analogWrite (redPin, maxVal); Escribir valores en los pines del LED
analogWrite (greenPin, maxVal);
analogWrite (bluePin, maxVal);
}

/*

  • Dado una tonalidad variable 'h', que va desde 0-252,
  • establecer adecuadamente el valor de color RGB.
  • Asume maxValimum máximo valor (luminosidad) y saturación
  • Realiza puramente matemáticas de entero, sin punto flotante.

*/
void hue_to_rgb(byte hue)
{
Si hue (matiz > 252) = 252; stetback a 252! Nejo
byte hd = tono / 42; 36 == 252/7, 252 == H_MAX
byte Hola = hd % 6; da de 0-5
f bytes = hue % 42;
byte fs = f * 6;
interruptor (Hola) {}
caso 0:
redVal = 252; greenVal = fs. blueVal = 0;
rotura;
caso 1:
redVal = 252-fs. greenVal = 252; blueVal = 0;
rotura;
caso 2:
redVal = 0; greenVal = 252; blueVal = fs.
rotura;
caso 3:
redVal = 0; greenVal = 252-fs. blueVal = 252;
rotura;
caso 4:
redVal = fs. greenVal = 0; blueVal = 252;
rotura;
caso 5:
redVal = 252; greenVal = 0; blueVal = 252-fs.
rotura;
}
}
void isr0() {}
Serial.println ("\n \n inerrupt \n");

buttonState = digitalRead(switchPin); Lee el estado inicial
delayMicroseconds(100000);
Si (val! = buttonState) {/ / el estado de botón ha cambiado!

Si (buttonState == HIGH) {/ / comprobar si ahora se pulsa el botón
buttonPresses ++;

// }
Val = buttonState; guardar el nuevo estado en nuestra variable
Si (buttonPresses == 3) {/ / zur cksetzen
buttonPresses = 0;
}
}

// }

Siguiente etapa eran los drivers de transistor. Usé 3 transistores PNP con una corriente máxima de 3 amperios. Después adelante-corriente y voltaje se regulación, el LEDemitter funcionó muy bien con toda intensidad.

Artículos Relacionados

Arduino rgb led reloj

Arduino rgb led reloj

reloj de arduino RGB led¿Cómo saber el tiempo que usted podría pedir?azul brillante es la manecilla de las horasCeleste es el minuteroel blanca es la segunda manoazul tenue es el segundo de 1/12 para mayor atención pero también se puede cambiar en el
Caja de papel fácil DIY: Cómo hacer papel hecho a mano caja de regalo en 5 minutos!

Caja de papel fácil DIY: Cómo hacer papel hecho a mano caja de regalo en 5 minutos!

Hola mis amantes Instructable compañeros! Esta vez traigo para ti una bonita mira y fácil de hacer DIY fácil Idea de caja de papel que hace para una adorabletutorial completo paso a paso sobre cómo hacer una caja de regalo de papel hecho a mano en 5
Cómo aplicar y vender con hecho a mano en Amazon

Cómo aplicar y vender con hecho a mano en Amazon

Amazon recientemente abrió un mercado artesanal todos en su sitio llamado hecho a mano en Amazon. Como alguien que ha estado vendiendo bordados y joyas durante años a través de Etsy, me estaba excitando al tratar de otro mercado.A lo largo de los año
Rústico hecho a mano buscando señal

Rústico hecho a mano buscando señal

Se trata de cómo hacer un cartel hecho a mano de relativamente bajo costo y utilizando sólo unas pocas herramientas de mano...Paso 1: Herramientas y materiales necesarios He utilizado:Un par de tijeras de trabajo pesadoUn par de cortadores de alambre
La cinta de caja de joyería/recuerdo lona plástica bordado (un regalo hecho a mano perfecto)

La cinta de caja de joyería/recuerdo lona plástica bordado (un regalo hecho a mano perfecto)

todo el mundo ama regalos en Navidad y los especialmente hechos a mano. Realmente son admirados por la mayoría de la gente para demostrar sus fuertes sentimientos y emociones a los demás. En este instructable les comparto el patrón de uno de mis mejo
Posavasos hechos a mano

Posavasos hechos a mano

estos Posavasos personalizados, fácil hacen última hora (hecho a mano!) un regalo ideal para cualquier persona en su lista.  Con unos simples, fáciles de encontrar fuentes, puede crear conjuntos de montaña único en una tarde.Todo lo que toma algunos
Cuaderno hecho a mano

Cuaderno hecho a mano

Crear un hermoso cuaderno hecho a mano desde cero en unos pocos pasos :)Paso 1:Cómo hacer un cuaderno cosido a mano a mano desde cero!En este tutorial vas a aprender cómo hacer un libro artesanal con unos pocos materiales en pocos minutos :)Espero qu
Hecho a mano libélula

Hecho a mano libélula

esta libélula resplandor-en-el-oscuro-eyed, hecho a mano es mi más reciente creación. No era un proyecto demasiado difícil pero hecho para un regalo inusual e interesante. Pensé que podría ser un divertido proyecto para compartir como fue muy gratifi
¿Anillo de compromiso hecho a mano

¿Anillo de compromiso hecho a mano

por lo que es? ¿Estás loco por tu novia, correcto? Bien buena porque su tiempo se dio cuenta ella es increíble! Es enteramente posible elaborar un anillo de compromiso hecho a mano por ella. Que lo que me pasó!Esta guía es un anillo de compromiso pla
Un Halloween hecho a mano!

Un Halloween hecho a mano!

me divertí mucho creando esta fiesta y mi pequeñín tenía divertido diseñar sus propias creaciones también!  Los tutoriales paso a paso para las manzanas de caramelo de árboles espeluznante murciélago, fantasma y calabaza Cupcake Toppers en los palill
Etiquetas de regalo de Navidad hecho a mano

Etiquetas de regalo de Navidad hecho a mano

¿Interesado en hacer tus regalos más personalizados? Crear una etiqueta de regalo hecho a mano fácil para su especial alguien! Haga clic aquí para el tutorial! Diviértete y disfruta! Aquí es la tinta del texto al tutorial: https://www.youtube.com/wat
Gato de calcetín DIY. Regalo hecho a mano para niños

Gato de calcetín DIY. Regalo hecho a mano para niños

Aquí está mi proyecto de gato calcetines. Este gato no es un simple juguete de peluche, jingles y arrugas!Lo hice para mi hijo pequeño cuando tenía 11 meses de edad. Ahora tiene 15 meses y todavía ama a este pequeño amigo gordita. Creo que estas un j
Con monograma hecho a mano papel artesanal en un marco

Con monograma hecho a mano papel artesanal en un marco

Hola cada uno,Al día sólo quiero compartir Monogramed dibujado a mano papel artesanal en un marco.Me encantaría hacer algo a mano.Regalos hechos a mano son tan emocionantes porque son algo totalmente único.Cómo:Materiales:1. marco de fotos de 8/102 p
Hecho a mano taburete del pie

Hecho a mano taburete del pie

aquí están algunas direcciones bastante fáciles para usted hacer un taburete de pie hecho de mano. Este es un proyecto que estoy planeando hacer en mi escuela con mis alumnos de terceros grado. Será una experiencia de medios mixtos que incluye trabaj