Hallo, ich bin recht neu in der Arduino Welt. Ich möchte für ein Projekt ein GPS Standort in Regelmäßigen Abständen über einen NRF24 übertragen und diese dann dort auswerten. Ich habe schon einiges ausprobiert.. ich bin bereits so weit gekommen dass ich eine Kommunikation herstellen konnte (Beispielcode aus dem Netz weil selbst schreiben noch nicht klappt^^) und in einem weiteren konnte ich bereits den Standort auslesen und auswerten. Beim Kombinieren dieser beiden Codes bin ich auf ein paar Probleme gestoßen. (Datenformate ändern um diese über den NRF24 zu schicken und diese dann auf dem zweiten Arduino auszuwerten...)
Das sieht wohl für Könner schlimm aus aber hier mal mein Code:
// Load in the libraries
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <printf.h>
// Set the CE & CSN pins
#define CE_PIN 9
#define CSN_PIN 10
//TinyGPS
TinyGPS gps;
//Set the GPS RX & TX Pins
SoftwareSerial ss(4, 3);
static const int RXPin = 4, TXPIN = 3;
//Set GPSBaud
static const uint32_t GPSBaud = 9600;
// This is the address used to send/receive
const byte rxAddr[6] = "00001";
// Create a Radio
RF24 radio(CE_PIN, CSN_PIN);
void setup()
{
// Start up the Serial connection
while (!Serial);
Serial.begin(9600);
// Start the Radio!
radio.begin();
// Power setting. Due to likelihood of close proximity of the devices, set as RF24_PA_MIN (RF24_PA_MAX is default)
radio.setPALevel(RF24_PA_MAX); // RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
// Slower data rate for better range
radio.setDataRate( RF24_2MBPS ); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
// Number of retries and set tx/rx address
radio.setRetries(15, 15);
radio.openWritingPipe(rxAddr);
// Stop listening, so we can send!
radio.stopListening();
}
void loop() {
//declaration for encoding the GPS Data
bool newData = false;
unsigned long chars;
unsigned short sentences, failed;
float flat, flon;
// For one second we parse GPS data and report some key values
for (unsigned long start = millis(); millis() - start < 1000;)
{
while (ss.available())
{
char c = ss.read();
// Serial.write(c); // uncomment this line if you want to see the GPS data flowing
if (gps.encode(c)) // Did a new valid sentence come in?
newData = true;
}
}
if (newData)
{
//declaration
String Gruss ="This is a Test";
float flat, flon;
//get GPS DATA
unsigned long age;
gps.f_get_position(&flat, &flon, &age);
Serial.print("LAT=");
Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 8);
Serial.print(" LON=");
Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 8);
Serial.print(" SAT=");
Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
Serial.print(" PREC=");
Serial.println(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
//Monitor Check
Serial.println(Gruss);
Serial.println();
int BG = (flat);
int LG = (flon);
Serial.println(flat,8);
Serial.println(flon,8);
Serial.println(BG);
Serial.println(LG);
Serial.println();
}
//GPS Stats
gps.stats(&chars, &sentences, &failed);
Serial.print(" CHARS=");
Serial.print(chars);
Serial.print(" SENTENCES=");
Serial.print(sentences);
Serial.print(" CSUM ERR=");
Serial.println(failed);
/*
Serial.println("** No GPS-Data received, check Field of View **");
*/
if (chars == 0)
Serial.println("** No characters received from GPS: check wiring **");
// Set up a message and a timestamp to it using millis()
String str = "Hello world! ";
str += String( millis() );
// http://stackoverflow.com/questions/7383606/converting-an-int-or-string-to-a-char-array-on-arduino
// Length (with one extra character for the null terminator)
int str_len = str.length() + 1;
// Prepare the character array (the buffer)
char char_array[str_len];
// Copy it over
str.toCharArray(char_array, str_len);
// Ace, let's now send the message
radio.write(&char_array, sizeof(char_array));
// Let the ourside world know..
Serial.print("Sent Message: ");
Serial.print( char_array );
Serial.println("");
// Wait a short while before sending the other one
delay(2000);
}
"
Die Berechnung/Auswertung der charakters läuft immer wieder auf 0 hinaus, sodass ich den Fehler bekomme Check Wiring.. kann mir jemand sagen wieso und wie ich danach am besten die Daten über den NRF bekomme?
Danke schonmal im Vorraus