Hallo, ich habe gerade ein Projekt laufen in dem ich eine Nebelmaschine mit Hilfe eines Arduinos über Dmx steuern möchte.Ich habe schon den Programmcode von der Arduino Website eingefügt (https://playground.arduino.cc/DMX/Ardmx).Nun ist meine Frage wie ich festlegen kann das wenn bei einem Kanal der Wert über z.B. 125 ist eine Signal an einen Transistor ausgegeben wird.Am besteb wäre es wenn mir da jmd. ein Beispiel schicken könnte. Danke für eure Bemühungen. Sascha
Hi 'Siehst' Du denn die verschiednen Werte der vorbeiflitzenden Kanäle? Dann ist's doch eher trivial: Passt die Kanalnummer? Ja ... ist der diesem Kanal mitgegebene Wert >125? Ja ... Feuer frei, sonst wieder aus machen. Etwas mehr als 'Habe was zusammen kopiert und brahcne noch mehr von Euch' sollte Es schon sein ;) Eben auch Informationen, was bei Dir schon funktioniert, wo es hängt und wie Du den Hängern bisher nachgegangen bist. Auch ein Anfänger kann versuchen, den frisch zusammen kopierten Code zu analysieren. Selbst, wenn dabei 'Mist' analysiert wird, zeigt Das dem geneigtem Forenvolk, daß Du Dich damit auseinander setzen WILLST und nicht nur 'was zum Vorzeigen/Angeben vor den Anderen' brauchst. MfG
Lege das zu übertragende Byte in einer Variable ab. if (byKanal > 125){ digitalWrite(PIN, HIGH); } else { digitalWrite(PIN, LOW); }
Ja ich habe es schon versucht zu analysieren .Mir fehlt nur der Name von der Variable der für den kannal steht und der der die Werte mit sich bringt. Diese beiden Variablen habe ich im Programm leider nicht ausfindig machen können. Mfg Sascha
Dein Codebeispiel von oben ist nur zum empfangen von DMX-Befehlen gedacht. Um die Nebelmaschine steuern zu können, musst du aber DMX-Befehle senden.
Oder ist deine Nebelmaschine nicht DMX fähig, sondern ein Selbstbau(?), der DMX fähig gemacht werden soll?
Luca E. schrieb: > Dein Codebeispiel von oben ist nur zum empfangen von DMX-Befehlen > gedacht. Um die Nebelmaschine steuern zu können, musst du aber > DMX-Befehle senden. Er will wohl eine einfache Maschine mit Handtaster auf DMX-Steuerung erweitern.
Genau ich will meine Nebelmaschine auf Dmx umbauen .Und wo ist denn der Wert für den jeweiligen Kannal hinterlegt?
Sascha schrieb: > Wert für den jeweiligen Kannal hinterlegt? In dem Array DmxRxField[i], wenn ich mich nicht irre. 'i' gibt die Kanalnummer ab der Startadresse an. Wenn als Startadresse '3' eingestellt ist, steht in DmxRxField[0] der Wert des 3. Kanals, in DmxRxField[1] der Wert des 4. Kanals, usw.
:
Bearbeitet durch User
Hi Sascha schrieb: > Ja ich habe es schon versucht zu analysieren .Mir fehlt nur der Name von > der Variable der für den kannal steht und der der die Werte mit sich > bringt. Diese beiden Variablen habe ich im Programm leider nicht > ausfindig machen können. Da in dem Code nicht sooo viele Variablen vorhanden sind, hätte man versuchen können, ob die per DMX verschickten Werte irgendwo im Programm auftauchen. Da die Variablen halbwegs aussagekräftige Namen haben, könnte man auch so auf die Funktion der Variable schließen und mit Diesen die Prüfung anfangen, ob der gesendete Wert dort erscheint. Wenn JA, Pin13 (meines Wissen wohl immer eine LED auf dem 'Shild') an, wenn NEIN, wieder aus. MfG
steht doch in der Beschreibung. Der Code liest die Daten erst ab der gesetzten Startadresse ein. volatile uint8_t DmxRxField[8]; //array of DMX vals (raw) volatile uint16_t DmxAddress; //start address Hier hat das Fixture 8 channels das Array DmxRxField ist somit 8 byte groß Die Adresse wird im setup mit DmxAddress = 3; // The desired DMX Start Address gesetzt. Die werte sind dann im mxRxField[0] für Channel 1 ab der Startadresse vorhanden. Nun ist es sehr simpel das auszuwerten ;)
1 | void loop() { |
2 | |
3 | if(mxRxField[0]>127)digialWrite(pinx,high); |
4 | else digialWrite(pinx,low); |
5 | }
|
was leider fehlt ist einen Timer der abläuft wenn das Signal ausfällt und dann den Pin in einen default zustand bringt. Sonst bleibt dieser high da sich die Werte im mxRxField nicht mehr ändern kann aufgrund des fehlenden Signals. Der Code ist zwar einfach aber recht störanfällig, da DMX Telegramme nicht geprüft werden ob sich wirklich gültig sind. Mit dem Finger auf den RX Anschluss fängt das ganze an zu flackern.
:
Bearbeitet durch User
Hallo ich bin es mal wieder. Wollte jetzt gerade das Programm(nur ein Test Programm ob mein schnittstellen ic funktioniert) siehe anhang auf mein arduino uno überspielen.Jedoch kam bei mir folgender fehler heraus: 'USART0_RX_vect' appears to be a misspelled signal handler, missing __vector prefix [-Wmisspelled-isr] ISR(USART0_RX_vect) { ^ dmx:21: error: 'UCSR1A' was not declared in this scope uint8_t USARTstate= UCSR1A; //get state before data! ^ dmx:22: error: 'UDR1' was not declared in this scope uint8_t DmxByte = UDR1; //get data ^ dmx:25: error: 'FE1' was not declared in this scope if (USARTstate &(1<<FE1)) //check for break ^ exit status 1 'UCSR1A' was not declared in this scope Nun weiß ich leider nach etlichen Stunden herumprobieren nicht mehr weiter.Wäre nett wenn mir jmd eine Antwort schreiben würde. LG Sascha
Hast du den Link den du oben gepostet hast eigenltich jemals selbst angeschaut?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.