Licht auf bestimmte Musik !!!

Hallo !

Ich habe ein großes problem ( so seh ich das zumindest als anfänger). Ich wollte mehrere LEDs mit einer musik synchronisieren. Dazu habe ich diese tutorials in dem forum gesehen: http://arduino.cc/forum/index.php?topic=83146.0 Jedoch hat der Code bei mir nicht so funktioniert wie es in dem video ist ! :( Jetzt meine frage (die wahrscheinlich zuvielverlangt): Könnte mir vielleciht einer eine anleitung dazu schicken wie ich das machen kann ?! Es muss nicht so gelöst werden wie in dem video !!! Wäre echt nett wenn das einer für nich machen könnte weil ich habe mein board erst Gestern bekommen ! Und ich brauche das dringend ! Vielen dank schonmal ! ;)

Hoffe auf eine schnelle antwort !

Es wäre gut, wenn Du erstmal beschreibst, was genau Du machen willst. LEDs mit einer Musik zu synchronisieren kann ja bedeuten, das Du anhand der Töne bestimmte LEDs schalten willst. Es kann aber auch bedeuten, das Du die LEDs zu festgelegten Zeiten schalten willst.
Letzteres ist sicher deutlich einfacher.

Was genau hat den mit dem Code aus dem Forums-Post nicht so funktioniert? Oder, genauer … Was hat der Code gemacht und was hast Du erwartet.
In einem früheren Post hast Du mal geschrieben, das Du einen Arduino Mega 2560 hast. Konntest Du den nicht zum Testen nehmen, bevor Dein neues Board angekommen ist?
Mario.

DMX ist für Dich als Anfänger vieleicht ein bischen heftig. Hast Du Dir das hier http://blog.blinkenlight.net/experiments/basic-effects/vu-meter/ schon mal angeschaut?

mkl0815: Es wäre gut, wenn Du erstmal beschreibst, was genau Du machen willst. LEDs mit einer Musik zu synchronisieren kann ja bedeuten, das Du anhand der Töne bestimmte LEDs schalten willst. Es kann aber auch bedeuten, das Du die LEDs zu festgelegten Zeiten schalten willst. Letzteres ist sicher deutlich einfacher.

Was genau hat den mit dem Code aus dem Forums-Post nicht so funktioniert? Oder, genauer ... Was hat der Code gemacht und was hast Du erwartet. In einem früheren Post hast Du mal geschrieben, das Du einen Arduino Mega 2560 hast. Konntest Du den nicht zum Testen nehmen, bevor Dein neues Board angekommen ist? Mario.

Ja das hab ich auch schon gemerkt -_- Also dann nochmal genauer: Ich habe so zwei ideen wie ich das machen könnte und es wäre auch gut wenn ich beide umsetzen könnte! Zur ersten: Das sollte ungefähr wie in dem video aussehen, halt das ich zB 10 LEDs mit meinem Board verbinde. Um die leds einzeln anzusteuern würde ich gerne Vixen benutzen weil man da die Anschaltung der leds festlegen kann und das insgesamt auch mit musik sozusagen untermalen....(verständlich? So wie eine lichtorgel) Zur zweiten idee: Es wäre auch gut wenn ich die Lampen mit den verschiedenen höhen tiefen der musik ansteuern kann, sodass ich nciht immer für jeden song eine einzelne licht sequence erstellen muss ! Außerdem wäre es ganz gut wenn das auch alles vom computer aus geht ncht das man da moch extra shields für kaufen muss die das umwandeln...

Bei dem Code den ich da auf dem forum gefunden habe, funtionierten einige befhele nicht ! Hab sie auch veruscht irgendwie zu korrigieren aber das hat nicht ganz funktioniert ! -_- was der code gemacht hat: er hat die impulse die von vixen kommen soltten umgesetze und dann halt die leds angesteuert ! Genau so wie in der ersten idee ! Jetzt zu dem board : das war nicht direkt mein board das war nämlich eins von einem freund, der hatte mir das mal zum ausprobieren ausgeliehen um zu sehen wie das so läuft ! Jedoch hatte er auch nciht wirklich ahnung davon !

Also ich hoffe du kommst hiermit weiter !

[quote author=Udo Klein link=topic=100035.msg750779#msg750779 date=1333694151] DMX ist für Dich als Anfänger vieleicht ein bischen heftig. Hast Du Dir das hier http://blog.blinkenlight.net/experiments/basic-effects/vu-meter/ schon mal angeschaut? [/quote]

Ja das hab ich auch schon gemerkt aber ich wills durchziehen ! Danke für den link aber der hilft mir jetzt nicht weiter weil man da extra shields brauch ! Tut mir auch leid das ich mein "projekt" nicht genau beschrieben habe -_-

Wenn ich das richtig verstehe, willst Du eigentlich mit Deinem PC die 10 LEDs steuern. Der Ardiuino ist nur "Mittel zum Zweck", weil da die LEDs angeklemmt werden können und Du sie über einen Sketch einzeln steuern kannst. Wenn das so ist, sollte es doch nicht sonderlich schwer sein. Auf der einen Seite hast Du den PC, der über USB mit dem Arduino verbunden ist. Das Programm "Vixen" (ich vermute mal das hier: http://www.vixenlights.com/downloads.html) liefrt über das "Generic serial" output plugin die Daten an den Arduino. Der liest einfach was da kommt und schaltet entsprechend die LEDs. 6 Davon kannt Du sogar per PWM dimmen, ansonsten kann Du bis zu 18 LEDs direkt ansteuern. PIN 0 und 1 sind durch die serielle Verbindung belegt, der Rest kann komplett verwendet werden, inkl. der 6 analog-Pins.

Die größte Schwierigkeit ist vermutlich, das Daten-Protokoll Deines Steuerprogramms zu bekommen, dmait Du weisst was da über die serielle Schnittstelle geschickt wird. Mario.

Bezüglich Vixen und Arduino findet sich eine Menge nützliches im Netz. Z.B. http://doityourselfchristmas.com/forums/showthread.php?12757-Vixen-Generic-Serial-Output-controls-the-Arduino!&p=129693#post129693 Vermutlich ist das schon die Lösung für Dein Problem :-) btw. das war der erste Treffer in Google bei der Suche nach "Arduino + Vixen", odrt gab es einen entsprechenden Link.

mkl0815:
Bezüglich Vixen und Arduino findet sich eine Menge nützliches im Netz.
Z.B. Vixen Generic Serial Output controls the Arduino!
Vermutlich ist das schon die Lösung für Dein Problem :slight_smile:
btw. das war der erste Treffer in Google bei der Suche nach “Arduino + Vixen”, odrt gab es einen entsprechenden Link.

Vielen dank !!!
Genau den link hab ich heut morgen auch schon entdeckt und umgesetzt !
Es funktioniert nun alles einwandfrei sogar bei meine ideen konnte ich damit lösen !

Vielen danke nochmal an alle ! :wink:

Hallo nochmal :D

Eigentlich funktioniert ja jetzt alles mit der ansteuerung, jedoch Kann ich irgendwie nur max 7 leds gezielt ansteuern ! Wenn ich mehr als 7 Anschließe dann kommt da was durcheinander das keine lampe richtig angeht wie man es Festgelegt hat.... Woran könnte dies liegen ?!

Schnelle antwort BITTE ! ;)

Fehler in der Beschaltung? Hast du einen Schaltplan oder kannst erklären, was für Lampen an den Pins hängen?

sth77:
Fehler in der Beschaltung? Hast du einen Schaltplan oder kannst erklären, was für Lampen an den Pins hängen?

Eigentlich kann es kaum einen fehler geben.
Also ich benutze einfache leuchtdioden.
Der minus pol kommt von dem gnd und ist mit jeder led verbunden und die positiven ausgänge sind jeweils mit einem widerstand mit jeweils der passenden led verbunden !

Verständlich ?

Weißt du zufällig wo der fehler steckt ???

mkl0815: Wenn ich das richtig verstehe, willst Du eigentlich mit Deinem PC die 10 LEDs steuern. Der Ardiuino ist nur "Mittel zum Zweck", weil da die LEDs angeklemmt werden können und Du sie über einen Sketch einzeln steuern kannst. Wenn das so ist, sollte es doch nicht sonderlich schwer sein. Auf der einen Seite hast Du den PC, der über USB mit dem Arduino verbunden ist. Das Programm "Vixen" (ich vermute mal das hier: http://www.vixenlights.com/downloads.html) liefrt über das "Generic serial" output plugin die Daten an den Arduino. Der liest einfach was da kommt und schaltet entsprechend die LEDs. 6 Davon kannt Du sogar per PWM dimmen, ansonsten kann Du bis zu 18 LEDs direkt ansteuern. PIN 0 und 1 sind durch die serielle Verbindung belegt, der Rest kann komplett verwendet werden, inkl. der 6 analog-Pins.

Die größte Schwierigkeit ist vermutlich, das Daten-Protokoll Deines Steuerprogramms zu bekommen, dmait Du weisst was da über die serielle Schnittstelle geschickt wird. Mario.

Vielen dank ! ;) Also bei mir konnten noch mehr als 6 leds bei pmw verbunden werden insgesamt 7 :D Naja...aber ich hab halt das problem das es nach 7 leds nicht mehr ganz so funktioniert wie es soll Auch wenn ich die leds an die einfachen digtalpins anschließe (22-53) Ich weiß einfach nciht wo der fehler liegt -_-

Bitte poste mal den Schaltplan, wie Du die LEDs angeschlossen hast. Dazu kommt, das der Arduino (ich vermute mal ein Mega) auch nur einen maximalen Strom liefern kann. Wie groß sind denn die Widerstände die Du vor den LEDs hast? Der maximale Strom pro Port (A,B,CD..) ist auch begrenzt. Zusätzlich auch noch der Strom der gesamt über GND fliessen darf. Wenn keine LED mehr richtig leuchtet klingt das ein wenig so, als würde die gelieferte Spannung zusammenbrechen.

mkl0815:
Bitte poste mal den Schaltplan, wie Du die LEDs angeschlossen hast. Dazu kommt, das der Arduino (ich vermute mal ein Mega) auch nur einen maximalen Strom liefern kann. Wie groß sind denn die Widerstände die Du vor den LEDs hast? Der maximale Strom pro Port (A,B,CD…) ist auch begrenzt. Zusätzlich auch noch der Strom der gesamt über GND fliessen darf. Wenn keine LED mehr richtig leuchtet klingt das ein wenig so, als würde die gelieferte Spannung zusammenbrechen.

Hier schonmal der Schaltplan(sry das das jetzt kein richtiger schaltplan ist sondern nur die steckplan !)
misst ich bekomm das bild jetzt nicht hier hin ! ist aber im anhang.

Jeder widerstand hat jeweils 220 ohm. das das board überlastet ist kann ich mir nicht vorstellen, weil , ich hab es wahrscheinlich bischen umständlich erklärt, die lampen gehen an jedoch nicht so wie sie es sollten, in einer anderen reinfolge !

hoffe das hilft dir weiter ?!

Ok, wenn es nur die Reihenfolge der Lampen ist, dann ist es vermutlich kein elektrisches Problem. Dann poste doch mal Deinen Code. Bitte verwende dabei die "#" Tags (Insert Code - oben in der Editorleiste). Vermutlich stimmt nur irgendwie die Zuordnung der Pins nicht ganz.

mkl0815:
Ok, wenn es nur die Reihenfolge der Lampen ist, dann ist es vermutlich kein elektrisches Problem. Dann poste doch mal Deinen Code. Bitte verwende dabei die “#” Tags (Insert Code - oben in der Editorleiste). Vermutlich stimmt nur irgendwie die Zuordnung der Pins nicht ganz.

Hier der Code:

// Output
int Chan1 = 22;  
int Chan2 = 24;  
int Chan3 = 26;  
int Chan4 = 28;  
int Chan5 = 30;  
int Chan6 = 32;
int Chan7 = 34;
int Chan8 = 36;


int i = 0;     // Loop counter
int incomingByte[7];   // array to store the 7 values from the serial port

//setup the pins/ inputs & outputs
void setup()
{
  Serial.begin(9600);        // set up Serial at 9600 bps

  pinMode(Chan1, OUTPUT);   // sets the pins as output
  pinMode(Chan2, OUTPUT);
  pinMode(Chan3, OUTPUT);
  pinMode(Chan4, OUTPUT);
  pinMode(Chan5, OUTPUT);
  pinMode(Chan6, OUTPUT);
  pinMode(Chan7, OUTPUT);
  pinMode(Chan8, OUTPUT);
  
  
}

void loop()
{  // 7 channels are coming in to the Arduino
   if (Serial.available() >= 7) {
    // read the oldest byte in the serial buffer:
    for (int i=0; i<8; i++) {
      // read each byte
      incomingByte[i] = Serial.read();
    }
    
    analogWrite(Chan1, incomingByte[0]);   // Write current values to LED pins
    analogWrite(Chan2, incomingByte[1]);   
    analogWrite(Chan3, incomingByte[2]);   
    analogWrite(Chan4, incomingByte[3]);   
    analogWrite(Chan5, incomingByte[4]);   
    analogWrite(Chan6, incomingByte[5]);
    analogWrite(Chan7, incomingByte[6]);
    analogWrite(Chan8, incomingByte[7]);
    
    
    
   }
   
}

Der Code sollte jetzt die 8 LEDs vernünftig schalten, aber da gibt es halt irgendein problem !?

Ich vermute mal, Dein Problem ist das

if (Serial.available() >= 7)

Damit wird schon aus dem Serial-Puffer gelesen, wenn erst 7 der 8 Channels übertragen wurden. Damit bleibt das 8 Byte im Puffer und wird beim nächsten Durchlauf als erstes Byte also für Channel 1 gelesen. Damit verschiebt sich Deine Sequenz um genau 1 Byte pro Durchlauf. Ein weiterer Fehler, der sich aktuell zwar nicht auswirkt, aber später Probleme machen kann ist, das Dein Array zu klein ist. Ein

int incomingByte[7];

Erzeugt ein Array mit 7 Einträgen, nicht mit 8. Eigentlich könntest Du nur von incomingByte[0] bis incomingByte[6] darauf zugreifen. Das Du incomingByte[7] verwendet kannst, liegt einfach nur daran das der Arduino kein Memory-Protection hat. Da der Compiler aber nicht weiss, das Du ein Byte mehr an Speicher verwendest, kann es sein das auf diesem Byte bereits wieder Daten einer anderen Variable im Speicher liegen und Du damit plötzlich deren Wert veränderst, wenn Du ein incomingByte[7]=xxx machst.

mkl0815: Ich vermute mal, Dein Problem ist das

if (Serial.available() >= 7)

Damit wird schon aus dem Serial-Puffer gelesen, wenn erst 7 der 8 Channels übertragen wurden. Damit bleibt das 8 Byte im Puffer und wird beim nächsten Durchlauf als erstes Byte also für Channel 1 gelesen. Damit verschiebt sich Deine Sequenz um genau 1 Byte pro Durchlauf. Ein weiterer Fehler, der sich aktuell zwar nicht auswirkt, aber später Probleme machen kann ist, das Dein Array zu klein ist. Ein

int incomingByte[7];

Erzeugt ein Array mit 7 Einträgen, nicht mit 8. Eigentlich könntest Du nur von incomingByte[0] bis incomingByte[6] darauf zugreifen. Das Du incomingByte[7] verwendet kannst, liegt einfach nur daran das der Arduino kein Memory-Protection hat. Da der Compiler aber nicht weiss, das Du ein Byte mehr an Speicher verwendest, kann es sein das auf diesem Byte bereits wieder Daten einer anderen Variable im Speicher liegen und Du damit plötzlich deren Wert veränderst, wenn Du ein incomingByte[7]=xxx machst.

Vielen dank ! Nur ich weiß nicht genau wie ich das problem lösen kann und ob man es überhaupt lösen kann....im moment fällt mir noch nichts passendes ein ! -_- Hättest du da zufällig eine lösung. ?

Wie wärs wenn Du statt 7 eine 8 schreibst? Grüße Uwe

Nur ich weiß nicht genau wie ich das problem lösen kann und ob man es überhaupt lösen kann....im moment fällt mir noch nichts passendes ein !

Das verstehe ich nicht ganz, Du hast doch das Beispiel auf die 8 LEDs erweitert, nur lediglich vergessen an allen Stellen den Code auf 8 LEDs zu erweitern. Die Stelle

if (Serial.available() >= 7)

fragt ab, ob bereits 7 Bytes für 7 Channels im seriellen Puffer liegen. Was muss man wohl machen, wenn man statt 7 nun 8 Channel hat und daher warten will, bis 8 Bytes für 8 Channel im Puffer liegen? Ebenso das Array

int incomingByte[7];

das für 7 Byte definiert wird. Was muss ich wohl machen, damit ich ein Array für 8 Bytes definiere?