Paso 6: El bosquejo más reciente.
- Prueba de tacto y de la matriz Tri-LED (Piraña)
- (C) Copyright 2009 qs
- Módulos (seleccionados por progMode)
- 0 - secuencia
- 1 - luz blanca. Se atenúa mientras que en 'hold'.
- 2 - colores de morphing. Luces al azar mezclando lentamente.
- 3 - luz del fuego. Llamas parpadeantes (difíciles de hacer cuando hay no real amarillo!)
- 4 - luciérnagas. Emular el ritual del cortejo de la especie.
*
- 20mA había integrado color LEDs - común ánodo!!!!
- D02 - rojo (baja para encender!)
- D03 - verde
- D04 - azul
- D05 - LED de la derecha (alto para encender)
- D06 - centro LED
- D07 - LED de la izquierda
*/
int matriz [5] = {}
0660,0626,0466,0,0}
; Display arco iris
int matrix02 [5] [2] = {/ / Morphing rutina y firelight
{
511,7}
,{
511,56}
,{
511.504}
,{
511,0}
,{
511.504}
};
unsigned int firefly [4] = {}
0xdd42 0xff00, 0x8a00, 0x2200};
/ * Luciérnagas:
- MSB - (7:5) intensidad (0-7)
- (4:2) retraso en unidades de 1/2 seg.
- (1:0) tipo de insecto (1 = mujer, 2, 3 = varones)
*/
Para el ajuste de secuencias paso a paso
bigDelay largo = 300, bigD;
int fsuitors = 0, i, j, val, LED, c0, c1, r0, g0, b0, r1, g1, b1, blanco = 7;
int progMode = 0; ... El interruptor selector de caso (99 es prueba)
int controlPin = 12, sw02 = 0; Cambiar estado en A02
dttimer02 largo sin signo = 0, timer02 = 0, ffTimer = 0; Contadores de tiempo del perro guardián
umbral de int = 100; triple de milisegundos para un 'toque', de 'hold'
void setup() {}
para (int i = 2; i < = 7; i ++) {}
pinMode(i,OUTPUT);
digitalWrite (i, i < 5);
}
randomSeed(analogRead(0));
pinMode(12,OUTPUT); Nuestro interruptor de mando principal
digitalWrite(12,LOW);
analogReference(INTERNAL); Sensibilidad de Boost (tacto). Aref es offlimits!
para (i = 1; i < 4; i ++) {/ / establecer rutina de luciérnagas
j = random(2,4); Tipo de hombre
j += ((j + i-3) << 2); Vitalidad (falta de) 0-7
Firefly [i] = (j << 8) | (j << 1) |
((i+3) << 13); Energía (brillo)
}
}
void loop() {}
bigD = bigDelay+millis(); Tiempo de espera de Calc
interruptor (progMode) {}
caso 0:
{}
para (LED = 0; LED < = 2; LED++)
writeLED(LED,matrix[LED]);
}
mientras que (bigD > = millis());
Si ((sw02&7) == 0) {/ / Hold es HOLD!
matriz [0] = matriz [0] ++ y 511; matemáticas divertidas
i = (matriz [1] + 8); Aumento de la verde
Si (i > 511) i = (& 7) + 1;
matriz [1] = i;
i = (matriz [2] + 64); Aumentar el azul
Si (i > 511) i = (i & 63) + 1;
matriz [2] = i;
}
rotura;
caso 1:
{
R1 = (blanco << 6) | (blanca << 3) |white;
mientras que (bigD > =millis())
para (LED = 0; LED < = 2; LED++)
writeLED(LED,r1);
Si ((sw02&7)! = 0) {}
blanco--;
Si (blanco < = 0) blanco = 7;
}
rotura;
}
caso 2:
{
para (LED = 0; LED < = 2; LED++) {}
Si ((sw02&7) == 0) {/ / Hold es HOLD!
C0 = matrix02 [LED] [0];
C1 = matrix02 [LED] [1];
Si (c0! = c1) {}
R0 = c0 y 7;
G0 = (c0 >> 3) y 7;
B0 = (c0 >> 6) y 7;
R1 = c1 y 7;
G1 = (c1 >> 3) y 7;
B1 = (c1 >> 6) y 7;
R1 = constrain(r1-r0,-1,1);
G1 = constrain(g1-g0,-1,1);
B1 = constrain(b1-b0,-1,1);
matrix02 [LED] [1] = (b1 << 6) | (g1 << 3) | R1;
}
otra cosa
matrix02 [LED] [0] = random(0,512); Nuevas luces de blanco
}
}
mientras que (bigD > =millis())
para (LED = 0; LED < = 2; LED++)
writeLED(LED,matrix02[LED][1]);
rotura;
}
caso 3: / / Log fuego
{
para (LED = 0; LED < = 2; LED++) {}
Si ((sw02&7) == 0) {/ / Hold es HOLD!
C0 = matrix02 [LED] [0];
C1 = matrix02 [LED] [1];
Si (c0! = c1) {}
R0 = c0 y 7;
G0 = (c0 >> 3) y 7;
B0 = (c0 >> 6) y 7;
R1 = c1 y 7;
G1 = (c1 >> 3) y 7;
B1 = (c1 >> 6) y 7;
R1 = constrain(r1-r0,-1,1);
G1 = constrain(g1-g0,-1,1);
B1 = constrain(b1-b0,-1,1);
matrix02 [LED] [1] = (b1 << 6) | (g1 << 3) | R1;
}
Else {}
Si (LED == 1) {}
R1=Random(4,8);
G1 = r1-2;
B1 = 0;
}
Else {}
R1 = random(2,7);
G1 = r1-2;
B1 = 0;
}
matrix02 [LED] [0] = (b1 << 6) | (g1 << 3) | R1; Nuevo objetivo luces rojos * verdes
}
}
}
bigD millis () = 130;
{}
para (LED = 0; LED < = 2; LED++)
writeLED(LED,matrix02[LED][1]);
}
mientras que (bigD > =millis());
rotura;
}
caso 4: / / luciérnagas
{
Si (ffTimer < millis()) {/ / debe esperar a que el tiempo transcurrido
para (i = 0; i < 4; i ++) {}
ff0 int = luciérnaga [i];
ff1 int = ff0 >> 8;
FF0 = ff0 y 127;
int ff = ff0 y 7;
Si (ff > 0) {/ / Flash en
j = (ff1 >> 2) y 070; Verde de precarga
Si ((ff1&3)! = 1) {//A masculino
writeLED(i-1,j);
writeLED(i-1,j);
Firefly [i]--;
fsuitors ++;
}
Else / / una hembra!
Si (fsuitors == 0) {}
j += 3;
writeLED(0,j);
writeLED(1,j);
writeLED(2,j);
writeLED(0,j);
writeLED(1,j);
writeLED(2,j); Las hembras muestran un pulso más largo, amarillento
Firefly [i]--;
i = 99; Salida temprano
}
}
Else {/ / No flash
Si (i == 1) fsuitors = 0;
j = (ff0 >> 3) y 15;
Si (j == 0) //Wait caducado
Firefly [i] = (firefly [i] & 0xff00) | 0 x 40 | ((FF1&31) << 1);
otra cosa
Firefly [i]-= 8;
}
}
ffTimer = millis () + 450;
}
rotura;
}
caso 99: / / modo de prueba...
{
i = ((sw02>1) & 1) << 2 | Verifique que el grifo
((SW02>2) & 1) << 6;
writeLED(2,i); Tap = rojo + hold = azul
rotura;
}
por defecto:
progMode = 0;
rotura;
}
/*
- Verifique que la tecla pulsada
*/
Si (readTouch(2)) {/ / vemos algo en el pin 2.
Si ((sw02&1) == 0) {/ / primera vez ' redondo
digitalWrite(13,HIGH); para que vean algo.
SW02 = 1; El toque de la bandera
timer02 = millis(); Primer toque de reloj
}
Else {/ / 1-bit ya establecido: hemos estado aquí antes.
t largo sin signo = millis ()-timer02; pero ¿cuánto tiempo hace?
Si ((sw02&2) == 2) {/ / buscar en 'hold' solamente si 'Pulse' se establece
Si (t > 750) {}
SW02 = sw02 | 4;
Si (t > 8000) progMode = 99;
}
}
else if (t > = 200) sw02 = sw02 | 2; ' Presione ', más diferenciación
}
}
else if (sw02 & & 1) {/ / procesos clave de
Si ((millis()-timer02)>100) / permiten algunos ' give'before que se cierra
{
digitalWrite(13,LOW); Lo
Si ((sw02&6) == 2) {//Process un 'golpe'
t largo sin signo = millis ()-dttimer02; //
dttimer02 = millis(); Permite mantener 'tapping'
Si (t < 600) {/ / 2 grifos dentro del tiempo límite (600ms)
SW02 = 0 x 10; Abrir grifo de doble '
progMode ++; Próximo programa
}
}
Else {}
SW02 = sw02 & 0xff00;
timer02 = 0;
}
}
}
}
# definir baja 180 / baja es 180mV
# define highThreshold 450 / / 450mV [600] - resistencia de la piel es 8Meg
Boolean readTouch (int pin) {}
int i=analogRead(pin);
i=analogRead(PIN); Ignorar la 1ra lectura
Si (i < baja) i=analogRead(pin); Rechazo de ruido
Si (i < baja) {}
digitalWrite(controlPin,HIGH);
Si (progMode == 99) writeLED(0,02); Prueba: octal rojo
i=analogRead(PIN);
digitalWrite(controlPin,LOW);
Si (i > highThreshold) {}
Si (progMode == 99) writeLED(0,020); Prueba: octal amarillo
volver (analogRead(pin) < baja);
verdaderas;
}
más return false;
} / / Prueba superada - tecla
más return false;
}
#define waitFactor 6 / / factor de brillo
void writeLED (int LED, int valor) {/ / LED == 0(D7), 1(D6), 2(D5)
valor es 3bits para r [lsb], g, b
digitalWrite(7-LED,HIGH); Llevar ánodo de alta
int r = valor & 7;
int g = (valor >> 3) y 7;
int b = (valor >> 6) y 7;
Si (r > 0) {}
digitalWrite(2,LOW);
delayMicroseconds (waitFactor << r);
}
digitalWrite(2,HIGH);
delayMicroseconds (waitFactor < <(7-r));
Si (g > 0) {}
digitalWrite(3,LOW);
delayMicroseconds (waitFactor << g);
}
digitalWrite(3,HIGH);
delayMicroseconds (waitFactor < <(7-g));
Si (b > 0) {}
digitalWrite(4,LOW);
delayMicroseconds (waitFactor << b);
}
digitalWrite(4,HIGH);
delayMicroseconds (waitFactor < <(7-b));
digitalWrite(7-LED,LOW);
}