Forum: Mikrocontroller und Digitale Elektronik Nebelmaschine über Dmx mit arduino steuern


von Sascha (Gast)


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

von Patrick J. (ho-bit-hun-ter)


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

von Luca E. (derlucae98)


Lesenswert?

Lege das zu übertragende Byte in einer Variable ab.

if (byKanal > 125){
digitalWrite(PIN, HIGH);
} else {
digitalWrite(PIN, LOW);
}

von Sascha (Gast)


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

von Martin K. (maart)


Lesenswert?

Ich tippe mal auf DmxRxField

von Sascha (Gast)


Lesenswert?

Ok danke.Und der Wert wo ist der hinterlegt?

von Luca E. (derlucae98)


Lesenswert?

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.

von Luca E. (derlucae98)


Lesenswert?

Oder ist deine Nebelmaschine nicht DMX fähig, sondern ein Selbstbau(?), 
der DMX fähig gemacht werden soll?

von Martin K. (maart)


Lesenswert?

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.

von Sascha (Gast)


Lesenswert?

Genau ich will meine Nebelmaschine auf Dmx umbauen .Und wo ist denn der 
Wert für den jeweiligen Kannal hinterlegt?

von Luca E. (derlucae98)


Lesenswert?

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
von Sascha (Gast)


Lesenswert?

Ok danke für die Hilfen.

von Patrick J. (ho-bit-hun-ter)


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

von Marco H. (damarco)


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.

: Bearbeitet durch User
von Sascha (Gast)


Angehängte Dateien:

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

von moep (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.