BASIC4MCU | 질문게시판 | ATMEGA128 블루투스 시리얼 통신 LED점멸
페이지 정보
작성자 qorgh215 작성일2021-11-07 13:08 조회1,775회 댓글0건본문
일부의 코드입니다.
블루투스 시리얼 통신으로 'o'를 입력받으면 LED가 점멸하고 'f'를 받으면 점멸을 정지하고 싶은데 잘 안됩니다.ㅠㅠ
어떻게하면 될까요?
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
void BL();
void LED();
int main(void)
{
BL();
}
// 3번 블루투스
char Uart_Receive(void) // UART 데이터 수신 함수
{
while (!(UCSR0A & (1<<RXC0))); // 수신 될 때 까지 기다림
return UDR0; // UDR1값 반환
}
void BL()
{
// int n=1;
DDRD = 0xff;
DDRF = 0xff;
DDRC = 0b11111000;
PORTD = 0xff; PORTF = 0xff; PORTC = 0b11111000;
UCSR0A = 0x00;
UCSR0B = (1<<RXEN0)|(1<<TXEN0); // UART 수신 기능 허용 1 // UART 송신 기능 허용 1
UCSR0C = (1<<UCSZ11)|(1<<UCSZ10); // 8-bit;
// 통신 속도 : 9600bps
// UBRR = 103
UBRR0H = 0;
UBRR0L = 103;
while (1)
{
switch(Uart_Receive())
{
// G입력시 전진
case 71: // G
moveG();
break;
// L입력시 좌회전
case 76: // L
moveL();
break;
// R입력시 우회전
case 82: // R
moveR();
break;
// B입력시 후진
case 66: // B
moveB();
break;
// r입력시 정지
case 114: // r
mover();
break;
// U입력시 서보90도
case 85: // U
SBu();
DDRB=0b00000000;
break;
// D입력시 서보0도
case 68:
SBd();
DDRB=0b00000000;
break;
// o입력시 LED ON
case 111:
LED();
break;
}
}
}
void LED()
{
int n=1;
while(1)
{
if(Uart_Receive()=='f')
{
PORTD = 0xff; PORTF = 0xff; PORTC = 0b11111000; // LED끔
n=0;
}
else if(n==1)
{
PORTD = 0x00; PORTF = 0x00; PORTC = 0b00000000; // LED킴
_delay_ms(300);
PORTD = 0xff; PORTF = 0xff; PORTC = 0b11111000; // LED끔
_delay_ms(300);
n=1;
}
else if(n==0)
{
break;
}
}
}
댓글 0
조회수 1,775등록된 댓글이 없습니다.