久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
關于gps和超聲波測距的arduino調試程序
[打印本頁]
作者:
firstdream
時間:
2018-6-12 11:07
標題:
關于gps和超聲波測距的arduino調試程序
通過gps顯示經緯度,并用sr04超聲波測距,設置閾值報警
arduino源程序如下:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//設置LCD1602的I2C地址為0x27,LCD1602為兩行,每行16個字符的液晶顯示器
LiquidCrystal_I2C lcd(0x27,16,2);
const int TrigPin = 2;
const int EchoPin = 3;
float distance;
float lati;
#include <SoftwareSerial.h>
char nmeaSentence[68];
String latitude; //緯度
String longitude; //經度
String lndSpeed; //速度
String gpsTime; //UTC時間,本初子午線經度0度的時間,和北京時間差8小時
String beiJingTime; //北京時間
SoftwareSerial GPSSerial(12, 11 ); // RX, TX
#define DEBUGSerial Serial
//初始化程序
void setup() {
//LCD的I2C通訊初始化需要執行兩次
lcd.init(); // 給LCD的I2C通訊初始化
delay(20);
lcd.init(); // 給LCD的I2C通訊初始化
delay(20);
lcd.backlight();//點亮LCD背光燈
// 初始化串口通信及連接SR04的引腳
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
// 要檢測引腳上輸入的脈沖寬度,需要先設置為輸入狀態
pinMode(EchoPin, INPUT);
pinMode(8,OUTPUT);
GPSSerial.begin(9600); //定義波特率9600,和我們店鋪的GPS模塊輸出的波特率一致
DEBUGSerial.begin(9600);
DEBUGSerial.println("GPS test");
DEBUGSerial.println("Wating...");
}
//主程序
void loop() {
// 產生一個10us的高脈沖去觸發TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 檢測脈沖寬度,并計算出距離
distance = pulseIn(EchoPin, HIGH) / 58.00;
lcd.clear();//LCD清屏
// 定位光標在LCD第0行、第0列
lcd.setCursor(0, 0);
//在LCD第0行第0列開始顯示"Distance:"
lcd.print("Distance:");
// 定位光標在LCD第1行、第8列
lcd.setCursor(9, 0);
//如果傳感器讀取值小于20,
if(distance<20)
{
//則在LCD第1行、第8列開始顯示"danger"
lcd.print("danger"); delay(500);//延時500ms
}
//如果傳感器讀取值大于20,
else
{
//把浮點型距離值取整
distance=int(distance);
//則在LCD第1行、第7列開始顯示距離值
lcd.print(distance);
//在距離值后顯示單位"cm"
lcd.print("cm");
delay(500);//延時500ms
lcd.setCursor(0, 1);
Serial.println(distance);
}
if(distance>20)
{ digitalWrite(8, HIGH);//輸出HIGH電平,停止發聲
delay(500); //等待500毫秒
}
else
{ digitalWrite(8, LOW);//輸出LOW電平,發聲
}
for (unsigned long start = millis(); millis() - start < 1000;) //一秒鐘內不停掃描GPS信息
{
while (GPSSerial.available()) //串口獲取到數據開始解析
{
char c = GPSSerial.read(); //讀取一個字節獲取的數據
switch(c) //判斷該字節的值
{
case
: //若是$,則說明是一幀數據的開始
GPSSerial.readBytesUntil('*', nmeaSentence, 67); //讀取接下來的數據,存放在nmeaSentence字符數組中,最大存放67個字節
//Serial.println(nmeaSentence);
latitude = parseGprmcLat(nmeaSentence); //獲取緯度值
longitude = parseGprmcLon(nmeaSentence);//獲取經度值
lndSpeed = parseGprmcSpeed(nmeaSentence);//獲取速度值
gpsTime = parseGprmcTime(nmeaSentence);//獲取GPS時間
if(latitude > "") //當不是空時候打印輸出
{
DEBUGSerial.println("------------------------------------");
DEBUGSerial.println("latitude: " + latitude);
lcd.print(latitude);
}
if(longitude > "") //當不是空時候打印輸出
{
DEBUGSerial.println("longitude: " + longitude);
}
if(lndSpeed > "") //當不是空時候打印輸出
{
DEBUGSerial.println("Speed (knots): " + lndSpeed);
}
if(gpsTime > "") //當不是空時候打印輸出
{
DEBUGSerial.println("gpsTime: " + gpsTime);
beiJingTime = getBeiJingTime(gpsTime); //獲取北京時間
DEBUGSerial.println("beiJingTime: " + beiJingTime);
}
}
}
}
}
String getBeiJingTime(String s)
{
int hour = s.substring(0,2).toInt();
int minute = s.substring(2,4).toInt();
int second = s.substring(4,6).toInt();
hour += 8;
if(hour > 24)
hour -= 24;
s = String(hour) +":"+String(minute) +":"+ String(second);
return s;
}
//Parse GPRMC NMEA sentence data from String
//String must be GPRMC or no data will be parsed
//Return Latitude
String parseGprmcLat(String s)
{
int pLoc = 0; //paramater location pointer
int lEndLoc = 0; //lat parameter end location
int dEndLoc = 0; //direction parameter end location
String lat;
/*make sure that we are parsing the GPRMC string.
Found that setting s.substring(0,5) == "GPRMC" caused a FALSE.
There seemed to be a 0x0D and 0x00 character at the end. */
if(s.substring(0,4) == "GPRM")
{
//Serial.println(s);
for(int i = 0; i < 5; i++)
{
if(i < 3)
{
pLoc = s.indexOf(',', pLoc+1);
/*Serial.print("i < 3, pLoc: ");
Serial.print(pLoc);
Serial.print(", ");
Serial.println(i);*/
}
if(i == 3)
{
lEndLoc = s.indexOf(',', pLoc+1);
lat = s.substring(pLoc+1, lEndLoc);
/*Serial.print("i = 3, pLoc: ");
Serial.println(pLoc);
Serial.print("lEndLoc: ");
Serial.println(lEndLoc);*/
}
else
{
dEndLoc = s.indexOf(',', lEndLoc+1);
lat = lat + " " + s.substring(lEndLoc+1, dEndLoc);
/*Serial.print("i = 4, lEndLoc: ");
Serial.println(lEndLoc);
Serial.print("dEndLoc: ");
Serial.println(dEndLoc);*/
}
}
return lat;
}
//}
//}
}
//Parse GPRMC NMEA sentence data from String
//String must be GPRMC or no data will be parsed
//Return Longitude
String parseGprmcLon(String s)
{
int pLoc = 0; //paramater location pointer
int lEndLoc = 0; //lat parameter end location
int dEndLoc = 0; //direction parameter end location
String lon;
/*make sure that we are parsing the GPRMC string.
Found that setting s.substring(0,5) == "GPRMC" caused a FALSE.
There seemed to be a 0x0D and 0x00 character at the end. */
if(s.substring(0,4) == "GPRM")
{
//Serial.println(s);
for(int i = 0; i < 7; i++)
{
if(i < 5)
{
pLoc = s.indexOf(',', pLoc+1);
/*Serial.print("i < 3, pLoc: ");
Serial.print(pLoc);
Serial.print(", ");
Serial.println(i);*/
}
if(i == 5)
{
lEndLoc = s.indexOf(',', pLoc+1);
lon = s.substring(pLoc+1, lEndLoc);
/*Serial.print("i = 3, pLoc: ");
Serial.println(pLoc);
Serial.print("lEndLoc: ");
Serial.println(lEndLoc);*/
}
else
{
dEndLoc = s.indexOf(',', lEndLoc+1);
lon = lon + " " + s.substring(lEndLoc+1, dEndLoc);
/*Serial.print("i = 4, lEndLoc: ");
Serial.println(lEndLoc);
Serial.print("dEndLoc: ");
Serial.println(dEndLoc);*/
}
}
return lon;
}
}
//Parse GPRMC NMEA sentence data from String
//String must be GPRMC or no data will be parsed
//Return Longitude
String parseGprmcSpeed(String s)
{
int pLoc = 0; //paramater location pointer
int lEndLoc = 0; //lat parameter end location
int dEndLoc = 0; //direction parameter end location
String lndSpeed;
/*make sure that we are parsing the GPRMC string.
Found that setting s.substring(0,5) == "GPRMC" caused a FALSE.
There seemed to be a 0x0D and 0x00 character at the end. */
if(s.substring(0,4) == "GPRM")
{
//Serial.println(s);
for(int i = 0; i < 8; i++)
{
if(i < 7)
{
pLoc = s.indexOf(',', pLoc+1);
/*Serial.print("i < 8, pLoc: ");
Serial.print(pLoc);
Serial.print(", ");
Serial.println(i);*/
}
else
{
lEndLoc = s.indexOf(',', pLoc+1);
lndSpeed = s.substring(pLoc+1, lEndLoc);
/*Serial.print("i = 8, pLoc: ");
Serial.println(pLoc);
Serial.print("lEndLoc: ");
Serial.println(lEndLoc);*/
}
}
return lndSpeed;
}
}
//Parse GPRMC NMEA sentence data from String
//String must be GPRMC or no data will be parsed
//Return Longitude
String parseGprmcTime(String s)
{
int pLoc = 0; //paramater location pointer
int lEndLoc = 0; //lat parameter end location
int dEndLoc = 0; //direction parameter end location
String gpsTime;
/*make sure that we are parsing the GPRMC string.
Found that setting s.substring(0,5) == "GPRMC" caused a FALSE.
There seemed to be a 0x0D and 0x00 character at the end. */
if(s.substring(0,4) == "GPRM")
{
//Serial.println(s);
for(int i = 0; i < 2; i++)
{
if(i < 1)
{
pLoc = s.indexOf(',', pLoc+1);
/*Serial.print("i < 8, pLoc: ");
Serial.print(pLoc);
Serial.print(", ");
Serial.println(i);*/
}
else
{
lEndLoc = s.indexOf(',', pLoc+1);
gpsTime = s.substring(pLoc+1, lEndLoc);
/*Serial.print("i = 8, pLoc: ");
Serial.println(pLoc);
Serial.print("lEndLoc: ");
Serial.println(lEndLoc);*/
}
}
return gpsTime;
}
}
// Turn char[] array into String object
String charToString(char *c)
{
String val = "";
for(int i = 0; i <= sizeof(c); i++)
{
val = val + c;
}
return val;
}
復制代碼
所有資料51hei提供下載:
final_dirst.rar
(2.67 KB, 下載次數: 25)
2018-6-12 11:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
sdieedu
時間:
2022-5-25 21:56
非常好的實例,參考一下。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲激情综合
|
成人影院网站ww555久久精品
|
日韩在线免费观看视频
|
免费中文字幕日韩欧美
|
国产精品二区三区
|
国产免费视频在线
|
国产精品久久久久久久久图文区
|
国产综合精品
|
午夜影院在线视频
|
日韩一区在线观看视频
|
日日骚av
|
亚洲精品视频一区二区三区
|
欧美精品一区二区蜜桃
|
国产精品久久久久久久7777
|
精品国产伦一区二区三区观看方式
|
网络毛片
|
日本不卡免费新一二三区
|
日韩免费一区二区
|
亚州中文
|
成人在线视频观看
|
人人干人人玩
|
91在线一区二区三区
|
男女羞羞视频免费
|
国产伦精品一区二区
|
欧美日韩精品中文字幕
|
国产亚洲精品精品国产亚洲综合
|
亚洲成人第一页
|
午夜免费视频
|
欧美成人a∨高清免费观看 色999日韩
|
久久一区二区三区四区
|
欧美中文字幕一区二区三区亚洲
|
欧美精品欧美精品系列
|
国产在线观看网站
|
91精品国产综合久久久久久丝袜
|
欧美日韩中文字幕在线
|
久久综合香蕉
|
国产精品美女一区二区三区
|
极品一区
|
超碰人人爱
|
在线一区视频
|
国产精品久久久久久久久久久久久久
|