Paso 2: codificación
Codificación de este tipo de proyectos puede ser un desafío. Y me he inspirado mucho la misma clase del proyecto.
En primer lugar debemos incluir biblioteca y variables globales para los componentes.
También aquí son los bloques que se moverá cuando se eleva el nivel de sonido.
#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 }, };
Entonces es tiempo para la configuración.
He incluido una pequeña introducción aquí que pasará a través de colores de la pantalla durante unos segundos. Sólo por diversión.
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;
Entonces es tiempo de bucle que va y para siempre.
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);}
Esta es la parte importante de la subrutina. Esto es lo principal que definirá la barra de sonido en la pantalla.
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]++; } }