Nebelmaschine über Dmx mit arduino steuern

Gast #5021480
Lesenswert?

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
#5021514
Lesenswert?

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
Gast #5021608
Lesenswert?

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
#5021666
Lesenswert?

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
#5023131
Lesenswert?

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.
Gast #5048960
Lesenswert?

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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren