BASIC4MCU | 질문게시판 | 박옥현님 도움 부탁드립니다ㅜㅜ
페이지 정보
작성자 붐붐 작성일2021-04-27 19:45 조회7,290회 댓글1건본문
지금 aduino mega와 gps와 블루투스 모듈을 이용한 코드를 만드는중입니다.
gps에서 받아온 정보를 블루투스를 통해 앱인벤터로 보내고 싶은데 serial통신을 어떻게 해야하는지 잘 모르겠습니다.
동작: sw1이 눌리면 부저가 울리고 sw2,3이 눌리면 gps에서 읽어온 위성값을 블루투스를 통해 앱인벤터로 보내는것입니다.
#include <SoftwareSerial.h>
int sw1 = 2;
int sw2 = 3;
int sw3 = 4;
int buzzer = 5;
// gps - arduino
// tx - 10
// rx - 11
// vcc - 5v
// gnd - gnd
char c = ""; // Wn 인지 구분 및 str에 저장.
String str = ""; // \n 전까지 c 값을 저장
String targetStr = "GPGGA"; // str의 값이 NMEA의 GPGGA 값인지 타겟
double LatF;
float LongF;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial2.begin(9600);
Serial3.begin(9600);
Serial.println("Start... ");
pinMode(sw1, INPUT_PULLUP);
pinMode(sw2, INPUT_PULLUP);
pinMode(sw3, INPUT_PULLUP);
//핀 모드 000 는 아웃풋으로 스위치는 인풋으로 설정
pinMode(buzzer, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial2.available()) // gps 센서 통신 가능?
{
c=Serial2.read(); // 센서의 값 읽기
if(c == '\n'){ // \n 값인지 구분.
// \n 일시. 지금까지 저장된 str 값이 targetStr과 맞는지 구분
if(targetStr.equals(str.substring(1, 6))){
// NMEA 의 GPGGA 값일시
Serial2.println(str);
// , 를 토큰으로서 파싱.
int first = str.indexOf(",");
int two = str.indexOf(",", first+1);
int three = str.indexOf(",", two+1);
int four = str.indexOf(",", three+1);
int five = str.indexOf(",", four+1);
// Lat과 Long 위치에 있는 값들을 index로 추출
String Lat = str.substring(two+1, three);
String Long = str.substring(four+1, five);
// Lat의 앞값과 뒷값을 구분
String Lat1 = Lat.substring(0, 2);
String Lat2 = Lat.substring(2);
// Long의 앞값과 뒷값을 구분
String Long1 = Long.substring(0, 3);
String Long2 = Long.substring(3);
// 좌표 계산.
double LatF = Lat1.toDouble() + Lat2.toDouble()/60;
float LongF = Long1.toFloat() + Long2.toFloat()/60;
// 좌표 출력.
Serial2.print("Lat : ");
Serial2.println(LatF, 15);
Serial2.print("Long : ");
Serial2.println(LongF, 15);
}
// str 값 초기화
str = "";
}else{ // \n 아닐시, str에 문자를 계속 더하기
str += c;
}
}
if(digitalRead(sw1) == LOW){
digitalWrite(buzzer, HIGH);
}
else
digitalWrite(buzzer, LOW);
//만약 sw1이 눌렸다면 빨간불을 켜줘라, 아니면 꺼줘라.
if(digitalRead(sw2) == LOW){
Serial.write('A');
Serial.print("333");
Serial.print(",");
Serial.print(LatF);
Serial.print(",");
Serial.println(LongF);
delay(2000);
}
if(digitalRead(sw3) == LOW){
Serial.write('B');
Serial.print("444");
Serial.print(",");
Serial.print(LatF);
Serial.print(",");
Serial.println(LongF);
delay(2000);
}
}
댓글 1
조회수 7,290master님의 댓글
master 작성일
https://www.google.com/search?q=aduino+mega+gps+%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4+%EC%95%B1%EC%9D%B8%EB%B2%A4%ED%84%B0&oq=aduino+mega++gps+%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4+%EC%95%B1%EC%9D%B8%EB%B2%A4%ED%84%B0&aqs=chrome..69i57.8928j0j7&sourceid=chrome&ie=UTF-8
어디까지 되고 어느 것이 안되는지 모르겠지만 웹검색으로 유사한 예제를 찾아서 공부해보세요