Daten Frame übertragen.

Hallo,
für ein Projekt bei dem ich einen Sortierarm steuern möchte, muss ich ein Daten Frame zu diesem übertragen. Leider funktioniert das Kompelieren von meinem Programm nicht.
Mein Board ist ein Arduiono Uno.
Als Fehlermeldung kommt:

Arduino: 1.8.7 (Windows 10), Board: "Arduino/Genuino Uno"

In file included from C:\Users\Test\Schule\Projekt\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,

from C:\Users\Test\Schule\Projekt\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,

from C:\Users\Test\Schule\Projekt\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:232,

from sketch\TEST4.ino.cpp:1:

C:\Users\Test\Schule\Projekt\Arduino\hardware\arduino\avr\cores\arduino/Print.h:30:13: error: expected unqualified-id before numeric constant

#define HEX 16

^

C:\Users\Test\Schule\Projekt\TEST4\TEST4.ino:15:34: note: in expansion of macro 'HEX'

char Startzeichen = 0xC002000030,HEX;

^

exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Meine Frage ist ob ich hier vielleicht das falsche Board verwende und wenn ja welches das richtige ist.

#include <SoftwareSerial.h> //emuliert serielle Schnittstelle 
#include <LiquidCrystal.h>  //einbinden der LiquidCrystal Bibliothek


const int rxpin = 2;        //Zum Empfangen verwendeter Pin
const int txpin = 3;        //Zum Senden verwendeter Pin
const int rs = 11, en = 10, d4 = 4, d5 = 5, d6 = 6, d7 = 7; //initialisieren der Bibliothek (Konstante Variable)

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);  //mit zuweisungen der LCD-Pins zu Ausgängen
SoftwareSerial RS232(rxpin, txpin); //Neuer serieller Port an Pins 2 und 3

char Eingabe = Serial.read(); 
char Ausgabe = RS232.read();
char Startzeichen = 0xC002000030,HEX; //Kommando Frame

void setup()
{
 Serial.begin(38400); //Serieller USB-Port
 RS232.begin(38400);  //Software-Port mit 38400 Baud initalisieren
 lcd.begin(16, 2);   //einstellen der Anzahl der Spalten und Zeilen des LCDs
}

void loop()
{
 if (Eingabe == 'S')
{
   RS232.write(Startzeichen);
   Serial.print(Eingabe);
   lcd.print(Ausgabe);
}
}

TEST4.ino (995 Bytes)

Wie sollen wir das beantworten ?
Wir kennen dein Board nicht.

Und poste bitte die komplette Fehlermeldung und deinen Sketch hier im FORUM in Code-Tags, Schaltfläche </> oben links im Editorfenster.

Entschuldigung ist mein erster Foren Betrag. Habe es editiert.

Das ist der Code den ich gerne an den Sortierarm übertragen möchte, damit der erstmal seinen IST-Zustand ausgibt. Alternativ habe ich es so Versucht, was aber auch mit der selben Fehlermeldung Endete.

#include <SoftwareSerial.h> //emuliert serielle Schnittstelle 
#include <LiquidCrystal.h>  //einbinden der LiquidCrystal Bibliothek


const int rxpin = 2;        //Zum Empfangen verwendeter Pin
const int txpin = 3;        //Zum Senden verwendeter Pin
const int rs = 11, en = 10, d4 = 4, d5 = 5, d6 = 6, d7 = 7; //initialisieren der Bibliothek (Konstante Variable)

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);  //mit zuweisungen der LCD-Pins zu Ausgängen
SoftwareSerial RS232(rxpin, txpin); //Neuer serieller Port an Pins 2 und 3

char Eingabe = Serial.read();
char Ausgabe = RS232.read();
char Startzeichen = 0xC0,HEX;
char Kommando = 0x02,HEX;
char Data1 = 0x00,HEX;
char Data2 = 0x00,HEX;
char Endezeichen = 0x30,HEX;

void setup()
{
  Serial.begin(38400); //Serieller USB-Port
  RS232.begin(38400);  //Software-Port mit 38400 Baud initalisieren
  lcd.begin(16, 2);   //einstellen der Anzahl der Spalten und Zeilen des LCDs
}

void loop()
{
  if (Eingabe == 'R')
 {
    RS232.write(Startzeichen);
    RS232.write(Kommando);
    RS232.write(Data1);
    RS232.write(Data2);
    RS232.write(Endezeichen);
    Serial.print(Eingabe);
    lcd.print(Ausgabe);
 }
}

HEX ist ein festgelegtes Macro, das kannst Du nicht für etwas anderes verwenden.

Was soll dieser Quatsch?

char Startzeichen = 0xC0,HEX;

// Mit 0x vorn dran weiß der Compiler, dass das HEX ist. Also:

char Startzeichen = 0xC0;

Den Fehler machst Du mehrfach.

Du zeigst damit, dass Du mit den elementarsten Grundkenntnissen auf Kriegsfuß stehst. Das solltest Du ändern.

Gruß Tommy

Hi

Ganz nebenbei - der Kompiler bittet Dich förmlich um etwas:

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Dort kannst Du noch einen 2.ten Haken setzen (müsste ... beim Upload ... sein) - der Haken stört auch nicht.

MfG

@Jenne_4
Warum beantwortest du die gestellte Frage zu der entsprechenden Zeile nicht ?
Oder ist der Teil kopiert und du weißt es auch nicht?

Warum wird das hier wird das hier direkt so ruppig und unfreundlich. Ich dachte das Forum ist dafür da um Leuten zu helfen die sich noch nicht so gut mit der Materie auskennen und nicht nur für Experten.
Wie oben gesagt soll dieser Befehl dem Sortierarm sagen, das der IST-Zustand abfragt wird.
Das steht so im Datenblatt:

Kmd. Data1 Data2 Bedeutung

0x02 0x00 0x00 Istwert aller Achsen ausgeben

Wenn Du das als ruppig empfindest, dann bist Du wohl etwas überempfindlich.

Zur Erlangung von Hilfe in einem Forum gehört es auch, die gestellten Fragen zu beantworten und wenigstens in Grundzügen erkennen zu lassen, dass ein gewisser Lernwille vorhanden ist.

Wir sind hier nicht eine Ansammlung kostenloser Dienstleister.

Gruß Tommy

Jenne_4:
Warum wird das hier wird das hier direkt so ruppig und unfreundlich......

Was bitte ist daran ruppig und unfreundlich, wenn wir zu deinem Problem Fragen stellen ?

Wenn du einfach mal den Unsinn, deine freie Erfindung ,HEX weglässt, sollten die gröbsten Probleme weg sein.

Tommy56:

   char Startzeichen = 0xC0;

Bedanke dich lieber bei Tommy für den Tip.

Erstmal, das ist doch hier ein Forum und kein Chatroom, warum also kann ich da nich am nächsten Tag antworten wenn ich wider am PC bin. Zweitens habe ich das mit dem , HEX auch aus diesem Forum. Da dies mein erster Versuch mit einer Komplexeren Codierung bei einem Arduino ist und ich da wie wgesagt nicht weiter komme habe ich es erstmal so probiert. Und drittens ohne das ,HEX funktioniert das auch nicht weshalb ich diesen Betrag überhaupt geschrieben habe.

char Startzeichen = 0xC002000030;

Ein Byte sind zwei Hex-Ziffern. Das kann also auch nur falsch sein

Die zweite Variante ist schon besser, aber das Einlesen kann nicht funktionieren. Die serielle Schnittstelle musst du ständig in loop() abfragen. Und nicht einmal am Anfang wenn sie noch gar nicht initialisiert ist

Jenne_4:
Zweitens habe ich das mit dem , HEX auch aus diesem Forum.

Das glaube ich Dir nicht, zumindest nicht in diesem Zusammenhang.

Jenne_4:
Da dies mein erster Versuch mit einer Komplexeren Codierung bei einem Arduino ist und ich da wie wgesagt nicht weiter komme habe ich es erstmal so probiert. Und drittens ohne das ,HEX funktioniert das auch nicht weshalb ich diesen Betrag überhaupt geschrieben habe.

Dann ist das Thema wohl für Deine Kenntnisse zu komplex. Lege es zur Seite und lerne die Grundlagen. Dann bist Du auch irgendwann in der Lage unsere Antworten zu verstehen.

Das ist ehrlich gemeint, denn Du machst es Dir nur selbst schwer. Besonders wenn Du dann noch immer Recht behalten willst.

Gruß Tommy