Moinsen!
Ich bin relativ neu im Umgang mit den Arduino und hab ein paar fragen.
#include <nmea.h>
#include <SoftwareSerial.h>
#define rxPin 9
#define txPin 3
// create a GPS data connection to GPRMC sentence type
NMEA gps(GPRMC);
SoftwareSerial portOne(rxPin, txPin);
void setup() {
Serial.begin(9600);
portOne.begin(9600);
}
String dataString = "";
void loop() {
if (portOne.available() > 0 ) {
// read incoming character from GPS
char c = portOne.read();
// check if the character completes a valid GPS sentence
if (gps.decode(c)) {
// check if GPS positioning was active
dataString = gps.sentence();
delay(10);
Serial.print(dataString);
}
}
}
Ausgabe ist wunderbar:
$GPRMC,095453.00,V,,,,,,,270412,,,N71$GPRMC,095453.99,V,,,,,,,270412,,,N71$GPRMC,095455.00,V,,,,,,,270412,,,N77$GPRMC,095456.00,V,,,,,,,270412,,,N74$GPRMC,095456.99,V,,,,,,,270412,,,N74$GPRMC,095458.00,V,,,,,,,270412,,,N7A$GPRMC,095459.00,V,,,,,,,270412,,,N7B$GPRMC,095459.99,V,,,,,,,270412,,,N7B$GPRMC,095501.00,V,,,,,,,270412,,,N77$GPRMC,095502.00,V,,,,,,,270412,,,N74$GPRMC,095502.99,V,,,,,,,270412,,,N74$GPRMC,095504.00,V,,,,,,,270412,,,N72$GPRMC,095505.00,V,,,,,,,270412,,,N73$GPRMC,095505.99,V,,,,,,,270412,,,N73$GPRMC,095507.00,V,,,,,,,270412,,,N*71
Ich befinde mich im Raum, deswegen nur so halbe GPS Daten...
Jetzt möchte ich diese daten auf Sd-Karte wegspeichern.
#include <nmea.h>
#include <SoftwareSerial.h>
#include <SD.h>
#define rxPin 9
#define txPin 3
// create a GPS data connection to GPRMC sentence type
NMEA gps(GPRMC);
SoftwareSerial portOne(rxPin, txPin);
const int D1_PIN = A1;
const int D2_PIN = 4;
const int chipSelect = 10;
void setup() {
pinMode(D1_PIN, OUTPUT);
pinMode(D2_PIN, OUTPUT);
Serial.begin(9600);
portOne.begin(9600);
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT);
digitalWrite(D1_PIN, HIGH);
if (!SD.begin(chipSelect)) {
digitalWrite(D1_PIN, LOW);
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
}
void err_out(int err_code){
digitalWrite(D1_PIN, HIGH);
digitalWrite(D2_PIN, LOW);
while(true){
delay(1000);
for(int i=0; i < err_code; i++){
digitalWrite(D2_PIN, HIGH);
delay(200);
digitalWrite(D2_PIN, LOW);
delay(200);
}
}
}
unsigned long count = 0;
String dataString = "";
void loop() {
if (portOne.available() > 0 ) {
// read incoming character from GPS
char c = portOne.read();
// check if the character completes a valid GPS sentence
if (gps.decode(c)) {
// check if GPS positioning was active
dataString = gps.sentence();
delay(10);
Serial.print(dataString);
File myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
digitalWrite(D1_PIN, LOW);
digitalWrite(D2_PIN, HIGH);
delay(30);
Serial.println("Writing to test.txt...");
myFile.println(dataString);
// close the file:
myFile.close();
count++;
}
else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
err_out(1);
}
}
}
if(count == 10){
while(1) delay(1000); // stop it already
}
}
Ausgabe :
Initializing SD card... initialization done.
Initializing SD card... initialization done.
Initializing SD card... initialization done.
Initializing SD card... initialization done.
Dabei dachte ich, dass void setup() immer nur genau einmal ausgeführt wird. Wie kann es dann, dass er das void setup() als schleife durchläuft?
Hoffe ihr könnt mir helfen..
Dieses Sd karten breadboard benutze ich: