Hallo miteinander, wollte mich erneut bedanken für die Hilfe mit dem SD-modul.
So nun habe ich mir eine GUI mit VB.net geschrieben die mir Steuerbefehle(im String format) an dem Arduino sendet und diese auf einer SD-Karte in eine .txt abspeichert. Anhand einer KOntrollzahl die von meiner GUI versendet wird, soll dann der Arduino erkennen, ob er senden oder empfangen soll.
Ich möchte diese auf nach bedarf wieder von der SD-Karte auslesen und an die GUI senden.
Mein Problem ist, dass ich soweit komme , dass er die commands.txt auf der SD-Karte erstellt, aber er mir die gesendeten Strings nicht dort abspeichert und somit kann ich sie auch nicht auslesen.
Mein zweites Problem ist, dass wenn ich anhand der GUI die Daten vom arduino auslesen möchte(Habe einen Button receive) , versucht er die Daten aus der SD auszulesen und über serialport auszulesen (ohne Erfolg, da nichts geschrieben wird), versuche ich es ein zweites mal , sagt er SD karte nicht erkannt. Obwohl die SD karte immer von dem Cardinfo, READWRITE Sketch erkannt wird.
Hier nochmal mein Code:
/*Code zum Empfangen und Senden von Daten über Serialport (GUI<-> Arduino) */
/*Die Daten werden in eine SD-Karte innerhalb von commands.txt abgespeichert*/
//Globale Variablen
/*----------Varaiblen fürs Senden---------------------------------------*/
int ist_senden= 1; //Falls Arduino an GUI sendet
const int ledPin1= 22; //Mit Digital PIN 22 verbundene Led (senden)-(rote led)
/*----------------------------------------------------------------------*/
/*----------Variablen fürs Empfangen------------------------------------*/
const int ledPin2= 23; //MIt Digital PIN 23 verbundene Led (empfangen)-(gelbe led)
int ist_receive=2; //Falls Arduino von GUI empfangen soll
/*-----------SD Card-----------------------------------------------------*/
/* Verbindung - SPI an Mega2560
**MISO - pin 51
**MOSI - pin 50
**CLK - pin 52
**SS/CS (Chipselect) - pin 4 -> Standard chipselect pin 53
!!-----pin 53 somit als OUTPUT legen , da nicht verwendet-----*/
#include <SD.h>
int const chipSelect=53; //pin 4 für CS/SS-pin
String dataString; //Variable zum SpeiSern von Serialport-Daten
File Datei; //um file zu öffnen bzw. auch zu
/*----------------------------------------------------------------------*/
/*-----------Auswahlvariable für Swtich-Case----------------------------*/
int inByte=0; //Variable wo das Empfangene kontrollbit abgespeichert wird(als Byte)
/*----------------------------------------------------------------------*/
/*----------- Hier beginnt das Programm---------------------------------*/
/*----------------Standard einstellung, die konstant sind in void setup()-*/
void setup()
{
Serial.begin(9600); //Serialport öffnen mit baudrate 9600
//pinMode(ledPin1, OUTPUT); //ledPin1(senden LED), wird als Output gesetzt
//pinMode(ledPin2, OUTPUT); //ledPin2 (empf. LED), wird als Output gesetzt
pinMode(53, OUTPUT); //da standard-Pin CS/SS nicht verwendet diesen als OUTPUT legen
}
/*------------------------------------------------------------------------*/
/*---------------------------Diese Funktionen werden ständig abgefragt in loop---*/
void loop()
{
if (Serial.available() > 0) //Prüfen , ob mindestens ein Zeichen im Port vorhanden ist (Hier prüfe ich , ob senden oder EMpfangen)
{
inByte = Serial.read(); //lese zeichen au und speichere in chr vom typ char
switch (inByte)
{
/*Senden der Daten von Arduino zur GUI*/
case 1:
blink_send();
//Aufruf der Funktion zum auslesen von SD
read_SD();
break; //beende case 1
/* Von GUI empfangen*/
case 2:
if (Serial.available() > 0 )
{
//dataString= String(Serial.read()); //zuerst casten das gelesen in String und dann in Stringvarible abspeichern
//dataString += ",";
//Aufruf er Funnkrion, um Daten aus SerialPort in SD zu speichern
write_SD();
}
blink_receive();
break;
}
}
}
//############################################################################################################################################################//
//++++++++++++++++++++++++++++++++++++Funktionenbereich: Alle Funktionen, die innerhalb des Programms aufgerufen werden+++++++++++++++++++++++++++++++++++++++//
//############################################################################################################################################################//
/*---------------------funktion für das Blinken beim senden an GUI----------------------*/
/*---------------------Blink funktion 0,5sek an und 0,5sek aus--------------------------*/
/*Rote LED*/
void blink_send()
{
digitalWrite(ledPin1, HIGH); //leuchtet
delay(500); //leuchtet 0,5 sek
digitalWrite(ledPin1, LOW); //aus
delay(500);
}
/*-------------------------------------------------------------------------------------*/
/*----------Funktion die in Case 2 aufegrufen wird, damit LED blinkt-------------------*/
/*gelbe LED*/
void blink_receive()
{
digitalWrite(ledPin2, HIGH); //leuchtet
delay(500); // 0,5sek an
digitalWrite(ledPin2,LOW); //aus
delay(500); //0,5sek aus
}
/*-------------------------------------------------------------------------------------*/
//---------------------Funktion, die in SD-Karte speichert-----------------------------//
void write_SD()
{
Serial.print("Initializing SD Card.....");
if(!SD.begin(chipSelect)){
Serial.println("Initialization failed, card not present!");
return;
}
Serial.println("card initialized.");
Datei= SD.open("commands.txt", FILE_WRITE);
if (!Datei){
Serial.println("Error to open commands.txt");
}
dataString=String(Serial.read());
Datei.println(dataString); //Schreibe inhalt in SD-Karte
Datei.flush(); //Schliessen damit daten in SD gespeichert werden
}
//------------------------------------Funktion zum Auslesen der SD-Card-------------------------------------//
void read_SD(){
Serial.print("Initializing SD Card.......");
if (!SD.begin(chipSelect)){
Serial.println("Initialization failed, card not present!");
return; //tue nichts
}
Serial.println("card initialized.");
//Öffne Datei commands.txt
Datei=SD.open("commands.txt");
//wenn File/Datei vorhanden
if(Datei){
//lese solange file aus bis nichts mehr zu lesen ist
while (Datei.available()){
Serial.write(Datei.read()); //Schreibe an port Inhalt , das von Sd ausgelesne wird
}
//Nach lesen Datei schliessen
Datei.close();
}
else
//falls Datei nicht geöfnet werden konnte
Serial.println("error opening commands.txt");
Serial.write(13); //Carriage return line feed
Serial.print("It is not possible to read out the file");
}
//-------------------------------------------------------------------------------------------------------//
Bräuchte wieder euren Rat.