BASIC4MCU | 질문게시판 | 답변 : 답변 : 답변 : ATmega128 소스 합치기
페이지 정보
작성자 master 작성일2019-08-21 10:29 조회11,026회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=9766
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-08-21 오전 10:26:22// by Ok-Hyun Park//#include <avr/io.h>#include <avr/interrupt.h>#define F_CPU 16000000UL // 16 MHz#include <util/delay.h>#include <stdio.h>#include <stdlib.h>#include <string.h>//#define null 0#define TRIG 6 //TRIG: 출력 PA6#define ECHO (PINA&0x80) //ECHO: 입력 PA7//unsigned char NAME[10]="$GPGGA",NAME1[10]="$GPGSA",NAME2[10]="$GPRMC";unsigned char GPS_DATA[100],GPS_DATA1[100],GPS_DATA2[100],GPS_DATA3[100];unsigned char test0[20],test1[20],test2[20],test3[20];char *GPS_cut=null,*GPS_Dcut[15]={null},*GPS_Dcut1[15]={null},*GPS_Dcut2[15]={null};int i,GPScnt,GPScnt1,GPSflag;//char RX0_CHAR(){ while(!(UCSR0A&0x80)); return UDR0; }void TX0_CHAR(char c){ while(!(UCSR0A&0x20)); UDR0=c; }void TX0_STR(char *s){ while(*s)TX0_CHAR(*s++); }//void buz(int c){int i;for(i=0;i<c;i++){ PORTB^=0x10; _delay_ms(1); } // 500Hz}//void GPS_Time(){unsigned char HH,MM,SS; unsigned long Zulu_time;Zulu_time=atol(GPS_Dcut[1]);HH=((Zulu_time/10000)+9); MM=((Zulu_time%10000)/100); SS=((Zulu_time%10000)%100); if(HH>23)HH-=24;sprintf(test0,"TIME:%02d:%02d:%02d \r\n",HH,MM,SS); TX0_STR(test0);_delay_ms(500);}//void GPS_Latitude(){unsigned char DO,BOON; double CHO,Latitude;Latitude=atof(GPS_Dcut[2]);DO=Latitude/100; BOON=(int)Latitude%100; CHO=(Latitude-(int)Latitude)*60;sprintf(test2,"LATIT:%2d'%2d`%0.02lf%s \r\n",DO,BOON,CHO,GPS_Dcut[3]); TX0_STR(test2);_delay_ms(500);}//void GPS_Longitude(){unsigned char DO,BOON; double CHO,Longitude;Longitude=atof(GPS_Dcut[4]);DO=(int)Longitude/100; BOON=((int)Longitude%100); CHO=(Longitude-(int)Longitude)*60;sprintf(test3,"LONGI:%3d'%02d`%0.02lf%s \r\n",DO,BOON,CHO,GPS_Dcut[5]); TX0_STR(test3);_delay_ms(500);}//ISR(USART1_RX_vect){unsigned char RX;RX=UDR1;if(RX=='$'){ GPS_DATA[0]='$'; GPScnt=1; GPSflag=0; }else{GPS_DATA[GPScnt]=RX;if(GPS_DATA[GPScnt]==0x0a){GPScnt1=GPScnt;if(strncmp(NAME,GPS_DATA,6)==0){ // "$GPGGA"memmove(GPS_DATA1,GPS_DATA,GPScnt1); GPS_cut=strtok(GPS_DATA1,",");for(i=0; GPS_cut!=null; i++){ GPS_Dcut[i]=GPS_cut; GPS_cut=strtok(null,","); }GPSflag=1; // flag=1}if(strncmp(NAME1,GPS_DATA,6)==0){ // "$GPGSA"memmove(GPS_DATA2,GPS_DATA,GPScnt1);GPS_cut=strtok(GPS_DATA2,",");for(i=0; GPS_cut!=null; i++){ GPS_Dcut1[i]=GPS_cut; GPS_cut=strtok(null,","); }}if(strncmp(NAME2,GPS_DATA,6)==0){ // "$GPRMC"memmove(GPS_DATA3,GPS_DATA,GPScnt1); GPS_cut=strtok(GPS_DATA3,",");for(i=0; GPS_cut!=null; i++){ GPS_Dcut2[i]=GPS_cut; GPS_cut=strtok(null,","); }}}GPScnt++;}}//int main(void){unsigned int distance;int Position_Fix,HH,MM,SS,DO,BOON,CHO;//DDRB=0x10; //피에조 부저: 출력DDRA=0x40; //TRIG=출력,ECHO=입력//UCSR0B=0x18; UBRR0L=103;UCSR1B=0x98; UBRR1L=103;sei();while(1){PORTA|=0x40; _delay_us(10); PORTA&=~0x40; //TRIGwhile(!ECHO); TCCR1B=2; TCNT1=0;while(ECHO); TCCR1B=0; distance=TCNT1/116;//if (distance< 50){ buz( 10); } // 5cm 이내 접근 // 10mselse if(distance< 300){ buz(100); } // 30cm 이내 접근 // 100mselse if(distance<1000){ buz(500); } // 1m 이내 접근 // 500ms_delay_ms(100);//-----------------------------------------------------Position_Fix=atoi(GPS_Dcut[6]);if(Position_Fix==0){sprintf(test1," Position_Fix LOADING \n\r"); TX0_STR(test1); _delay_ms(1000);}else{ // 0 LOADING,1 위성으로만 계산,2 지상 안테나에서 수신if(GPSflag==1){ // flag==1이면GPS_Time(); GPS_Latitude(); GPS_Longitude();}}}}
댓글 1
조회수 11,026qcoop님의 댓글
qcoop 작성일컴파일 제대로 됩니다!! 소스를 넣어주는 순서때문에 동작하지 않았던걸까요..?ㅜㅜ