Paso 1: El Sketch (LMP_Musicator01)
- VUmeter / órgano (db completo presentación) de luz
- Presentación horizontal - pantalla lineal central
- (c) Copyright 2009 QS
- Todos los derechos reservados
*
- Fila de la matriz de LED: 1-5; col: 1-6
- Mapa de PORTB == D8:D12 - pin [fila + 7]: + v
- PORTD == D2:D7 - pin [8-col]; Toma de tierra
- Nuestra producción: col::D2:D7 - ve (bajo) mientras row::D8:D13 + ve
*/
char mensaje [] = {}
0x11, 0x0a, 0x0e, 0x0e, 0x0a, 0x11, / / starburst
0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0x0e,
0X11, 0X19, 0X1E, 0 X 00, 0X1F, 0 X 10, / / Q U
0X1F, 0 X 00, 0X1E, 0 X 05, 0X1E, 0 X 00, / / A
0X1F, 0 X 06, 0X0C, 0X1F, 0 X 00, 0 X 03, / / N T
0X1F, 0 X 03, 0 X 00, 0X12, 0X15, 0 X 09, / / S
0 X 00, 0X1F, 0 X 10, 0X1F, 0 X 00, 0X1F, / / F U
0 X 05, 0 X 05, 0 X 00, 0X1F, 0 X 05, 0 X 05, / / F
0,0,0,0,0,0}; Además de un desbordamiento de búfer
patrón de bits, 1 byte por columna. Top = lsb
pantalla de Char [6], hdisp [6];
int w10kbuf [2], w1kbuf [20], w100buf [100]; Asumir toda cero (: P)
int w10kidx, w1kidx, w100idx;
int w10kmax, w5kmax, w1kmax, w500max, w100max;
tiempo w, w10ksum = 0, w1ksum = 0, w100sum = 0;
int www, w10k, w1k, w100, metro [5];
int escala = 3; registrar escala (desde 23)
recal int = 0; Tasa de AGC
int inPin = 1; analogRead en A01
void setup() / / ejecuta una vez, cuando comienza el bosquejo
{
para (int ledPin = 2; ledPin < = 12; ledPin ++) {}
pinMode (ledPin, salida); pone el pin digital como salida
digitalWrite (ledPin, (ledPin < = 7)); Desactivar todos los cols
}
lmpWrite(msg,0,15); Retraso del ciclo es 1/10 segundos
(realmente es inicializar los contadores)
analogReference(INTERNAL); No utilice por defecto o externo.
int i = digitalRead(inPin); eliminar datos antiguos
}
void loop() / / ejecuta una y otra vez
{
W100 = (w100sum / 23) >> de escala; Un filtro barato @ 100Hz de la aplicación
W1K = abs ((w1ksum / 3)-w100) >> de escala; 1kHz
w10k = (www w10ksum) >> de escala; 10kHz
w = (w100 + w1k + w10k); Potencia total (función de VU)
Si (w < 13) {}
Recal ++;
Si (recal > = 15) {//350mS cuenta antes de la recalibración del medidor
Recal = 0;
escala = (escala > 3);
}} / / aumentar la res sólo si es inferior a 1/2 escala
Si ((w100>33) || (w1k > 30) || (w10k>33)) {/ / log2
Si ((w100 w1k + w10k) > 83) {/ / pico: hacer menos sensible
Recal = 0;
escala ++;
W100 = w100 >> 1;
W1K = w1k >> 1;
w10k = w10k >> 1;
}
metro [0] = min (w100 >> 1,31);
metro [1] = min(abs(w100+w1k-w10k) >> 2.31);
metro [2] = min (w1k >> 2.31);
metro [3] = min(abs(w1k+w10k-w100) >> 2.31);
metro [4] = min((w10k*5) >> 3.31);
para (int col = 0; col < 6; col ++) {}
int c = 0;
para (int m = 0; m < = 4; mm ++) {}
c = c << 1;
c += (metro [mm] > col);
}
hdisp [col] = c;
}
Mostrar [0] = hdisp [4];
Mostrar [1] = hdisp [2];
Mostrar [2] = hdisp [0];
exhibición [3] = hdisp [0];
pantalla [4] = hdisp [2];
pantalla [5] = hdisp [4];
lmpWrite(display,0,1);
Mostrar [0] = hdisp [5];
Mostrar [1] = hdisp [3];
Mostrar [2] = hdisp [1];
exhibición [3] = hdisp [1];
pantalla [4] = hdisp [3];
pantalla [5] = hdisp [5];
/ * Rutina de visualización vertical
*
fillVBar(display,0,w100);
fillVBar(display,1,abs(w100+w1k-w10k));
fillVBar(display,2,w1k);
fillVBar(display,3,abs(w1k+w10k-w100));
fillVBar(display,4,w10k);
fillVBar (pantalla, 5, w10k >> 1);
fillVBar (display, 5, escala + 1);
int i = 0;
int s = escala de-1;
para (int ii = 0; ii < 5; ii ++) {}
i = i | (s & 1);
i = i << 1;
s = s >> 1;
}
pantalla [5] = i;
*
*/
lmpWrite(display,0,1);
}
void fillVBar (char [] disp, int o, int val) {}
int j = B100000; patrón de dígitos
Val = constrain(val,2,127);
mientras que (val > 2) {}
j| = (j >> 1);
Val = val >> 1;
}
DISP [o] = j;
}
void lmpWrite (char disp [], int stchar, int pasos)
/ * Uso: patrón de bits de cargas [disp], a partir de las stchar,
- 1 byte por columna, de izquierda a derecha, de arriba a abajo
- Mapa de PORTB == D8:D12 - pin [fila + 7]: + v
- PORTD == D2:D7 - pin [8-col]; Toma de tierra
*/
{
int col, fila, cval, lit = 0, ww = 0;
larga delayStart=millis() + 90*(constrain(steps,1,100));
Pantalla / tiempo de loop
www = 0;
{}
para (col = 0; col < 6; col ++) {}
CVAL = disp [col + stchar];
para (fila = 1; fila < = 5; fila ++) {//only 5 bits más bajos
Si (cval & 1) {/ / este LED de luz
Si (luz == 0)
digitalWrite(7-col,LOW); col necesita activación
digitalWrite(row+7,HIGH);
luz ++; en caso de necesitar saber cuantos LEDs se encienden
}
Ciclo de robar aquí, para leer la entrada VU
WW=Max(WW,analogRead(inPin)); Datos de volumen de materia prima (rectificados)
www=Max(WW,www); Pico retect
delayMicroseconds(80); Esto hace que el panel esté
enciende el mismo período de tiempo.
digitalWrite(row+7,LOW); Apagar el LED
CVAL = cval >> 1; Compruebe el siguiente bit
}
digitalWrite(7-col,HIGH); Apague la col
w10ksum += www-w10kbuf [w10kidx]; Este es nuestro 'condensador'
w10kbuf [w10kidx] = www;
w10kidx ++;
w10kidx = ((w10kidx<1)); 0 o 1
Si (w10kidx > 3) w10kidx = 0;
w10ksum = PD; Aumentar la respuesta de gama alta
w1ksum += ww-w1kbuf [w1kidx];
w1kbuf [w1kidx] = ww;
w1kidx ++;
Si (w1kidx > 19) w1kidx = 0;
w1kidx = ((w1kidx<19) & & (w1kidx ++)); 0 - 19
w100sum += ww-w100buf [w100idx];
w100buf [w100idx] = ww;
w100idx ++;
Si (w100idx > 99) w100idx = 0;
w100idx = ((w100idx<1) & & (w100idx ++)); 0 - 199
encendido = 0;
}
}
mientras que (delayStart > millis());
}