นวัตกรรม สิ่งประดิษฐ์ และเทคโนโลยี

กรุณา เข้าสู่ระบบ หรือ สมัครสมาชิก.

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
การค้นหาขั้นสูง  

ผู้เขียน หัวข้อ: UNO แสดงพิกัด GPS + LCD20*4 แบบ I2C  (อ่าน 37 ครั้ง)

NAWATTAKAM

  • Administrator
  • Sr. Member
  • *****
  • กระทู้: 379
UNO แสดงพิกัด GPS + LCD20*4 แบบ I2C
« เมื่อ: เมษายน 04, 2019, 08:50:42 PM »

การต่อขา
- ขา 3.3V ต่อเข้า VCC ของ GPS
- ขา GND ต่อร่วมกันทั้ง LCD และ GPS
- ขา Tx ของ GPS ต่อเข้าขา 10 ของ UNO (ทำขา Rx ด้วย ซอร์ฟแวร์ซีเรียล)
- ขา SCL และ SDA ของ LCD ต่อเข้า ขา SCL และ SDA ของ UNO

* ติดตั้งไลบารี่  TinyGPS++ ก่อน  จาก http://arduiniana.org/libraries/tinygpsplus/

หรือ
นำTinyGPS++.h และ TinyGPS++.cpp ไปไว้โฟลเดอร์เดียวกับไฟล์งาน 
 

ARDUINO UNO
โค๊ด
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h> //ประกาศ Library ของจอ I2C
#include "TinyGPS++.h" //// ไฟล์อยู่ที่เดียวกับไฟล์งาน


LiquidCrystal_I2C lcd(0x27, 20, 4);  /// เลือกใช้จอ LCD แบบ I2C ขนาด 20 *4

SoftwareSerial serial_connection(10, 11); // RX=pin 10, TX=pin 11 

TinyGPSPlus gps;


void setup() {
  Serial.begin(9600);
  serial_connection.begin(9600);

   
lcd.begin();

lcd.setCursor(0,0);   
lcd.print("TIME : ");


lcd.setCursor(0, 1); 
lcd.print("LO   :");

lcd.setCursor(0,2); 
lcd.print("LA   : ");

lcd.setCursor(0,3);   
lcd.print("ALT  : ");


}




void loop() { // run over and over

  while(serial_connection.available())
{
gps.encode(serial_connection.read());
}


if(gps.location.isUpdated())
{

//// แสดงเวลาจากดาวเทียม +7 ตามโซนประเทศไทย และ % (modulo) 24 เพื่อแสดงแค่ 0-23
lcd.setCursor(7,0); 
lcd.print( (gps.time.hour()+7)%24);  lcd.print(":"); lcd.print(gps.time.minute()); lcd.print(":"); lcd.print(gps.time.second());

lcd.setCursor(7,1);   
lcd.print(gps.location.lng(), 6);

lcd.setCursor(7,2);   
lcd.print(gps.location.lat(), 6);


lcd.setCursor(7,3); 
lcd.print(gps.altitude.meters());


}

}



การแสดงผล


ฟังชั่นอื่นๆ ที่น่าสนใจ

โค๊ด
Serial.println(gps.location.lat(), 6); // Latitude in degrees (double)
Serial.println(gps.location.lng(), 6); // Longitude in degrees (double)
Serial.print(gps.location.rawLat().negative ? "-" : "+");
Serial.println(gps.location.rawLat().deg); // Raw latitude in whole degrees
Serial.println(gps.location.rawLat().billionths);// ... and billionths (u16/u32)
Serial.print(gps.location.rawLng().negative ? "-" : "+");
Serial.println(gps.location.rawLng().deg); // Raw longitude in whole degrees
Serial.println(gps.location.rawLng().billionths);// ... and billionths (u16/u32)
Serial.println(gps.date.value()); // Raw date in DDMMYY format (u32)
Serial.println(gps.date.year()); // Year (2000+) (u16)
Serial.println(gps.date.month()); // Month (1-12) (u8)
Serial.println(gps.date.day()); // Day (1-31) (u8)
Serial.println(gps.time.value()); // Raw time in HHMMSSCC format (u32)
Serial.println(gps.time.hour()); // Hour (0-23) (u8)
Serial.println(gps.time.minute()); // Minute (0-59) (u8)
Serial.println(gps.time.second()); // Second (0-59) (u8)
Serial.println(gps.time.centisecond()); // 100ths of a second (0-99) (u8)
Serial.println(gps.speed.value()); // Raw speed in 100ths of a knot (i32)
Serial.println(gps.speed.knots()); // Speed in knots (double)
Serial.println(gps.speed.mph()); // Speed in miles per hour (double)
Serial.println(gps.speed.mps()); // Speed in meters per second (double)
Serial.println(gps.speed.kmph()); // Speed in kilometers per hour (double)
Serial.println(gps.course.value()); // Raw course in 100ths of a degree (i32)
Serial.println(gps.course.deg()); // Course in degrees (double)
Serial.println(gps.altitude.value()); // Raw altitude in centimeters (i32)
Serial.println(gps.altitude.meters()); // Altitude in meters (double)
Serial.println(gps.altitude.miles()); // Altitude in miles (double)
Serial.println(gps.altitude.kilometers()); // Altitude in kilometers (double)
Serial.println(gps.altitude.feet()); // Altitude in feet (double)
Serial.println(gps.satellites.value()); // Number of satellites in use (u32)
Serial.println(gps.hdop.value()); // Horizontal Dim. of Precision (100ths-i32)
บันทึกการเข้า