Étape 2: codage
Codage de ce type de projet peut être un défi. Et j’ai été inspiré par beaucoup le même genre de projet.
Tout d’abord, nous devrions inclure des variables globales pour les composants et de la bibliothèque.
Les blocs qui s’installera lorsque le niveau sonore s’élève sont également ici.
#include #include "rgb_lcd.h"rgb_lcd lcd;const int colorR = 255; const int colorG = 0; const int colorB = 255;#define MIC 0 int colors;#define T_REFRESH 100 // Refresh rate #define T_PEAKHOLD 4*T_REFRESH // Hold the peakbyte fill[6]={ 0x20,0x00,0x01,0x02,0x03,0xFF }; byte peak[7]={ 0x20,0x00,0x04,0x05,0x06,0x07,0x20 }; int lmax[2]; int dly[2]; byte block[8][8]= { { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10 }, // character to fill the bar { 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18 }, { 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C }, { 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E }, { 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08 }, // character to peak level { 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04 }, { 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02 }, { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 }, };
Est temps pour le programme d’installation.
J’ai inclus une petite intro ici qui passera par les couleurs de l’écran pendant quelques secondes. Juste pour le plaisir.
void setup ( void ){ lcd.begin( 16,2 ); for( int i=0 ; i<8 ; i++ ) lcd.createChar( i,block[i] ); lcd.setRGB(colorR, colorG, colorB); lcd.setCursor(0,0); lcd.print("VU-Meter"); lcd.setCursor(0,1); lcd.print("mkarvonen"); delay(1000); lcd.setRGB(250, 105, 0); // Yellow delay(1000); lcd.setRGB(250, 40, 0); // Orange delay(1000); lcd.setRGB(255, 0, 0); // Red delay(1000); lcd.setRGB(10, 10, 255); // Blue delay(1000); lcd.setRGB(255, 255, 255); // white delay(1000); lcd.setRGB(200, 0, 255); // Purple delay(1000); lcd.setRGB(0, 255, 0); // Green delay(1000); lcd.setRGB(255, 0, 100); // pink delay(1000); } long lastT=0;
Est temps pour la boucle qui va continuer encore et pour toujours.
void loop (){ if( millis() bar( 0,anL ); lcd.setCursor(0,1); lcd.write("Beat this"); lcd.setCursor(10,1); lcd.write(0b11001101); lcd.write(0b01001111); lcd.write(0b01011111); lcd.write(0b01101111); lcd.write(0b00101111);}
C’est le peu important de la sous-routine. Il s’agit de la principale chose qui va définir la barre de son sur l’écran.
void bar ( int row,int lev ){ lcd.setCursor( 0,row ); lcd.write( row ? : 'B' ); for( int i=1 ; i<16 ; i++ ) { int f=constrain( lev -i*5,0,5 ); int p=constrain( lmax[row]-i*5,0,6 ); if( f ) lcd.write( fill[ f ] ); else lcd.write( peak[ p ] ); } if( lev>lmax[row] ) { lmax[row] = lev; dly[row] = -(T_PEAKHOLD)/T_REFRESH; } else { if( dly[row]>0 ) lmax[row] -= dly[row]; if( lmax[row]<0 ) lmax[row]=0; else dly[row]++; } }