Paso 8: Archivos de Hardware
Los LEDs utilizados son originalmente CREE Xlamp 7090 pero cualquier trabajo de vatios LED de 1 + OK. Las resistencias de equilibrio son de aproximadamente 1 ohm, pero se pueden ajustar. Utilizar 2 sistemas de 6 LED para todo tri-color (más versátil). O 3 sets de 6 LEDs verde/azul sólo (más eficaz)
El arduino (o compatible) está conectado a los LEDs mediante FETs de canal N nivel de lógica. El diagrama muestra 2 grupos de 3 colores pero se puede cambiar fácilmente de 2 colores. Si se utilizan LEDs de color rojo, debe colocarse un 0,5 ohm, 5W led en serie con el cable a la placa de LED.
Código:
BeDazzler! Un buen proyecto de múltiples LED PWM, por Limor Fried
Dominio público 2009
#include < util/delay.h >
int valor;
int redpin1 = 5 redpin2 = 6;
int greenpin1 = 3, greenpin2 = 11;
int bluepin1 = 9, bluepin2 = 10;
int ledmax;
#define brillo 0
#define remolino 1
#define DAZZLE 2
volátil int modo = deslumbra;
Utilizamos un botón en el pin 2 (pin de interrupción) para detectar cambios de modo
void modechange(void)
{
Debounce lo
Si (digitalRead(2) == LOW) {}
_delay_ms(10);
Si (digitalRead(2)! = baja)
retorno;
Serial.println("Button");
modo ++;
Si (modo > 2)
modo = 0;
Serial.Print ("nuevo modo!");
Serial.println (modo, DEC);
}
}
void setup()
{
pinMode (2, entrada);
digitalWrite (2, alto); subida en el botón de modo
attachInterrupt (0, modechange, cambio);
Serial.Begin(9600);
randomSeed(analogRead(0));
nada para la configuración de
analogWrite (redpin1, 0);
analogWrite (redpin2, 0);
analogWrite (greenpin1, 0);
analogWrite (greenpin2, 0);
analogWrite (bluepin1, 0);
analogWrite (bluepin2, 0);
LEDMAX = 250; cambiar este valor para ajustar el brillo máximo
}
void loop()
{
{Switch(Mode)}
caso de remolino:
Serial.println("Swirl");
ckswirl (ledmax, 10);
rotura;
caso de GLITTER:
Serial.println("Glimmer");
glimmertest (ledmax, ledmax/10, 30);
rotura;
caso DAZZLE:
Serial.println("Dazzle");
BeDazzle (ledmax, 10, 7, 11);
rotura;
}
}
void bedazzle (ledmax int, int pulselensec, int freqmin, int freqmax) {}
pulsos largo;
analogWrite (redpin1, 0);
analogWrite (redpin2, 0);
analogWrite (greenpin1, 0);
analogWrite (greenpin2, 0);
analogWrite (bluepin1, 0);
analogWrite (bluepin2, 0);
Tenga en cuenta que no utilizar LEDs de color rojo en este
int freq = random (freqmin, freqmax + 1);
int pulsedelay = 1000/freq;
pulsedelay = 2;
pulsos = pulselensec;
legumbres * = 1000;
pulsos / = 2 * pulsedelay;
/*
Serial.Print ("pulsar en");
Serial.Print (freq, DEC);
Serial.Print ("Hz ('');
Serial.Print (pulsedelay, DEC);
Serial.println ("ms on/off)");
Serial.Print(pulses);
Serial.println ("pulsos");
*/
mientras (pulsos--) {}
analogWrite (greenpin1, ledmax);
analogWrite (greenpin2, ledmax);
analogWrite (bluepin1, ledmax);
analogWrite (bluepin2, ledmax);
_delay_ms(pulsedelay);
analogWrite (greenpin1, 0);
analogWrite (greenpin2, 0);
analogWrite (bluepin1, 0);
analogWrite (bluepin2, 0);
_delay_ms(pulsedelay);
Si (modo! = DAZZLE) volver;
}
}
void ckswirl (int ledmax, uint8_t z) {}
int r, g, b;
Fade de rojo a naranja a amarillo a verde
para (g = 0; g / / a rojo hacia abajo
analogWrite (redpin1, ledmax-g);
analogWrite (redpin2, ledmax-g);
analogWrite (greenpin1, g); establece el valor (rango de 0 a 255)
analogWrite (greenpin2, g); establece el valor (rango de 0 a 255)
Delay(z);
Si (modo! = remolino) volver;
}
Fade de verde a azul
para (b = 0; b / / a rojo hacia abajo
analogWrite (bluepin1, b);
analogWrite (bluepin2, b);
analogWrite (greenpin1, ledmax-b); establece el valor (rango de 0 a 255)
analogWrite (greenpin2, ledmax-b); establece el valor (rango de 0 a 255)
Delay(z);
Si (modo! = remolino) volver;
}
de azul a rojo
para (i = 0; r / / a rojo hacia abajo
analogWrite (redpin1, r);
analogWrite (redpin2, r);
analogWrite (bluepin1, ledmax-r); establece el valor (rango de 0 a 255)
analogWrite (bluepin2, ledmax-r); establece el valor (rango de 0 a 255)
Delay(z);
Si (modo! = remolino) volver;
}
}
void glimmertest (int maxvalue, int incr, int z) {}
para (valor = 0; valor < = maxvalue; valor += incr)
{
analogWrite (greenpin1, valor); establece el valor (rango de 0 a 255)
analogWrite (greenpin2, valor maxvalue); establece el valor (rango de 0 a 255)
analogWrite (bluepin1, valor);
analogWrite (bluepin2, valor maxvalue); establece el valor (rango de 0 a 255)
analogWrite (redpin1, valor);
analogWrite (redpin2, valor maxvalue); establece el valor (rango de 0 a 255)
Delay(z); espera 30 milisegundos ver el efecto de atenuación
Si (modo! = brillo) volver;
}
para (valor = maxvalue; valor > = 0; valor = incr) / / se descoloran hacia fuera (de max a min)
{
analogWrite (greenpin1, valor);
analogWrite (greenpin2, valor maxvalue); establece el valor (rango de 0 a 255)
analogWrite (bluepin1, valor);
analogWrite (bluepin2, valor maxvalue); establece el valor (rango de 0 a 255)
analogWrite (redpin1, valor);
analogWrite (redpin2, valor maxvalue); establece el valor (rango de 0 a 255)
Delay(z);
Si (modo! = brillo) volver;
}
}