Hallo liebe Leute,
ich bin relativ neu im Arduinogeschäft und hab mich gleich an ein relativ großes Projekt herangewagt.
Also zuerst zu Hardware:
-Arduino UNO
-LCD(16x2)
-GPS
-LM35 Temperaturfühler
Nun hab ich mir da einen Code zusammengebastelt, der soweit auch funktioniert, nur! nach ner Zeit hängt sich das ganze auf, was sich auf dem Display durch irgendwelche zufällige Zeichen zeigt.
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
SoftwareSerial nss(6, 7);
TinyGPS gps;
void gpsdump(TinyGPS &gps);
bool feedgps();
void printFloat(double f, int digits = 1);
int tempPin = 0;
int temp = 0;
void setup()
{
nss.begin(9600);
lcd.begin(16, 2);
lcd.print("GPS-DISPLAY");
lcd.setCursor(0, 1);
lcd.print("Version: 0.1");
delay(2000);
lcd.clear();
bool newdata = false;
{
if (newdata = false)
lcd.setCursor(0, 0);
lcd.print("Suche");
lcd.setCursor(0, 1);
lcd.print("Satelliten... ");
}
}
void loop()
{
{
temp = ( 5.0 * analogRead(tempPin) * 1000.0) / 1024.0;
}
bool newdata = false;
{
if (feedgps())
newdata = true;
}
if (newdata)
{
gpsdump(gps);
}
}
void printFloat(double number, int digits)
{
if (number < 0.0)
{
lcd.print('-');
number = -number;
}
double rounding = 0.5;
for (uint8_t i=0; i<digits; ++i)
rounding /= 10.0;
number += rounding;
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
lcd.print(int_part);
if (digits > 0)
lcd.print(".");
while (digits-- > 0)
{
remainder *= 10.0;
int toPrint = int(remainder);
lcd.print(toPrint);
remainder -= toPrint;
}
}
void gpsdump(TinyGPS &gps)
{
unsigned long age, date, time, chars;
int year;
byte month, day, hour, minute, second, hundredths;
feedgps();
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Zeit: ");
lcd.setCursor(0, 1);
lcd.print(static_cast<int>(hour + 1)); lcd.print(":"); lcd.print(static_cast<int>(minute));
delay(2000);
feedgps();
lcd.clear();
lcd.print("Temperatur: ");
lcd.setCursor(0, 1);
lcd.print(temp/10.0, 1); lcd.print(" Celsius");
delay(2000);
feedgps();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hoehe: ");
lcd.setCursor(0, 1);
lcd.print(gps.f_altitude()); lcd.print(" m");
delay(2000);
feedgps();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Geschwindigkeit: ");
lcd.setCursor(0, 1);
lcd.print(gps.f_speed_kmph()) + 1; lcd.print(" km/h");
delay(2000);
feedgps();
lcd.clear();
lcd.print("Kurs:");
lcd.setCursor(0, 1);
lcd.print(TinyGPS::cardinal(gps.f_course()));
delay(2000);
feedgps();
lcd.clear();
lcd.print("Temperatur: ");
lcd.setCursor(0, 1);
lcd.print(temp/10.0, 1); lcd.print(" Celsius");
delay(2000);
feedgps();
}
bool feedgps()
{
while (nss.available())
{
if (gps.encode(nss.read()))
return true;
}
return false;
}
Ich verstehe es einfach nicht.
Schon mal vielen Dank für eure Hilfe
Beste Grüße
Emanuel