Étape 6: Le Code.
Ce code a été fourni par Adafruit pour leur LED Ampli-cravate. J’ai changé quelques petites choses en elle pour s’adapter à mon projet./*
LED du vumètre pour Arduino et Adafruit NeoPixel LEDs.
Configuration matérielle requise :
-La plupart cartes Arduino ou compatible Arduino (ATmega 328P ou mieux).
-Amplificateur de Microphone à électret Adafruit (ID: 1063)
-Adafruit flore RGB Smart Pixels (ID: 1260)
OU
-Adafruit NeoPixel Digital LED strip (ID: 1138)
-En option : batterie pour une utilisation mobile (autre alimentation via USB ou adaptateur)
Configuration logicielle requise :
-Bibliothèque Adafruit NeoPixel
Connexions :
-3.3V à ampli micro +
-GND pour ampli micro-
-Broche analogique à la sortie du microphone (configurable ci-dessous)
-Broche numérique à LED d’entrée de données (configurable ci-dessous)
Voir les notes dans setup() concernant 5V et 3.3V conseils - il peut y avoir un
une connexion supplémentaire pour effectuer et une ligne de code pour activer ou désactiver.
Rédigé par Adafruit Industries. Distribué sous la licence BSD.
Ce paragraphe doit être inclus dans toute redistribution.
*/
#include < Adafruit_NeoPixel.h >
#define N_PIXELS 30 / / nombre de pixels en chapelet
#define MIC_PIN A5 / / Microphone est attaché à cette broche analogique
#define LED_PIN 6 / / strand NeoPixel LED est connecté à cette broche
#define DC_OFFSET 0 / / DC offset signal mic - si unusure, laissez 0
#define bruit 20 / / / hum/interférences dans signal mic
#define 40 échantillons / / longueur du buffer pour réglage de niveau dynamique
#define albums (N_PIXELS + 2) / / Allow dot à aller un peu hors échelle
#define PEAK_FALL 60 / / baisse de taux du pic dot
octet
PIC = 0, / / utilisé pour point de chute
dotCount = 0, / / cadre compteur pour retarder la dot-falling Vitesse
volCount = 0 ; Compteur de vues pour stocker les données sur le volume
int
vol [exemples], / / collecte d’échantillons de volume antérieur
lvl = 20, / / courant « imbibé » niveau audio
minLvlAvg = 0, / / pour l’ajustement dynamique du graphique bas & haut
maxLvlAvg = 512 ;
Adafruit_NeoPixel
bande = Adafruit_NeoPixel (N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800) ;
void setup() {}
Cela n’est nécessaire sur 5V Arduinos (Uno, Leonardo, etc.).
Connectez 3.3V à mic et à AREF sur ARDUINO et activer cette
ligne. Échantillons audio sont « propres » à 3.3V.
COMMENTEZ CETTE LIGNE POUR 3.3V ARDUINOS (FLORE, ETC.) :
analogReference(EXTERNAL) ;
memset (vol, 0, sizeof(vol)) ;
Strip.Begin() ;
}
void loop() {}
uint8_t i ;
uint16_t minLvl, maxLvl ;
int n, hauteur ;
n = analogRead(MIC_PIN) ; Première lecture du mic
n = abs (n - 512 - DC_OFFSET) ; Centre sur zéro
n = (n < = bruit) ? 0: (n - bruit) ; Supprimer le bruit/hum
LVL = ((lvl * 7) + n) >> 3 ; « Imbibé » lecture (autre ressemble crispé)
Calculer bar hauteur selon les niveaux min/max dynamique (virgule fixe) :
hauteur = TOP * (lvl - minLvlAvg) / (long) (maxLvlAvg - minLvlAvg) ;
Si (hauteur 0 < L) = 0 ; Sortie du clip
d’autre if(height > TOP) hauteur = TOP ;
if(Height > Peak) PIC = height ; Garder la dot « peak » en haut
Pixels de couleur basés sur dégradé arc-en-ciel
pour (i = 0; i < N_PIXELS; i ++) {}
Si (j’ai > = hauteur) strip.setPixelColor (i, 0, 0, 0) ;
d’autre strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150))) ;
}
Tirage max. dot
Si (PIC > 0 & & pic < = N_PIXELS-1) strip.setPixelColor(peak,Wheel(map(peak,0,strip.numPixels()-1,30,150))) ;
Strip.Show() ; Bande de mise à jour
Toutes les dernières images, faire le pixel pic goutte à 1 :
Si (++ dotCount > = PEAK_FALL) {//fall taux
Si PIC (PIC > 0)--;
dotCount = 0 ;
}
vol [volCount] = n ; Sauver l’échantillon pour le nivellement dynamique
Si (++ volCount > = échantillons) volCount = 0 ; Avance/rollover exemple de compteur
Obtenir la plage de volume d’images antérieures
minLvl = maxLvl = vol [0] ;
pour (i = 1; i < échantillons; i ++) {}
Si (vol [i] < minLvl) minLvl = vol [i] ;
ElseIf (vol [i] > maxLvl) maxLvl = vol [i] ;
}
minLvl et maxLvl indiquent la plage de volume sur des périodes antérieures, utilisés
pour la mise à l’échelle verticalement la sortie graphique (ainsi, il semble intéressant
peu importe le niveau de volume). S’ils ne sont cependant trop rapprochés
(p. ex. niveaux de volume très faible), le graphique devient super gros
et « jumpy »... afin de garder une distance minimum entre eux (cela
permet également le graphique aller à zéro quand la joue pas de son) :
Si ((maxLvl-minLvl) < TOP) maxLvl = minLvl + haut ;
minLvlAvg = (minLvlAvg * 63 + minLvl) >> 6 ; Humidifiez les niveaux min/max
maxLvlAvg = (maxLvlAvg * 63 + maxLvl) >> 6 ; (moyenne mobile sur faux)
}
Entrer une valeur de 0 à 255 pour obtenir une valeur de couleur.
Les couleurs sont un transition r - g - b - retour à r.
uint32_t roue (WheelPos octets) {}
if(WheelPos < 85) {}
retourner la bande. Couleur (WheelPos * 3, 255 - WheelPos * 3, 0) ;
} else if(WheelPos < 170) {}
WheelPos-= 85 ;
retourner la bande. Couleur (255 - WheelPos * 3, 0, WheelPos * 3) ;
} else {}
WheelPos-= 170 ;
retourner la bande. Couleur (0, WheelPos * 3, 255 - WheelPos * 3) ;
}
}