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);
}