BASIC4MCU | 질문게시판 | 블루투스 값이 변조가 됩니다
페이지 정보
작성자 어려운AVR 작성일2019-12-11 17:07 조회6,461회 댓글3건본문
#define F_CPU 8000000UL
#define __DELAY_BACKWARD_COMPATIBLE__
#include <avr/io.h>
#include <util/delay.h>
//
char rx_char(void){ while(!(UCSR1A&0x80)); return UDR1; }
void tx_char(char t){ while(!(UCSR1A&0x20)); UDR1=t; }
//
void RC_Motor(int angle){ // angle:-90도~+90도
int i;
if(angle<-90)angle=-90;
if(angle> 90)angle= 90;
i=(angle)*9+1499;
OCR1A=i; //PB5
}
//
int main(){
unsigned char data;
DDRB=0x20; DDRD=0xFF;
UCSR1B=0x18; UBRR1L=51;
TCCR1A=0x82; TCCR1B=0x1A; OCR1A=1499; ICR1=19999;
while(1){
data=rx_char();
if(data=='1')RC_Motor(-90);
if(data=='2')RC_Motor( 0);
}
어플을 이용하여 값을 보내어 되돌아오는 값을 확인해보았는데 이상하게 변환되었습니다.
혹시 값이 변한 이유를 알고계시면 알려주시면 감사하겠습니다
댓글 3
조회수 6,461master님의 댓글
master 작성일되돌아오는 값을 확인해보았는데 <-- 에코 코드가 없는데 어떻게 확인 했다는 것일까요?
어려운AVR님의 댓글
어려운AVR
#define F_CPU 8000000UL
#define __DELAY_BACKWARD_COMPATIBLE__
#include <avr/io.h>
#include <util/delay.h>
void init_uart1(){
UCSR1B = 0x18; //Tx Rx enable
UCSR1C = 0x06; //UART Mode, 8bit data, NO Parity, 1 Stop bit
UBRR1H = 0; //Baudrate Setting
UBRR1L = 51; //16MHz 115200 baud : 8 , [8MHz 115200 : 3][8MHz,U2X = 1 : 8]
}
char getchar1(){
while(!(UCSR1A & (1<<RXC1))); //수신 문자가 있으면 1
return (UDR1);
}
void putchar(int tx){
while(!(UCSR1A &(1<<UDRE1)));
UDR1 = tx;
}
int main()
{
char c = 0;
init_uart1();
while(1){
c = getchar1();
putchar(c);
}
return 0;
}
코드를 잘못 올렸네요
이 코드 입니다. 1을 보내면 알 수 없는 값이 되어서 돌아옵니다.
master님의 댓글
master
수신 표시하고 있는 도중에 송신을 해서 데이터가 오버랩한 것 아닌가요?
답글로 테스트 코드를 작성해드리죠