코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
전 글에 이어서 시리얼통신 질문 드려요
박창영 | 2016-09-30
|
|
---|---|
시리얼통신이기에 hc-11로 연결된 상태에서 gps값을 안받고 명령을 주면 그때 hc-11을 멈추고 gps값을 받기 시작하고 원하는 값을 받고 나면 다시 gps를 멈추고 hc-11로 값을 전송하고 싶습니다
listen()이 수신대기상태로 들어가고 isListening에서 case을 선택시 1이 입력돼서 1>0이 되니까 gpsvalue(gps)가 실행되는게 맞나요?
또 Serial.flush로 값이 다 전송되면 다시 대기상태로 돌리는 건가요?
색깔로 표시해뒀습니다 ------------------------------------------------------------------------ #include #include
SoftwareSerial gpsmodule(9, 10); // RX, TX SoftwareSerial commodule(6, 7); // RX, TX TinyGPS gps;
int select; // 조건문 변수 float latitude; // 위도좌표 변수 float longitude; // 경도좌표 변수 char wd; // 위도방위 변수 char kd; // 경도방위 변수
void setup() {
Serial.begin(9600); gpsmodule.begin(9600); commodule.begin(9600);
Serial.println(" 1: 현재 GPS값 , 2: GPS값 입력모드, 3: 입력된 GPS 값 확인"); Serial.println("==========================================================================="); }
void loop() { // 기본상태는 hc-11로 통신상태 // 명령시 통신중단 -> gps값 받아옴 -> 통신재개
if(Serial.available()){ select=Serial.parseInt();
switch(select){
case 1: Serial.println("드론의 현재위치 GPS 값"); gpsmodule.listen(); //while(gpsmodule.available()>0) if(gpsmodule.isListening()){ gpsvalue(gps);
}
Serial.println("===========================================================================");
break; case 2: caseselect();
Serial.println("==========================================================================="); break;
case 3: Serial.println("입력된 위도,경도 : "); if(latitude==0) { Serial.println("입력되지 않았습니다."); } if(latitude!=0){ Serial.print(latitude) ; Serial.print(wd); Serial.print(" , "); Serial.print(longitude ); Serial.println(kd); }
Serial.println("==========================================================================="); break;
// case 4 입력값 초기화 후 제자리 비행
default: Serial.println("잘못된 입력입니다 1: 현재 GPS값 , 2: GPS값 입력모드, 3: 입력된 GPS 값 확인"); Serial.println("==========================================================================="); break; } } } void caseselect() // GPS 입력모드 { Serial.println("GPS Data Input "); Serial.println("");
Serial.println("Latitude(xxxx.xxxx) : "); // 위도좌표 입력 while (Serial.available() == 0) {} latitude = Serial.parseFloat(); Serial.println(latitude,4);
while (wd != 'E' && wd != 'W' && wd != 'S' && wd != 'N') { // 위도좌표 방위입력 Serial.println("Latitude bearing : "); while (Serial.available() == 0) {} wd = Serial.read(); } Serial.println(wd);
Serial.println("Longitude(xxxx.xxxx) :" ); // 경도좌표 입력 while (Serial.available() == 0) {} longitude = Serial.parseFloat(); Serial.println(longitude,4);
while (kd != 'E' && kd != 'W' && kd != 'S' && kd != 'N') { // 경도좌표 방위입력 Serial.println("Longitude bearing : "); while (Serial.available() == 0) {} kd = Serial.read(); } Serial.println(kd);
}
void gpsvalue(TinyGPS &gps) { float latitude, longitude; //
gps.f_get_position(&latitude, &longitude); // 위도, 경도 변수 선언
Serial.print("Lat/Long: "); Serial.print(latitude,5); Serial.print(", "); Serial.println(longitude,5);
int year; byte month, day, hour, minute, second, hundredths; // 날짜, 시간 변수 선언 gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);
Serial.print("Date: "); Serial.print(month, DEC); Serial.print("/"); Serial.print(day, DEC); Serial.print("/"); Serial.print(year); Serial.print(" Time: "); Serial.print(hour, DEC); Serial.print(":"); Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); Serial.print("."); Serial.println(hundredths, DEC);
Serial.print("Altitude (meters): "); Serial.println(gps.f_altitude());
Serial.print("Course (degrees): "); Serial.println(gps.f_course());
Serial.print("Speed(kmph): "); Serial.println(gps.f_speed_kmph()); Serial.println();
unsigned long chars; unsigned short sentences, failed_checksum; gps.stats(&chars, &sentences, &failed_checksum); } |
|
이전글 | 날씨 정보를 루프문으로 돌리고 싶은데 어렵네요... | 2016-09-30 |
다음글 | 코드합치는거 감이 잡히지 않습니다 | 2016-09-30 |