Intellekten Edison: VU-mätare (2 / 4 steg)
Steg 2: kodning
Denna typ av projekt kan vara en utmaning. Och jag har inspirerats av många samma typ av projektet.
Först och främst borde vi ta bibliotekets och globala variabler för komponenterna.
Här finns också de block som kommer att flytta när ljudnivån stiger.
#include
#include "rgb_lcd.h"
rgb_lcd lcd;
CONST int colorR = 255;
CONST int colorG = 0;
CONST int colorB = 255;
#define MIC 0
int färger;
#define T_REFRESH 100 / / uppdateringsfrekvens
#define T_PEAKHOLD 4 * T_REFRESH / / Håll topp
byte fyllning [6] = {0x20, 0x00, 0x01, 0x02, 0x03, 0xFF};
byte topp [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}, / / karaktär för att fylla baren
{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}, / / karaktär till toppnivå
{0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04},
{0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02},
{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
};
Då är dags för installation.
Jag har tagit en liten intro här som kommer att gå igenom färger på skärmen i några sekunder. Bara för skojs skull.
Ogiltiga inställningar (void)
{
LCD.BEGIN (16,2);
för (int jag = 0; jag < 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); Gul
Delay(1000);
lcd.setRGB (250, 40, 0); Orange
Delay(1000);
lcd.setRGB (255, 0, 0); Röd
Delay(1000);
lcd.setRGB (10, 10, 255); Blå
Delay(1000);
lcd.setRGB (255, 255, 255); vit
Delay(1000);
lcd.setRGB (200, 0, 255); Lila
Delay(1000);
lcd.setRGB (0, 255, 0); Grön
Delay(1000);
lcd.setRGB (255, 0, 100); rosa
Delay(1000);
}
lång lastT = 0;
Då är dags för slinga som kommer att fortsätta och fortsätta för evigt.
Ogiltig loop)
{
om (millis()
bar (0, anL);
lcd.setCursor(0,1);
LCD.write ("Beat här");
lcd.setCursor(10,1);
LCD.write(0b11001101);
LCD.write(0b01001111);
LCD.write(0b01011111);
LCD.write(0b01101111);
LCD.write(0b00101111);
}
Detta är den viktiga biten i subrutinen. Detta är det viktigaste som kommer att definiera ljudet baren på skärmen.
void bar (int ror, int lev)
{
lcd.setCursor (0, rad);
LCD.write (rad?: 'B');
för (int jag = 1; jag < 16; i ++)
{
int f = begränsa (lev -i * 5, 0, 5);
int p = begränsa (lmax [rad]-jag * 5, 0, 6);
om (f)
LCD.write (Fyll [f]);
annat
LCD.write (topp [p]);
}
om (lev > lmax [rad])
{
lmax [rad] = lev;
DLY [rad] =-(T_PEAKHOLD) / T_REFRESH;
}
annat
{
om (dly [rad] > 0)
lmax [rad]-= dly [rad];
om (lmax [rad] < 0)
lmax [rad] = 0;
annat
DLY [rad] ++;
}
}