Zahlenwerte via RS232 an LCD übertragen

Hallo, ich möchte aus meinem Hauptprogramm, 10 Variablen via RS232 von meinem Arduino MEGA an ein eDip320 8l übertragen.

Den Bildschirm habe ich soweit Fertig Konfiguriert. Es befinden sich 10 Touch-Felder auf ihm. Betätige ich eins dieser Felder möchte ich den dazugehörigen Wert aktiv schalten damit ich ihn verändern kann mittel Drehgeber.

Mir fehlt jegliche Information wie so ein Grundsketch aussehen könnte. Kann mir dazu bitte jemand helfen?

Liebe Grüße Chris

Google machts möglich:

Zu deinem Display gibt es eine Beschreibung und Beispiele in denen du auch etwas über die Kommunikation nachlesen kannst.

Hier findest du was du suchst.
http://www.cctools.eu/ext_index.php/artikel/1121

@HotSystems die Anleitung habe ich mir selbstverständlich schon ein paar mal durchgelesen. Hilft mir aber nicht bei der erstellung eines Arduino Sketch..

Elmuecko:
@HotSystems die Anleitung habe ich mir selbstverständlich schon ein paar mal durchgelesen. Hilft mir aber nicht bei der erstellung eines Arduino Sketch..

Versteh ich jetzt nicht.
In der Anleitung findest du doch auch die Befehle, die zur Steuerung der seriellen Schnittstelle notwendig sind.

Hast du denn zum Display keine Beispiele?
Ich habe eben danach gegoogelt, scheinbar ist das Display schon so alt, dass es nichts mehr dafür gibt.
Wenn das Datenblatt nicht ausreicht, musst du dich an den Lieferanten wenden.

Oder liegt das Problem nur am Sketch?

Nein die Befehle sind nicht das Problem. Es geht darum wie der sketch auszusehen hat. Welche lib eingebunden werden muss und wie die routinen sind damit die übertragung über RS232 klappt. ich hab es auch schon angeschlossen. an 5v,GND, TX1 (18), RX1 (19).

Elmuecko:
Nein die Befehle sind nicht das Problem. Es geht darum wie der sketch auszusehen hat. Welche lib eingebunden werden muss und wie die routinen sind damit die übertragung über RS232 klappt. ich hab es auch schon angeschlossen. an 5v,GND, TX1 (18), RX1 (19).

Welche Library du benötigst, solltest du selber wissen.
Für das Display benötigst du am MEGA keine Library.

Du musst eine serielle Schnittstelle am MEGA initialisieren und darüber die Daten mittels der entsprechenden Befehle senden.

Wie die Schnittstelle arbeitet, ist hier sehr gut beschrieben.

Eine weitere gute Erklärung findest du hier.

Danke HotSystems ich werde nachher mal berichten was ich erreichen konnte.

Elmuecko:
Danke HotSystems ich werde nachher mal berichten was ich erreichen konnte.

Ok, ich hoffe die beiden Links können dir helfen.

Serielle Daten zu übertragen, ist nicht so kompliziert, nur beim MEGA muss ich aktuell noch passen.
Bisher bin ich noch ohne den ausgekommen. Bei kleinen Projekten reicht der Atmega328 völlig.

Mega ist im Grunde genauso, nur von allem mehr. mehr €, RAM, Rom, I/O Pins, Analogpins, serielle Schnittstellen, etc.

Wenn ich dieses stück Code Kompilieren möchte klappt das natürlich nicht.
Wie kann ich denn diesen Code den mir das Handbuch vorgibt, dem Arduino definieren?

#include <SoftwareSerial.h>

SoftwareSerial portOne(18, 19);
;
void setup() {
 
 // Start software serial port
  portOne.begin(9600);
  
}

void loop() {

  Serial.write(#ZL,190,140,hallo,NU);
  
  }

Elmuecko:
Wenn ich dieses stück Code Kompilieren möchte klappt das natürlich nicht.
Wie kann ich denn diesen Code den mir das Handbuch vorgibt, dem Arduino definieren?

#include <SoftwareSerial.h>

SoftwareSerial portOne(18, 19);
;
void setup() {

// Start software serial port
 portOne.begin(9600);
 
}

void loop() {

Serial.write(#ZL,190,140,hallo,NU);
 
 }

Was soll den hier angezeigt werden?

Serial.write(#ZL,190,140,hallo,NU);

Das müssen schon anzeigbare Werte sein.

z.B.

Serial.write("Hallo Welt");

Oder eine Variable mit Inhalt.

Laut dem Handbuch für das Display sind das die Codes um eine Text zu plazieren.

ich füge mal einen Bildausschnitt an. Ich möchte nur 2 Sachen. Einmal einfach nur eine Variable aus meinem Programm an bestimmten Punkten im Display anzeigen lassen und Punkt 2. Sobalt ein Touchschalter X betätigt ist auf dem Display dann würd ich gerne eine Abfrage starten damit sich der Richtige Motor der 10 Möglichen bewegt.....

Egtl nicht so schwer kann ich mir vorstellen aber ich hab nen Brett vorm Kopf.

Dann musst du das auch an das Display schicken und nicht an den Serial Monitor.
Beispiel:
portOne.write(deine Daten);

Und die Daten korrekt formatieren. Du kannst mit write()/print() ein Zeichen, eine Zahl oder einen String senden. Aber mehrere hintereinander muss man entsprechend Stückeln

Manche Dinge in dem Datenblatt sind Bezeichnungen und Platzhalter. Dass man dann entsprechend ersetzen.

Gibt es ne Möglichkeit ersteinmal zu prüfen ob die Verbindung vom Arduino zum Display steht?

Ich habe eine Antwort von einem MA der Display Firmen erhalten. Leider kann der Arduino nichts damit anfangen. Es liegt wohl eher an mir... hat denn keiner einen Tipp? Ich habe TxD an Tx1 (Pin18) RxD an Rx(Pin19) angeschlossen. Laut der Aussage des Mitarbeiters soll ich das Smartprotokoll abschalten es aber später wieder einschalten, zur Sicherheit. Dann kann es ja gleich anbleiben. Wenn ich ein einfaches "Hello" an das Display senden möchte via Serial1 seh ich nichts auf dem Display da auch kein Cursor zu sehen ist.

Gebe ich diese Codes aus dem Handbuch ein kommen Fehlermeldungen weil ein # oder ein $ benutzt wird..

Ich weiß nicht mehr weiter... :frowning:

Es sieht eher danach aus dass du nicht in der Lage bist das in Code umzusetzen, weil du das Datenblatt viel zu wörtlich nimmst und nicht versteht was die Bezeichnungen da wirklich bedeuten.

das $ z.B.steht für eine Hexadezimal-Konstante. Das wird ein ein paar Programmsprachen und Assembler-Versionen so gemacht. Aber nicht in C/C++. Hier fangen Hex-Konstanten mit 0x an

ESC ist das ASCII Escape Zeichen (0x1B). "ZL" ist das Kommando für "Zeichen Linksbündig". 0x00 ist ein Null-Terminator. Den muss man noch mal extra Senden, weil C/C++ das nicht tut.

Du kannst dir eine Funktion schreiben, der du einen C String übergibst (const char* als Parameter) und die außen herum automatisch die nötigen Bytes einfügt.

Ja Serenifly das ist genau mein Problem und fehlende kenntnisse sowie verständnisse in der Informatik.

Ich habe jetzt diese Funktion geschrieben:

void setup() {
  //Initialize serial and wait for port to open:
  Serial2.begin(115200);
  while (!Serial)

    Serial2.print(0x1b,0x5a,0x4c,96,96,0x00);
}

Das entspricht dem Code aus dem Handbuch im Format "Hex"

Der Fehlercode lautet nun : no matching function for call to 'HardwareSerial::print(int, int, int, int, int, int)'

Habe ich eine Lib vergessen? Oder eine Vorraussetzung?

:confused: Wie kommst du darauf dass sowas geht?

Und eine eigene Funktion hast du auch nicht geschrieben, wobei das nicht zwingen nötig ist

Mit sowas bist du schon eher in der richtigen Richtung:

void writeString(const char* str, unsigned int x, unsigned int y)
{
  Serial2.write(0x1B);
  Serial2.print('Z');
  Serial2.print('L');
  Serial2.write(x);
  Serial2.write(y);
  Serial2.print(str);
  Serial2.write((byte)0x00);
}

Das ist eine Funktion

Die kann man dann so aufrufen:

writeString("Test", 30, 30);

Aber keine Ahnung ob das Display darauf korrekt reagiert. Die Koordinaten sind sowie es aussieht jeweils 16 Bit Werte. Deshalb unsigned int

Gewöhne dir jedenfalls ab das alles in eine write()/print() Anweisung schreiben zu wollen. Wie soll das gehen?

Wofür stehen denn die , 30, 30 im writeString?

Ich hab alles in eine Klammer geschrieben weil ich davon ausgegangen bin das nur so die komplette information als "Satz" ankommt...