Étape 4: Arduino programmation
OK, donc je peux allé un peu par-dessus bord - vous pouvez venir avec un moyen plus efficace pour obtenir le même effet, mais c’est ce que je suis à l’aise faisant avec l’électronique, je reste dans mon timonerie.J’ai voulu l’oreille entière pour ressembler à un VU-mètre...
trouvé presque exactement ce que je voulais avec quelques travaux de google (j’adore la communauté arduino!)
http://robomaniac123.zxq.net/Robomaniac123/Arduino_Tutorials/Entries/2011/2/24_Arduino_Led_VU_Meter.html
et le code qui est venu le long côté du Microphone...
J’ai fait quelques modifications à leur code et j’ai il comprendra.
Fondamentalement, que le code ci-dessus ne prend que le volume instantané, j’ai modifié pour prendre un volume moyen de plus de 50 ms temps. Cela adoucit l’effet et semble un peu mieux pour jouer lors d’une fête de la musique.
my Arduino Code ********************************************************************************
Exemple de compteur VU LED
Version 1.0
Écrit par James Newbould et son exemple de croquis de niveau pour l’amplificateur de Microphone Adafruit
modifié par Don Fouts pour projet multi-baies
int a conduit [10] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12} ; Assigner les broches pour les leds
leftChannel int = 0 ; entrée du canal gauche
int à gauche, j’ai ;
const int sampleWindow = 50 ; Largeur de la fenêtre d’échantillon mS (mS = 20 50Hz)
unsigned int échantillon ;
void setup()
{
pour (i = 0; j’ai < 10 ; je) / / dire l’arduino que les leds sont sorties numériques
pinMode (conduit [i], sortie) ;
Serial.Begin(9600) ; Décommentez afin de permettre le dépannage par série.
}
void loop()
{
unsigned long startMillis = millis() ; Début de la fenêtre de l’échantillon
unsigned int peakToPeak = 0 ; niveau de crête à crête
unsigned int signalMax = 0 ;
unsigned int signalMin = 1024 ;
collecter des données pour 50 mS
tandis que (millis() - startMillis < sampleWindow)
{
exemple = analogRead(0) ; analog codé en dur dans pour micro
Si (échantillon < 1024) / / lancer des fausses lectures
{
Si (échantillon > signalMax)
{
signalMax = échantillon ; Enregistrez juste les niveaux max
}
ElseIf (échantillon < signalMin)
{
signalMin = échantillon ; Enregistrez juste les niveaux min
}
}
}
peakToPeak = signalMax - signalMin ; max - min = amplitude crête-crête
double v = ((peakToPeak * 3.3) / 1024) * 10 ; convertir en valeur 1-10
convertir en code de programme de sortie
gauche = volts ;
Serial.println(volts) ;
Si (gauche == 0) / / si le volume est 0 puis éteignez toutes les leds
{
pour (i = 0; i < 10 ; je)
{
digitalWrite (conduit [i], faible) ;
}
}
d’autre
{
pour (i = 0; j’ai < left ; je) / / allumer les leds jusqu’au niveau de volume
{
digitalWrite (conduit [i], haut) ;
}
pour (i = i; j’ai < 10 ; je) / / éteindre les leds au-dessus du niveau de tension
{
digitalWrite (conduit [i], faible) ;
}
}
}
**************************************************************************************