Stap 1: De schets (LMP_Musicator01)
- VUmeter / Light organ (volledige db presentatie)
- Horizontale presentatie - centrum-out lineaire weergave
- (c) Copyright 2009 QS
- Alle rechten voorbehouden
*
- LED Matrix rij: 1-5; Col: 1-6
- Kaart van PORTB == D8:D12 - pin [rij + 7]: + v
- PORTD == D2:D7 - pin [8-col]; GND
- Onze productie: col::D2:D7 - ve (laag), terwijl row::D8:D13 + ve
*/
char msg [] {} =
0x11, 0x0a, 0x0e, 0x0e, 0x0a, 0x11, / / starburst
0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0X11, 0X19, 0X1E, 0X00, 0X1F, 0X10, / / Q U
0X1F, 0X00, 0X1E, 0X05, 0X1E, 0X00, / / A
0X1F, 0X06, 0X0C, 0X1F, 0X00, 0X03, / / N T
0X1F, 0X03, 0X00, 0X12, 0X15, 0X09, / / S
0X00, 0X1F, 0X10, 0X1F, 0X00, 0X1F, / / U F
0X05, 0X05, 0X00, 0X1F, 0X05, 0X05, / / F
0,0,0,0,0,0}; Plus een buffer overrun
bitpatroon, 1 byte per kolom. Top = lsb
char display [6], hdisp [6];
int w10kbuf [2], w1kbuf [20], w100buf [100]; Neem aan dat alle nulpunt (: P)
int w10kidx, w1kidx, w100idx;
int w10kmax, w5kmax, w1kmax, w500max, w100max;
lang w, w10ksum = 0, w1ksum = 0, w100sum = 0;
int www, w10k, w1k, w100, meter [5];
int schaal = 3; Meld u schaal (beginnen bij 23)
int herinneren = 0; AGC tarief
int inPin = 1; analogRead op A01
void setup / / run eenmaal in, wanneer de schets wordt gestart
{
voor (int ledPin = 2; ledPin < = 12; ledPin ++) {}
pinMode (ledPin, OUTPUT); Hiermee stelt u de digitale pen als uitvoer
digitalWrite (ledPin, (ledPin < = 7)); Alle cols uitschakelen
}
lmpWrite(msg,0,15); Cyclus vertraging is 1/10 sec
(het is echt voor het initialiseren van de items)
analogReference(INTERNAL); Gebruik geen standaard of externe!
int i = digitalRead(inPin); verwijderen oude gegevens
}
void loop / / run over en weer
{
W100 = (w100sum / 23) >> schaal; Een goedkoop filter @ app 100Hz
W1K abs ((w1ksum / 3)-w100 =) >> schaal; 1kHz
w10k = (www + w10ksum) >> schaal; 10kHz
w = (w100, w1k + w10k); Totaal vermogen (VU-functie)
Als (w < 13) {}
herinneren ++;
Als (herinneren > = 15) {//350mS telt voordat herijking van meter
herinneren = 0;
-= schalen (schaal > 3);
}} / / verhoging res alleen als minder dan 1/2 schaal
Als ((w100>33) || (w1k > 30) || (w10k>33)) {/ / log2
Als ((w100 w1k + w10k) > 83) {/ / piek: het minder gevoelig maken
herinneren = 0;
schaal ++;
W100 w100 = >> 1;
W1K w1k = >> 1;
w10k = w10k >> 1;
}
meter [0] = min (w100 >> 1,31);
meter [1] = min(abs(w100+w1k-w10k) >> 2,31);
meter [2] = min (w1k >> 2,31);
meter [3] = min(abs(w1k+w10k-w100) >> 2,31);
[4] meter = min((w10k*5) >> 3,31);
voor (int col = 0; col < 6; col ++) {}
int c = 0;
voor (int mm = 0; mm < = 4; mm ++) {}
c = c << 1;
c += (meter [mm] > col);
}
hdisp [col] = c;
}
weergeven [0] = hdisp [4];
weergeven [1] = hdisp [2];
weergeven [2] = hdisp [0];
weergeven [3] = hdisp [0];
weergeven [4] = hdisp [2];
weergeven [5] = hdisp [4];
lmpWrite(display,0,1);
weergeven [0] = hdisp [5];
weergeven [1] = hdisp [3];
weergeven [2] = hdisp [1];
weergeven [3] = hdisp [1];
weergeven [4] = hdisp [3];
weergeven [5] = hdisp [5];
/ * Verticale display routine
*
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 (weergeven, 5, w10k >> 1);
fillVBar (display, 5, schaal + 1);
int i = 0;
int s = weegschaal-1;
voor (int ii = 0; ii < 5; ii ++) {}
Ik = i | (s & 1);
Ik = i << 1;
s = s >> 1;
}
weergeven [5] = i;
*
*/
lmpWrite(display,0,1);
}
VOID fillVBar (char [disp], int o, int val) {}
int j = B100000; cijfer patroon
Val = constrain(val,2,127);
terwijl (val > 2) {}
j| = (j >> 1);
Val = val >> 1;
}
DISP [o] = j;
}
VOID lmpWrite (char disp [], int stchar, int stappen)
/ * Gebruik: ladingen bitpatroon in disp [], basisgewicht van stchar,
- 1 byte per kolom links-naar-rechts, top-to-bottom
- Kaart van PORTB == D8:D12 - pin [rij + 7]: + v
- PORTD == D2:D7 - pin [8-col]; GND
*/
{
int col, rij, cval, verlicht = 0, ww = 0;
lange delayStart=millis() + 90*(constrain(steps,1,100));
Display / loop van de tijd
www = 0;
{}
voor (col = 0; col < 6; col ++) {}
CVal = disp [col + stchar];
voor (rij = 1; rij < = 5; rij ++) {//only 5 lage bits
Als (cval & 1) {/ / deze LED light
Als (verlicht == 0)
digitalWrite(7-col,LOW); Col moet activeren
digitalWrite(row+7,HIGH);
verlichte ++; in het geval dat we willen weten hoeveel LEDs verlicht
}
Fietsen stelen hier om te lezen input van de VU
WW=Max(WW,analogRead(inPin)); Gegevens van de rauwe volume (gerectificeerd)
www=Max(WW,www); Piek retect
delayMicroseconds(80); Dit zorgt ervoor dat het deelvenster is
verlicht de dezelfde periode van tijd.
digitalWrite(row+7,LOW); LED uitschakelen
CVal cval = >> 1; Controleer de volgende bit
}
digitalWrite(7-col,HIGH); col uitschakelen
w10ksum += www-w10kbuf [w10kidx]; Dit is onze 'condensator'
w10kbuf [w10kidx] = www;
w10kidx ++;
w10kidx = ((w10kidx<1)); 0 of 1
Als (w10kidx > 3) w10kidx = 0;
w10ksum = ww; De high-end respons verhogen
w1ksum += ww-w1kbuf [w1kidx];
w1kbuf [w1kidx] = ww;
w1kidx ++;
Als (w1kidx > 19) w1kidx = 0;
w1kidx = ((w1kidx<19) & & (w1kidx ++)); 0 - 19
w100sum += ww-w100buf [w100idx];
w100buf [w100idx] = ww;
w100idx ++;
Als (w100idx > 99) w100idx = 0;
w100idx = ((w100idx<1) & & (w100idx ++)); 0 - 199
verlicht = 0;
}
}
terwijl (delayStart > millis());
}