GPS using BR 355 module & Nokia 6100 color display
GPS display of absolute co-ordinates & movement on Nokia Color LCD
- Vaibhav Desai
- Archana Srinivasan
This mobile device obtains the GPS co-ordinates and displays it on a color LCD.
It has two menu options:
- To display absolute GPS co-ordinates in terms of latitude & longitude.
- To display movement in 20 seconds in terms of GPS co-ordinates.
List of mbed components and peripherals used:
- BR355 GPS Module
- RS 232 Breakout Board
- PS/2 Breakout Board
- Sparkfun Nokia 6100 Color LCD Breakout Board
Hardware:
- Power to GPS module is supplied using PS/2 break out board & 5V pin from MBED
- The RS 232 connection between the GPS module requires a null modem & a gender changer
- Tx of GPS is connected to Rx of MBED
- The LCD requires 5V backlight supply, 3.3V logic supply, GND
- SDATA of LCD is connected to p5 of mbed
- SCK of LCD is connected to p7 of mbed
- CS of LCD is connected to p8 of mbed
- RST of LCD is connected to p9 of mbed
- The push buttons on the LCD require pull up resistors
Algorithm:
- Display Menu on LCD screen
- Accept input from user using the two push button switches on the LCD breakout board
- Option 1 displays the absolute co-ordinates as obtained from the GPS on the LCD
- When option 2 is selected, the first sample of Latitude & Longitude is collected. After waiting for 15 seconds, a second sample is collected.
- The movement is calculated from subtracting the first reading from the second & appropriate direction (N/S, E/W) is displayed.
Videos:
#include "mbed.h" #include "GPS.h" #include "NokiaLCD.h" Serial pc(USBTX, USBRX); GPS gps(p9, p10); AnalogIn s1(p20); AnalogIn s2(p19); NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type int main() { float oldlat,oldlong,lat1,long1,newlat,newlong; char ns1,ew1; lcd.background(0x0000FF); lcd.cls(); lcd.fill(2, 51, 128, 10, 0x00FF00); lcd.fill(50, 1, 10, 128, 0xFF0000); while(1) { lcd.locate(4,2); lcd.printf("GPS MENU"); lcd.locate(0,5); lcd.printf("1.Show Current "); lcd.locate(0,7); lcd.printf("2.Show Movement"); lcd.locate(0,9); if(s1==0) { lcd.cls(); lcd.fill(2, 51, 128, 10, 0x00FF00); lcd.fill(50, 1, 10, 128, 0xFF0000); lcd.locate(0,2); lcd.printf("Option1 selected"); while(1) { if(gps.sample()) { lcd.locate(4,4); lcd.printf("GPS DATA"); lcd.locate(0,6); lcd.locate(0,8); lcd.printf("LAT : %f %c",gps.latitude,gps.ns); lcd.locate(0,10); lcd.printf("LONG: %f %c",gps.longitude,gps.ew); wait(10); } } } if(s2==0) { lcd.cls(); lcd.fill(2, 51, 128, 10, 0x00FF00); lcd.fill(50, 1, 10, 128, 0xFF0000); lcd.locate(0,2); lcd.printf("Option2 selected"); while(1) { if(gps.sample()) { lcd.locate(0,4); lcd.locate(0,5); lcd.printf("LAT : %f %c",gps.latitude,gps.ns);lcd.locate(0,6); lcd.printf("LONG: %f %c",gps.longitude,gps.ew);lcd.locate(0,8); oldlat = gps.latitude; oldlong = gps.longitude; } wait(20); if(gps.sample()) { lcd.locate(0,9); lcd.printf("LAT : %f %c",gps.latitude,gps.ns);lcd.locate(0,10); lcd.printf("LONG: %f %c",gps.longitude,gps.ew);lcd.locate(0,12); newlat = gps.latitude; // if oldlat is +ve ... N motion newlong = gps.longitude; // if oldlong is +ve ...E mostion lat1 = newlat - oldlat; long1 = newlong - oldlong; if(lat1 > 0) ns1 = 'N'; else ns1 = 'S'; if(long1 > 0) ew1 = 'E'; else ew1 = 'W'; //Display Motion data lcd.printf("You have moved"); lcd.locate(0,13); lcd.printf("%f deg %c",lat1,ns1); lcd.locate(0,14 ); lcd.printf("%f deg %c",long1,ew1); wait(10); } else { lcd.printf("Oh Dear! No lock "); } } } } }
Please log in to post comments.