질문게시판 > 답변 : 답변 : avr 에러 관련 문의드립니다.

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

답변 : 답변 : avr 에러 관련 문의드립니다.

페이지 정보

작성자 master 작성일18-01-23 09:56 조회7,356회 댓글1건

본문

 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define    null         0 // C 형 NULL 값(0)
//비교 NMEA_code
char NAME[10]="$GPGGA"//NMEA _ GPGGA
//UART GPS_DATA 저장 및 피신
char GPS_DATA[100]; // UART로 받은 데이터 저장
char GPS_DATA1[100]; // GPGGA DATA  피신 저장
// Count 및 flag 변수
int GPScnt// UART로 받은 데이터 저장 COUNT
int GPScnt1// UART COUNT 값 피신 저장
int GPSflag;
int i;
//(,)구간 별로 저장하기 위한 포인터
char*GPS_cut=null// STRTOK  함수 사용을 위한 변수
char*GPS_Dcut[15]={ null}; // GPGGA 값을(,)STRTOK 로  나누어 저장
ISR(USART1_RX_vect){
  unsigned char RX// UDR1  char data 저장 변수
  RX=UDR1// UDR1  char 값을 RX 변수에 저장
  if(RX=='$'){ // GPS NMEA_code[STX]
    GPS_DATA[0]='$'// GPS_DATA[0]에 '$' 저장
    GPScnt=1// GPScnt=1 저장
    GPSflag=0// GPSflag=0 저장
  }
  else{
    GPS_DATA[GPScnt]=RX// char 형 DATA RX 를 GPS_DATA 배열에 저장
    if(GPS_DATA[GPScnt]==0x0a){ // 위에서 ETX=0x0A 라고 했으므로  조건을 걸어버린다.
      GPScnt1=GPScnt// 조건이 성립되면 COUNT 된 값을 GPScnt1으로 피신시킨다.
      if(strncmp(NAME,GPS_DATA,6)==0){ //  이 부분은 NAME="$GPGGA" 비교한 것이다.
        memmove(GPS_DATA1,GPS_DATA,GPScnt1); // 메모리 복사
        GPS_cut=strtok(GPS_DATA1,","); // STRTOK 구간 나누는 함수
        for(i=0GPS_cut!=nulli++){ // 나누는 조건이 0일때까지
          GPS_Dcut[i]=GPS_cut// 나눈값 포인터 배열에 저장
          GPS_cut=strtok(null,","); // 구간(,)나누기
        }
        GPSflag=1// flag=1
      }
    }
    GPScnt++;
  }
}
//
void GPS_Latitude() // 위 도
{
  unsigned char DO,BOON// 도,분  저장 변수
  double CHO// 초 저장 변수
  double Latitude// GPS_LATITUDE 값 저장 변수
//atol()=>LONG 변환,atoi()=>INT 변환,atof()=>DOUBLE 변환
//순수 숫자나 부호로 이루어진 문자열을 해당 타입으로 변환
// $GPGGA,035155.00,3723.19464,N,12656.72748,E,1,06,1.69,47.0,M,18.5,M,,*6F 출력 샘플
// 위도 는 처음 도분 형태로 들어온다.우리는 구글 맵상과 비교를 위하여 도분을 도분초로 변환 한다.
  Latitude=atof(GPS_Dcut[2]); // 문자열을 DOUBLE 형 으로 변환후 저장=>" 3723.19464 "
  DO=Latitude/100// 도 위치인 37 저장
  BOON=(int)Latitude%100// 분 위치인 23 저장
  CHO=(Latitude-(int)Latitude)*60// 초 를 구하기 위하여(3723.19464-3723)*60
// 소숫점만 빼내어 60을 곱하면 초로 변환 된다.
  printf("LATITUDE:%2d'%2d`%0.02lf%s \n\r",DO,BOON,CHO,GPS_Dcut[3]); // 도,분,초,N
}
//
void GPS_Longitude() // 경 도
{
  unsigned char DO,BOON// 도,분  저장 변수
  double CHO// 초 저장 변수
  double Longitude// GPS_LATITUDE 값 저장 변수
//atol()=>LONG 변환,atoi()=>INT 변환,atof()=>DOUBLE 변환
//순수 숫자나 부호로 이루어진 문자열을 해당 타입으로 변환
// $GPGGA,035155.00,3723.19464,N,12656.72748,E,1,06,1.69,47.0,M,18.5,M,,*6F 출력 샘플
// 경도 는 처음 도분 형태로 들어온다.우리는 구글 맵상과 비교를 위하여 도분을 도분초로 변환 한다.
  Longitude=atof(GPS_Dcut[4]); // 문자열을 DOUBLE 형 으로 변환후 저장=>" 12656.72748 "
  DO=(int)Longitude/100// 도 위치인 126 저장
  BOON=((int)Longitude%100); // 분 위치인 56  저장
  CHO=(Longitude-(int)Longitude)*60// 초 를 구하기 위하여(12656.72748-12656)*60
  printf("LONGITUDE:%3d'%02d`%0.02lf%s \n\r",DO,BOON,CHO,GPS_Dcut[5]); //도,분,초,E
}
//
int main(void){
  int Position_Fix//GPS 신호가 잡혔는지 CHECK 변수
  UCSR0A=0x00;
  UCSR0B=0x98;
  UCSR0C=0x06;
  UBRR0H=0x00;
  UBRR0L=103;
  UCSR1A=0x00;
  UCSR1B=0x98;
  UCSR1C=0x06;
  UBRR1H=0x00;
  UBRR1L=103;
  sei();
  while(1){
// $GPGGA,035155.00,3723.19464,N,12656.72748,E,{ 1},06,1.69,47.0,M,18.5,M,,*6F 출력 샘플
    Position_Fix=atoi(GPS_Dcut[6]); // position_FIX
    if(!Position_Fix)printf(" Position_Fix LOADING \n\r"); // 0 LOADING,1 위성으로만 계산,2 지상 안테나에서 수신
    if(GPSflag==1){ // flag==1이면
      GPS_Latitude(); //  위도
      GPS_Longitude(); // 경도
    }
  }
}
//
 
 
 

























































































e2db14983f07ec33f37ec8eda71e62b5_1516668655_7279.png
컴파일러 옵션에서 위처럼 변경해서 컴파일 해보세요

 
  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 1

조회수 : 7,356

도도리님의 댓글

도도리 작성일

감사합니다. 알려주신대로 해보니 잘 됩니다

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 아두이노 코딩 결합 댓글[1] hohoje 새글 22-08-18
질문 UART통신 스위치 사용 댓글[4] 픽공부 새글 22-08-18
질문 아두이노코딩 질문사항 댓글[1] kai5439  22-08-16
질문 해석좀 해주세요 댓글[2] bubu  22-08-14
질문 lcd 1602에 특수문자를 출력하는 방법을 알고싶습니… 댓글[3] dndktn  22-08-12
질문 stm32 wifi 파일전송 댓글[3] 하리  22-08-11
질문 회로 구성 수정 댓글[2] 첨부파일픽공부  22-08-11
질문 아두이노 와이파이통신 질문 있습니다 댓글[1] 학생  22-08-11
질문 포토다이오드와의 연결 질문합니다. 댓글[7] 첨부파일박윤모  22-08-10
질문 회로 구성 댓글[4] 픽공부  22-08-10
질문 아두이노 센서, 와이파이, 블루투스 연결 댓글[1] pattern  22-08-10
질문 PIC 블루투스 연결 댓글[19] 픽공부  22-08-09
질문 PIC18F452 블루투스 연결 댓글[4] 마이컴  22-08-08
질문 아두이노 코드 해석을 못하겠습니다... 댓글[2] 김가헌  22-08-08
질문 아두이노 코드를 avr로 변환해 주세요 ...ㅠ 댓글[3] 옹냥냥  22-08-08
질문 아두이노 녹음-스피커모듈 관련 질문있습니다 ㅠㅠ 댓글[2] 방귀뿡뿡  22-08-08
질문 Serial EEPROM 실수값 저장.. 댓글[2] 첨부파일광이  22-08-07
질문 STM32 Live Expression 값들이 깜빡이는… 댓글[3] 둠둠  22-08-05
질문 아두이노 ESP32 wifi module 댓글[1] Yoon  22-08-03
질문 atmega128과 dht11, lcd를 연결했는데 0… 댓글[1] 고양이33  22-08-02
질문 ATMEGA 128 코드를 합치려고 하는데 어렵네요 댓글[2] 고양이33  22-08-02
질문 서보모터 제어에 대해 질문있습니다. 댓글[2] 첨부파일뉴비에오  22-07-30
질문 적외선 통신 알려주실분있나요 ㅠㅠ 댓글[1] hkjsj10  22-07-30
질문 아두이노 관련 궁금합니다. 댓글[1] 뱝뱝  22-07-28
질문 아두이노 우노 MCP4725 댓글[3] opqr  22-07-27
질문 레오나르도 인체감지센서 알림 안옴 면지지  22-07-24
답변 답변 : 레오나르도 인체감지센서 알림 안옴 master  22-07-25
질문 Uno에서 엔코더값 놓치는 이유가 뭘까요... 댓글[3] MAKTUB  22-07-24
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전