Hilfe bei VU Meter

Hallo, ich bin völlig neu in diesem Gebiet und habe meinen Arduino Uno nun den 2ten Tag.

Von Elektronik habe ich Grundkentnisse. Was eben der Kfz-Mechatroniker Beruf so mit sich bringt.

Nun zu meinen Projekt! Ich möchte einen Vu Meter bauen und habe diesen schon nach einer Anleitung im Internet begonnen. Sieht soweit alles gut aus bis auf einen Fehler. Immer wenn die Musik zu laut wird bzw das Signal zu stark bleibt er oben hängen so das alle LEDs brennen. Dies bleibt auch so selbst wenn man wieder leiser macht. Mit einem Reset funktioniert alles wieder. Da der Arduino fest eingebaut werden soll darf dies nicht passieren. Könnt ihr mir helfen?

int sound[4];
int soundav;
const int inputPIN =A5; //audio input pin, you have to amplify your output to max 5V
const int firstLED= 2; //first output pin for the leds
const int lastLED = 11; //last output pin for the leds
int leds;
int x;
int y;

void setup ()
{
pinMode (inputPIN, INPUT); // put input pin in input state
for (int a=firstLED; a <=lastLED; a++){ // loop through all the outputpins and put them in output state
pinMode(a, OUTPUT);
}
leds = (firstLED + lastLED) +1; //count how many leds you have connected + add 1 for all leds off
}

void loop ()
{
for (int num=0; num < 4; num++) {
sound[num]= analogRead (inputPIN);
if(num==3) {
soundav=(sound[0]+sound[1]+sound[2]+sound[3])/4; // average sound levels
x = map(soundav, 1, 255, 0,leds); // map the sound values from 0 to 20 because we have 21 levels. OFF & 20 leds.
y = firstLED + x; //get the correct led pin number where the led state changes
for (int b= firstLED; b < y; b++) { //loops through all the leds from firstLED to the level of the sound
digitalWrite(b,HIGH);
}
for (int c = y; c <= lastLED ; c++) { //loops through all the leds from lastLED to the level of the sound
digitalWrite(c,LOW);
}
}
}
}

Mach davor einfach eine Abfrage if(soundav > 255) soundav = 255; x = map(soundav, 1, 255, 0,leds);

Erst mal Sorry für den Doppelpost und danke für die Antwort!

An welcher stelle muss ich diese Abfrage setzten?

Mir fällt gerade noch eine Frage ein. Es soll am ende ja nicht nur ein VU String sein sondern mehrere die unterschiedlich reagieren. Sehe ich das richtig das ich das mit unterschiedlichen Widerständen hin bekomme?

Danke schonmal!

Die Abfrage erfolgt direkt vor dem x=map....

Wenn die Leds unterschiedlich leuchten sollen, schau dir PWM an (analogWrite). Basics bitte durcharbeiten, dort ist alles wichtige erklärt für das Projekt.

Wenn dir die PWM Pins nicht ausreichen, schau dir die ShiftPWM von elcoJacobs mal an in Verbindung mit einem 74HC595.

1000 Dank! Funktioniert einwandfrei!

Dravil: Mir fällt gerade noch eine Frage ein. Es soll am ende ja nicht nur ein VU String sein sondern mehrere die unterschiedlich reagieren. Sehe ich das richtig das ich das mit unterschiedlichen Widerständen hin bekomme?

Hallo,

Wie mehrere? Wenn Du verschiedene Frequenzbereiche anzeigen und "ausschlagen" lassen möchtest, so wie ein Equalizer, dann mußt Du die Frequenzen filtern und den VU-Meter zuführen.

MSGEQ7?!

Hallo, ja genau das mit dem Spectrum Analyzer ist das dann aber ob ich das so hin bekomme denn ich habe bisher noch nicht mit ICs gemacht… :confused: wie gesagt bin absoluter Anfgänger.

Hallo,

interessant das es dafür einen kleinen IC gibt. Wußte ich gar nicht. Um so einfacher wird das für ihn. :)

Also das "shield" und der IC was in der Anleitung angegeben wird ist scheinbar nur aus den Ausland bestellbar. Hab keinen deutschen Anbieter gefunden. Wenn dann nicht auf Lager. Sieht aber recht simpel aus. Aber würde es hiermit nicht auch gehen?

http://www.conrad.de/ce/de/product/678477/Velleman-Audio-Shield-fuer-Arduino-VMA02-Vormontiertes-Modul?promotionarea=01

Gibts ne alternative für den MSGEQ7 ?

Hier kannst Du das Shield bestellen, die importieren alles von Adafruit ohne Mehrkosten. :) Einfach anrufen oder Email schreiben.