BASIC4MCU | 질문게시판 | 답변 : 안녕하세요 코딩을 하였는데 블루투스 기능을 추가하고싶은데 답변 해 주실분 부탁드립니다
페이지 정보
작성자 master 작성일2018-12-09 14:56 조회13,207회 댓글6건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6603
작성일
작성일
작성일
작성일
작성일
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-09 오후 3:01:29// by Ok-Hyun Park//#include <avr/io.h>#define F_CPU 16000000UL#include <util/delay.h>#include <avr/interrupt.h>//#define TRIG1 PORTA|=0x40 // 트리거 출력 PA6#define TRIG0 PORTA&=~0x40#define ECHO (PINA&0x80) // Echo 입력 PA7//#define BIT4_LINE2_DOT58 0x28 // 4 Bit Mode,2 Lines,5x8 Dot#define DISPON_CUROFF_BLKOFF 0x0C // Display On,Cursor Off,Blink Off#define DISPOFF_CUROFF_BLKOFF 0x08 // Display Off,Cursor Off,Blink Off#define INC_NOSHIFT 0x06 // Entry Mode,Cursor Increment,Display No Shift#define DISPCLEAR 0x01 // Display Clear,Address 0#define CURHOME 0x02 // Cursor Home#define CUR1LINE 0x80#define CUR2LINE 0xC0//char CLCD_NUM[]="000.0";char state=0;int distance_1st,distance_2nd,height,number;//-------------------------------------------------void CLCD_cmd(char cmd){PORTC=cmd&0xf0; PORTD=0x10; _delay_us(1); PORTD=0;PORTC=cmd<<0x4; PORTD=0x10; _delay_us(1); PORTD=0; _delay_ms(5);}//void CLCD_data(char data){PORTC=data&0xf0; PORTD=0x14; _delay_us(1); PORTD=4;PORTC=data<<0x4; PORTD=0x14; _delay_us(1); PORTD=4; _delay_us(50);}//void CLCD_puts(char *s){ while(*s)CLCD_data(*s++); }//void CLCD_num_display(int n){CLCD_NUM[0]=(n/1000)%10+0x30;CLCD_NUM[1]=(n/100)%10+0x30;CLCD_NUM[2]=(n/10)%10+0x30;CLCD_NUM[3]='.';CLCD_NUM[4]=n%10+0x30;CLCD_NUM[5]=0; //nullCLCD_puts(CLCD_NUM);}//void init_CLCD(){_delay_ms(50);CLCD_cmd(BIT4_LINE2_DOT58); CLCD_cmd(DISPON_CUROFF_BLKOFF);CLCD_cmd(INC_NOSHIFT); CLCD_cmd(DISPCLEAR);}//-------------------------------------------------unsigned int read_distance(){unsigned int distance=0;TRIG1; _delay_us(10); TRIG0;while(!ECHO); TCNT1=0; TCCR1B=2; //0.5uswhile( ECHO); TCCR1B=0;distance=TCNT1;distance=(unsigned int)((float)distance/11.6);return(distance);}//-------------------------------------------------void menu0(){CLCD_cmd(DISPCLEAR);CLCD_cmd(CUR1LINE); CLCD_puts("If Ready");CLCD_cmd(CUR2LINE); CLCD_puts("Press Switch!");state=1;}//-------------------------------------------------void menu1(){distance_1st=read_distance(); //초음파센서CLCD_cmd(DISPCLEAR);CLCD_cmd(CUR1LINE); CLCD_puts("First: "); CLCD_num_display(distance_1st);state=2;}//-------------------------------------------------void menu2(){distance_2nd=read_distance(); //초음파센서CLCD_cmd(CUR2LINE); CLCD_puts("Second: "); CLCD_num_display(distance_2nd);state=3;}//-------------------------------------------------void menu3(){CLCD_cmd(DISPCLEAR);CLCD_cmd(CUR1LINE); CLCD_puts("Height: ");height=distance_2nd-distance_1st;if(height<0)CLCD_puts("Error!");else CLCD_num_display(height);state=0;}//-------------------------------------------------ISR(INT4_vect){_delay_ms(100); EIFR|=1x10; if(PINE&=0x10)return; // 채터링 return//-------------------------------------------------------------------switch(state){ // 스위치 누른 횟수case 0: menu0(); break;case 1: menu1(); break;case 2: menu2(); break;case 3: menu3(); break;}}//-------------------------------------------------void TX0_char(char c){ while(!(UCSR0A&0x20)); UDR0=c; }void TX0_STR(char *s){ while(*s)TX0_char(*s++); }//-------------------------------------------------interrupt [USART0_RXC] void usart0_rx_isr(void){ // 수신 인터럽트char r;r=UDR0;if(r=='0')menu0();if(r=='1')menu1();if(r=='2')menu2();if(r=='3')menu3();}//int main(void){DDRA=0x40; // 초음파거리센서 TRIG(PA6,출력),ECHO(PA7,입력)DDRC=0xFF; // CLCD PORT(data&command)DDRD=0x1C; // CLCD PORT(control 출력: RS=bit2,RW=bit3,E=bit4)PORTE=0x10; // SW1 내부플업저항init_CLCD();UCSR0B=0x98; UBRR0L=103; // 9600EICRB=0xAA; EIMSK=0x10; // INT4 하강 에지(Fallin Edge)SREG|=0x80;while(1){}}
댓글 6
조회수 13,207도리비님의 댓글
도리비 작성일
정말 좋은 답변 감사드립니다 많은 도움이 되었습니다
한가지만 더 여쭈어 보고싶습니다
atmelstudio 를 이용해 실행을 시켰을때
98번쨰 줄에서 invalid suffix "x10" on integer constant 에러와
111번째 줄에서
1. 'USART0_RXC' undeclared here (not in a function)
2. expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
의 에러가 발생해서 한번더 질문 여쭙겠습니다!
master님의 댓글
master
EIFR|=1x10; ->
EIFR|=0x10;
//
interrupt [USART0_RXC] void usart0_rx_isr(void){ ->
ISR(USART0_RX_vect){
도리비님의 댓글
도리비
정말 감사드립니다 ^^ 오늘 좋은하루 되세요
도리비님의 댓글
도리비
0 을 입력할시 1번 state 1을입력할시 2번 state 2를입력할시 3번 state 3을입력할시 4번 state 이거 맞나요?
master님의 댓글
master
3을입력할시 처리 후 state=0;
도리비님의 댓글
도리비
아 감사드립니다 !!!