String to char *

Hallo Leute,

bin gerade dabei ein Programm zuschreiben das meine CNC-Fräse steuert. Dafür muss ich dein eingehenden G-Code aufbereiten. Leider hänge ich gerade dabei den String input in einen char* umzuwandeln.

Header

class Terminal {
    public:
      void inputCommand(String input);
      boolean statusCommand(); //Gibt an ob der G-Codebefehl shcon abgearbeitet wurde

    private:
      // 0.N1, 1.G1, 2.X, 3.Y, 4.Z, 5.A, 6.I, 7.J, 8.F, 9.L Laser, 
      int commandSplit[12]; //Zwischenspeicherung des G-Codes
      char *buf;
      char *bufSplit;
      char *convert;
      int charArrayToInt(char* con);
      
      boolean split(String input); //Bereitet den G-Code auf
      
        


};
#endif

cpp Datei

boolean Terminal::split(String input) {
  Serial.println("Terminal oben");  //Nur zum Testen
  input.toCharArray(buf, input.length());
  Serial.println(buf);//Nur zum Testen
  convert = strtok(buf, " ");
  Serial.println(convert);//Nur zum Testen

Hoffe mir kann jemand helfen.

Mit freundlichen Grüßen
Janik

Hallo Janik,
wie wäre es mit c_str() - ist eine Methode der Klasse String.
https://www.arduino.cc/reference/de/language/variables/data-types/string/functions/c_str

Gruß Walter

wie wäre es mit c_str() - ist eine Methode der Klasse String.

Normal die richtige Wahl, aber das geht nicht mit strtok()

toCharArray() wird von Anfängern oft völlig unnötig verwendet, aber hier ist es richtig. Am besten ist aber von vorne herein auf die String Klasse verzichten

Übrigens ist das nicht gut:

boolean Terminal::split(String input)

Richtig:

boolean Terminal::split(String& input)

Hallo,

danke für die schnellen Antworten. Bin als Einsteiger immer wieder froh wenn im Tipps bezüglicher besserer Programmierung bekomme. :slight_smile:

Wenn toCharArray an der Stelle richtig ist, aber nicht funktioniert, woran kann das liegen?

Wenn toCharArray an der Stelle richtig ist, aber nicht funktioniert, woran kann das liegen?

Das liegt am char array, das du nicht zur Verfügung stellst.

  char buf[30]; ist was anderes als  char* buf.

String::c_str() liefert übrigens ein const char*, mit dem strtok nichts anfangen darf/kann, weil es den Text verändern will.

Hallo,

ich möchte eine ganz andere Lösung des Problems vorschlagen:

GRBL benutzen. Das ist eine fertig programmierte Firmware für Arduino zur Ansteuerung von CNC-Fräsen.
Wenn der Spaß genau darin liegt es selbst zu programmieren ist es natürlich etwas anderes.

Noch eine Alternative ist ESTLCAM. Das ist nicht nur eine für ihren Preis von 50 Euro verdammt leistungstarke
CAD-CAM-Software sondern zugleich eine Firmware läuft auch auf Arduino oder Arduino-Mega2560 UND PC-Programm zum ansteuern einer CNC-Fräse mit Endschaltern Spindel/Kühlmittel ein/aus und alles was man so braucht.

https://www.estlcam.de

viele Grüße

Stefan