DMX Adresse über Touch Display ändern und speichern

Hallo Forum,

es tauchen mal wieder Fragen auf. Ich habe mir vor kurzem eine DMX Steuerung für eine Bodennebelmaschine gebaut. Funktioniert soweit gut und ohne Probleme! hier habe ich ein DMX Adressmodul von DMX4all benutzt über das man die Adresse einstellt die man haben möchte als Beispiel A300 und das Bauteil gibt dann trotzdem Kanal 1 als Startadresse aus und speichert den eingestellten Wert...

Da das alles recht unflexibel ist und ein Manueller Modus nicht so leicht ist dachte ich mir es wäre super das ganze über ein 3,2" Touch Display zu lösen. Hier stelle ich mir folgende Fragen:

  • Wie kann ich die Adresse über ein Touch Display ändern? habe bisher nur die DIP Switches (Mäseklavier) im Netz gefunden aber das ist für ein Anwendungsfall unbrauchbar.

  • Wie kann ich den Wert über UP DOWN Tasten ändern und mit ENTER speichern?

  • Und ist es möglich das Display nach einer XX Zeit aus zu schalten?

würde mich über etwas Hilfe freuen

Grüße
Marius

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

a) hängt davon ab welches Touch Display du hast.
b) mit Up den Kanal erhöhen, mit Down den Kanal reduzieren. mit Enter die Daten aufs EEPROM speichern, damit das nach dem Einschalten auslesbar ist.
c) sicher. mit Jedem Tastendruck aktualisierst du eine Variable "previousMillis" mit millis(). Wenn dann im loop millis() - previousMillis > 10000 ist, sind 10 Sekunden um du kannst das Display ausschalten. Logischerweise musst du beim ersten Tastendruck dein Display auch einschalten...

Hallo noiasca,
danke für deine schnelle Antwort.

a) ich hab das Display https://www.amazon.de/gp/product/B0814M38ST/ref=ox_sc_act_title_8?smid=AMUN6OW4OKOC5&psc=1

b) ich hab das eher falsch geschrieben, ich möchte über das Display nicht ein DMX Controller bauen sondern die DMX Startadresse festlegen. Als Beispiel: Startadresse 300 somit sollen die Werte automatisch für die 5 DMX Kanäle geändert werden also Kanal 1=300 Kanal 2=301 Kanal 3=303 usw.
Mir fehlt nur grad der Ansatz wie ich das am besten im Code schreibe.

c) bei anderen Geräten wird das Display beim Start automatisch eingeschaltet und wenn man keine Taste drückt geht das Display automatisch aus durch ein erneutes drücken auf dem Display kann man das Display wieder einschalten und man ist auf dem Menü was man zuletzt hatte.

Was du mit der Variable machst ist ja fast egal. Natürlich kannst du statt "kanal" halt "offset" schreiben und dann diesen offset zu 300 dazu zählen.

Vermutlich ist es so: Du kannst nicht das Display "abschalten" sondern die Hintergrundbeleuchtung. Wenn die Hintergrundbeleuchtung abgeschaltet ist, musst du eben auf jeden Druck auf den Touch reagieren und zunächst die Hintergrundbeleuchtung einschalten und dann erst auf den "Button" am Display reagieren.

Aus meiner Sicht solltest du nun zwei Schritte machen:
1.) mal das Display mit einem einfachen Demosketch und deiner Display Library zum laufen bringen. Dann einfach mal 3 Tasten programmieren die einfachen einen Text auf Serial ausgeben, Hintergrund-Beleuchtung "blinken" lassen etc. Einfach damit du selber lernst wie mit deinem Display (und dessen Library) umzugehen ist. Nichts fancy Buntes, einfach mal Basics die zeigen wie das aussehen muss.

2.) wenn du dann deinen funktionierenden (!) Display Sketch und deinen "DMX" Sketch hier in Code Tags postest, dann wird man dir auch zeigen können wie man das zusammenführt.

super danke dir ich werde das mal versuchen. Ich poste hier die Tage dann mein Erfolg

#include <Streaming.h> // https://github.com/kachok/arduino-libraries/blob/master/Streaming/Streaming.h
// uint16_t dmxStartAdress = 1;              // grosses Universum (wenn mehr als 255)
uint8_t dmxStartAdress = 0;                  // kleines Universum (bis 255)
constexpr uint16_t maxDmxChannel = 255;      //
constexpr uint8_t dmxKanaele = 5;

uint8_t dmxValue[dmxKanaele] = {0, 64, 127, 192, 255};


void setup()
{
  Serial.begin(115200);
  Serial << (F("\r\nStart...\r\n")) << endl;
  DMXSerPrint();
}

void DMXSerPrint()
{
  static uint32_t lastDmxStartAdress = 4294967295;
  if (lastDmxStartAdress == dmxStartAdress)
    return;
  if (maxDmxChannel - dmxStartAdress < dmxKanaele)
  {
    Serial << F("DMXAdresse zu groß! Es passen keine ") <<  dmxKanaele
           << F(" Kanäle auf die Adresse ") << dmxStartAdress << endl << endl;
  }
  Serial << F("Neuer DMXStartkanal gefunden") << endl;
  for (byte b = 0; b < dmxKanaele; b++)
  {
    uint16_t myDMXAdress = dmxStartAdress + b;
    Serial << F("DMX - Kanal") << _WIDTH(myDMXAdress, 5) << F(" hat Value:") <<
           _WIDTH(dmxValue[b], 5) << endl;
  }
  Serial << endl << F("bitte neuen StartKanal eingeben!") << endl << endl;
  lastDmxStartAdress = dmxStartAdress;
}

void getDMXChannel()
{
  static char myBuffer[6] = {'\0'};
  static uint8_t index = 0;
  char myChar = Serial.read();
  if (isDigit(myChar))
  {
    myBuffer[index] = myChar;
    index++;
  }
  else if (isControl(myChar))
  {
    if (index != 0)
    {
      if (atoi(myBuffer) > int32_t(maxDmxChannel))
      {
        Serial << F("DMX Adresse") << _WIDTH(atoi(myBuffer), 5) <<
               F(" größer als das Universum (") <<  maxDmxChannel << ")"  << endl << endl;
      }
      else
      {
        dmxStartAdress = atoi(myBuffer);
      }
    }
    memset(myBuffer, '\0', sizeof(myBuffer));
    index = 0;
  }
  if (index == sizeof(myBuffer))
  {
    memset(myBuffer, '\0', sizeof(myBuffer));
    index = 0;
  }
}
void loop()
{
  getDMXChannel();
  DMXSerPrint();
}

Zu dem Display kann ich dir nur sagen wen du Touch benutzt funktioniert nicht SD Slot, außer dem will er nicht vernünftig arbeiten über Dupond Verbindung was ist länger als 4 cm , Flachbandkabel mag er auch nicht, habe das mit einem Eckstecker für Raspi erledigt so was damit ist der Mega nicht zugedeckt habe zwei solche Displays einer rot mit ILI9488 und einen mit ST7796S Treiber
Kann später Foto einfügen wen ich mein Telefon aus dem Auto hole :wink:

Hi fony,

was kannst du dann für ein Display empfehlen für den Anwendungsfall?

Suche nach SPI TFT 2,9" sind ab 12€ zu haben, gibt's auch bis 3,9", aber aufpassen manchmal wird geschrieben SPI aber das gilt nur für SD Slot, habe den nur über Ebay nach 3 Wochen war er da,
Am ESP ist er sehr schnell.
Nachteil meiner ist 3.3V Teil, da drauf muss man achten sonst braucht man Level Schifter