Ansicht umschalten
Avatar von Ü30-Quereinsteiger
  • Ü30-Quereinsteiger

23 Beiträge seit 19.02.2018

Arduino SD-Card Gcode-Sender

Hallo Zusammen,

ich möchte gern den Arduino als Code-Sender benutzen.

Ich habe:
Arduino mit erweitertem Basis-Code aus dem MaXY-Posi Projekt.
Eine SD-Card und das SD-Card Modul einzeln mit Kabel (kein Shield).
Da ich gern "sehe" was passiert, habe ich über ein 20-4 LCD ein paar Dinge angezeigt.

Folgendes klappt:

Verbindung zum Controller wird aufgebaut.
Arduino sendet fleissig"?" an den Controller.
Ich bekomme den Maschinenzustand "IDLE" zurück.
Die SD-Card wird erkannt .

Aber:
--- if (ready_to_run && (inputString.indexOf("Pn:S")) >= 0)
Das ist die Bedingung für das senden des Codes.

Der "inputString.indexOf("Pn:S"))" bleibt bei "-1" hängen.

Wie bekomme ich den auf ">=0"? Oder ist die Bedingung falsch? (der ganze Code steht unten)
Was ist dieses Pn:S und Pn:R eigentlich? Beide sind "-1".

Dann noch ne Frage zum Verständnis:

Im Artikel wird der Datei-Name auf der SD-Card als "autoplay.nc" benannt.
Im Code finde ich: File dataFile = SD.open("gcode.txt");
Was stimmt??

Ich hoffe ihr könnt helfen.

Meine Frau wartet immer noch auf Ihr Herz zum Valentins-Tag.... :-(

LG Christian

PS: hier mein Code

-------------------------------------------------------------------------------------
/* Gcode-Sender V1.0.0
* Aktuelles Release V1.0.0
*
* Christian Seidel
* März 2018
* Lesen des Gcode von SD-Karte und senden an den Controller des MaXY-Posi
* Basierend auf Code von:
* Limor Fried - 22 December 2010
* und modifizierung von:
* Tom Igoe - 9 Apr 2012
#include <SPI.h>
#include <SD.h>

//---------------- Display ----------------------------------
#include <LiquidCrystal_I2C.h> // Display
LiquidCrystal_I2C lcd(0x3F, 20, 4); // 0x3F oder 0x27
//------------------------------------------------------------
#if defined(__SAM3X8E__)
#undef __FlashStringHelper::F(string_literal)
#define F(string_literal) string_literal
#endif

//---------------- SD-Card-----------------------

const int chipSelect = 10;
String inputString = ""; // a string to hold incoming data
boolean ready_to_run = false;

void setup() {

inputString.reserve(200);
// Open serial communications and wait for port to open:
Serial.begin(115200);


while (!Serial)
{
; // wait for serial port to connect. Needed for native USB port only
}

pinMode(chipSelect, OUTPUT);

lcd.begin(); // aktiviert LCD-Display
lcd.backlight();
//--------- Startbildschirm (TFT-Display) -----------
lcd.setCursor(0, 0);
lcd.print(" Gcode Sender ");
lcd.setCursor(0, 1);
lcd.print(" V1.0.0 - 03.2018 ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" Christian Seidel ");
delay(3000);
lcd.clear();
}

void serial_readln(){
boolean got_cr = false;
inputString = "";
do {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == 13) {
got_cr = true;
}
}
} while (!got_cr);
}

void file_send()
{
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
// SerialEvent will not work while active!
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect))
{
Serial.println("(SD Card failed or not present)");
}

// Serial.println("(SD card initialized)");

File dataFile = SD.open("gcode.txt");
char c;
// if the file is available, read from it:
lcd.setCursor(0, 3);
lcd.print(" datafile");
if (dataFile)
{
while (dataFile.available())
{
c = dataFile.read();
if (c >= 32) Serial.write(c);
lcd.setCursor(0, 3);
lcd.print("Step1");
if (c==13)
{
while (Serial.available()) Serial.read();
Serial.write(c);
serial_readln();
lcd.setCursor(0, 3);
lcd.print(" Gcode wird gesendet");
delay(25);
if (inputString.indexOf("Pn:R") >= 0) break;
}
}
dataFile.close();
}
// if the file isn't open, pop up an error:
else
{
Serial.println("(error opening gcode)");
lcd.setCursor(0, 3);
lcd.print("error opening gcode ");
}
delay(500);
}

void loop()
{
lcd.clear();
lcd.setCursor(6, 2);
lcd.print(inputString.indexOf("Pn:R"));
lcd.setCursor(10, 2);
lcd.print(inputString.indexOf("Pn:S"));


if (!Serial.available())
{
lcd.setCursor(0, 0);
lcd.print("MaXY-Posi verbinden?");
}
if (Serial.available())
{
lcd.setCursor(0, 0);
lcd.print("MaXY-Posi verbunden!");

if (!SD.begin(chipSelect))
{
lcd.setCursor(0, 1);
lcd.print(" SD-Card einstecken ");
}

if (SD.begin(chipSelect))
{
lcd.setCursor(0, 1);
lcd.print(" SD-Card gefunden ");
}
}

char c;

while (Serial.available()) Serial.read();
Serial.write('?');
serial_readln();
if (inputString.indexOf("Idle") >= 0)
{
ready_to_run = true;
lcd.setCursor(0, 2);
lcd.print(" Idle");
}
if (inputString.indexOf("Run") >= 0)
{
ready_to_run = false;
lcd.setCursor(0, 2);
lcd.print(" Run ");
}
if (inputString.indexOf("Hold") >= 0)
{
ready_to_run = false;
lcd.setCursor(0, 2);
lcd.print(" Hold ");
}
if (inputString.indexOf("Alarm") >= 0)
{
ready_to_run = false;
lcd.setCursor(0, 2);
lcd.print(" Alarm ");
}
if (ready_to_run && (inputString.indexOf("Pn:S")) >= 0)
{
file_send();
lcd.setCursor(10, 2);
lcd.print("senden");
}
delay(100);

}

Bewerten
- +
Ansicht umschalten