Alkuun varoituksen sana; Minun omaa alaani on HW, joten koodi ei ole kaunista katsottavaa.
Nyt on kasassa Fastrax GPS/Arduino/lcd kombinaatio, joka päivittelee itseään 5 sekunnin intervallilla
pari sanaa sisällöstä:
-Suuri osa on lainattu arduiniana-sivuilta.
-käytetyt kirjastot:
Liquidcrystal (lcd:lle)
TinyGPS (valmis ratkaisu NMEA-datan purkamiseen)
NewSoftSerial (mahdollistaa GPS:n ja LCD:n yhtäaikaisen kytkemisen)
(Nämä kaikki löytyvät täältä:http://arduiniana.org/libraries/)
-Koordinaattien lisäksi Arduinolla oleva ledi kertoo onko satelliitit löydetty (ledi palaa) vai haetaanko niitä (ledi vilkkuu)
alustana Atmega168 ja Arduino 0018
HUOM: jos ei satu olemaan lcd:tä niin alempi koodi pukkaa NMEA-datan suoraan PC:lle
//GPS-Arduino-LCD
#include <NewSoftSerial.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h>
//lcd on kiinni pinneissä 2,3,4,5,6,7
//GPS-moduuli pinneissä 8 (led)ja 9,10 (data)
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
TinyGPS gps;
NewSoftSerial nss(9,10); // GPS-datalle
int gps_fix=8; //fix-ledin alustus
int fix_led=13; //käytetään pinniin 13 kytkettyä lediä
int pulse_check;
void gpsdump(TinyGPS &gps);
bool feedgps();
void printFloat(double f, int digits = 2);
void setup()
{
Serial.begin(9600);
nss.begin(9600);
lcd.begin(16, 2); // käytössä 16x2 LCD
lcd.print(“Hello GPS! “);
lcd.setCursor(0,1);
lcd.print(”(Ver. 0.2)”);
}
void loop()
{
bool newdata = false;
unsigned long start = millis();
while (millis() - start < 5000) //uutta GPS-dataa haetaan 5 sekunnin välein
{
pulse_check=digitalRead(gps_fix); // päivitetään fix-led
digitalWrite(fix_led,pulse_check);
if (feedgps())
newdata = true;
}
if (newdata)
{
lcd.clear();
lcd.print(“GPS Dataa Tulossa”); //tämä oli debuggaus vaiheen juttu
delay(500);
lcd.clear();
gpsdump(gps);
}
}
void printFloat(double number, int digits)
{
// Handle negative numbers
if (number < 0.0)
{
Serial.print(’-’);
number = -number;
}
// Round correctly so that print(1.999, 2) prints as “2.00”
double rounding = 0.5;
for (uint8_t i=0; i<digits; ++i)
rounding /= 10.0;
number += rounding;
// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
Serial.print(int_part);
// Print the decimal point, but only if there are digits beyond
if (digits > 0)
Serial.print(".");
// Extract digits from the remainder one at a time
while (digits-- > 0)
{
remainder *= 10.0;
int toPrint = int(remainder);
Serial.print(toPrint);
remainder -= toPrint;
}
}
void gpsdump(TinyGPS &gps)
{
long lat, lon;
float flat, flon;
unsigned long age, date, time, chars;
int year;
byte month, day, hour, minute, second, hundredths;
unsigned short sentences, failed;
gps.get_position(&lat, &lon, &age);
lcd.setCursor(0,0);
lcd.print("LAT "); lcd.print(lat);
lcd.setCursor(0,1);
lcd.print("LONG "); lcd.print(lon);
feedgps(); // If we don’t feed the gps during this long routine, we may drop characters and get checksum errors
}
bool feedgps()
{
while (nss.available())
{
if (gps.encode(nss.read()))
return true;
}
return false;
}
…ja tällä pätkällä saadaan tavara PC:lle:
//GPS-Arduino-PC
//muista avata serial monitor
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3); //gps moduuli kiinni pinneissä 2,3
void setup()
{
Serial.begin(9600);
Serial.println(“Hello GPS”);
mySerial.begin(9600);
}
void loop()
{
if (mySerial.available()) {
Serial.print((char)mySerial.read());
}
}
parannelkaa ja pistäkää omat versionne jakoon
-m