Auf der LED-Matrix sollen umso mehr LEDs leuchten, je lauter der Ton ist, der vom Mikrofon aufgezeichnet wird.
Überprüfe vor dem Start noch einmal die Verkabelung:
#include <Adafruit_NeoPixel.h>
// Mikrofon-Pin
const int MIC_PIN = A0;
// Pin für die WS2812 LEDs
#define DATA_PIN 13
// Anzahl der LEDs in der Matrix
#define NUM_LEDS 40
// Erstellen eines NeoPixel-Objekts
Adafruit_NeoPixel matrix = Adafruit_NeoPixel(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
matrix.begin(); // Initialisieren der NeoPixel-Matrix
matrix.show(); // Alle LEDs ausschalten
Serial.begin(9600); // Serielle Kommunikation starten
randomSeed(analogRead(0)); // Zufallsgenerator initialisieren
}
// Verbesserte Funktion zum Auslesen des Mikrofon-Levels
int readMicLevel(int max) {
unsigned long startMillis = millis();
unsigned int peakToPeak = 0;
unsigned int signalMax = 0;
unsigned int signalMin = 4096;
// 50 ms lang messen
while (millis() - startMillis < 50) {
int sample = analogRead(MIC_PIN);
if (sample < 4096) {
if (sample > signalMax) {
signalMax = sample;
} else if (sample < signalMin) {
signalMin = sample;
}
}
}
peakToPeak = signalMax - signalMin;
// Serial.print(peakToPeak);
// Serial.print(" ");
const int maxInput = 2500;
const int schwelle = 400;
peakToPeak=constrain(peakToPeak,schwelle,maxInput)-schwelle;
// Serial.print(peakToPeak);
// Serial.print(" ");
int mapped = map(peakToPeak, 0, maxInput-schwelle, 0, max);
// Serial.println(mapped);
return mapped;
}
void loop() {
int micValue = readMicLevel(1023);
Serial.print(micValue);
Serial.print(": ");
// Mikrofonwert lesen
int ledCount = map(micValue, 0, 1023, 0, NUM_LEDS); // Mikrofonwert auf LED-Anzahl abbilden
Serial.println(ledCount);
for (int i = 0; i < ledCount; i++) {
// Zufällig RGB-Farbe erzeugen
int red = random(0, 256);
int green = random(0, 256);
int blue = random(0, 256);
matrix.setPixelColor(i, matrix.Color(red, green, blue)); // LED einschalten mit zufälliger Farbe
}
for (int i=ledCount;i<NUM_LEDS;i++){
matrix.setPixelColor(i, matrix.Color(0,0,0)); // LED einschalten mit zufälliger Farbe
}
matrix.show(); // Aktualisieren der LEDs
delay(1); // Kurze Pause
}
Mit dem map-Befehl werden die Messwerte des Mikrofons (0-1023) in Werte für die LED-Matrix (0-39) umgeschrieben.
Teste das Programm durch Klatschen.
Abhängig vom Grundgeräusch-Pegel leuchten die ersten LEDs ständig.
Um dies zu beseitigen, sind folgende Schritte nötig:
Experimentiere mit den Messwerten oder der map-Funktion, damit die Matrix empfindlicher wird.