BASIC4MCU | 질문게시판 | atmega128 블루투스 CLCD
페이지 정보
작성자 릴를 작성일2023-12-03 00:13 조회4,011회 댓글3건본문
void init_uart1() // UART1 초기화 함수
{
UCSR1B = 0x18; // 송신 Transmit(TX), Receive(RX) Enable
UCSR1C = 0x06; // UART Mode, 8Bit Data, No Parity, 1 Stop Bit
UBRR1H = 0; // Baudrate 세팅
UBRR1L = 8; // 16Mhz, 115200 baud (주의 :초기 셋팅 값 확인)
}
int main(void)
{
char c; DDRA = 0xff;
DDRD = 0xfc;
DDRC = 0xff; // CLCD PORT(data & command)
DDRE = 0x00; // SW1, sw2, sw3, sw4가 연결된 포트 E는 입력으로 선언
initMotor();
initInterrupt();
init_CLCD(); // CLCD 초기화
PORTB = MOTOR_CW;
displayMessage(Smart_fan, Press_Switch);
init_uart1(); // UART1 초기화
while (1) {
if (available()) // 만약 입력된 문자가 있으면
{
c = getchar1(); // 입력된 문자를 스마트폰으로부터 받아서
switch(c) // 명령의 종류에 따라 아래를 실행
{
case '1' : motorSpeed = STOP_SPEED;
ledState = 0x08; break; // 선풍기 STOP
case '2' : motorSpeed = LOW_SPEED;
ledState = 0x04; break; // 선풍기 STOPbreak; // 선풍기 LOW
case '3' : motorSpeed = MID_SPEED;;
ledState = 0x02; break; // 선풍기 MIDDLE
case '4' : motorSpeed = HIGH_SPEED;
ledState = 0x01; break; // 선풍기 HIGH
case '5' :
switch(motorSpeed)
{
case STOP_SPEED: putchar1('1'); break;
case LOW_SPEED: putchar1('2'); break;
case MID_SPEED: putchar1('3'); break;
case HIGH_SPEED: putchar1('4'); break;
default: break;
}
default: break;
}
}
setMotorSpeed(motorSpeed);
// LED 디스플레이 (선택된 속도에 따른 LED 표시)
if(motorSpeed == STOP_SPEED)
displayMessage(Sw1_press, Stop_fan);
else if(motorSpeed == LOW_SPEED)
displayMessage(Sw2_press, Low_fan);
else if(motorSpeed == MID_SPEED)
displayMessage(Sw3_press, Middle_fan);
else if(motorSpeed == HIGH_SPEED)
displayMessage(Sw4_press, High_fan);
PORTA = ledState;
// 딜레이 추가 (필요에 따라 조절)
_delay_ms(100);
}
}
init_uart1(); // UART1 초기화
이 코드를 넣어서 블루투스를 사용하려고하면 CLCD가 저 문장 전에 다른 문자를 쓰면 바뀌는데
저 문장 이후로는 CLCD가 다른 문자로 바뀌질 않습니다.
무슨 문제인지 모르겠습니다.
블루투스와 CLCD를 같이 쓰려면 조심해야할 부분이 있나요?
댓글 3
조회수 4,011master님의 댓글
master 작성일
motorSpeed를 체크해서 Sw1_press~Sw4_press 메시지를 출력하고 있으니
다른 메시지를 출력해도 다시 Sw1_press~Sw4_press 메시지로 변경 되겠죠?
//
void init_uart1(){
UCSR1B=0x18; // 송신 Transmit(TX), Receive(RX) Enable
UBRR1L=8; // 16Mhz, 115200 baud (주의 :초기 셋팅 값 확인)
}
//
int main(){
char c;
DDRA=0xff; DDRD=0xfc;
DDRC=0xff; // CLCD PORT(data & command)
//DDRE=0x00; // SW1, sw2, sw3, sw4가 연결된 포트 E는 입력으로 선언
initMotor();
initInterrupt();
init_CLCD(); // CLCD 초기화
PORTB=MOTOR_CW;
displayMessage(Smart_fan,Press_Switch);
init_uart1(); // UART1 초기화
while (1) {
if(available()){ // 만약 입력된 문자가 있으면
c=getchar1(); // 입력된 문자를 스마트폰으로부터 받아서
switch(c){
case '1': motorSpeed=STOP_SPEED; ledState=0x08; displayMessage(Sw1_press,Stop_fan); break; // 선풍기 STOP
case '2': motorSpeed=LOW_SPEED; ledState=0x04; displayMessage(Sw2_press,Low_fan); break; // 선풍기 LOW
case '3': motorSpeed=MID_SPEED; ledState=0x02; displayMessage(Sw3_press,Middle_fan); break; // 선풍기 MIDDLE
case '4': motorSpeed=HIGH_SPEED; ledState=0x01; displayMessage(Sw4_press,High_fan); break; // 선풍기 HIGH
}
if((c>='1')&&(c<='4')){ putchar1(c); setMotorSpeed(motorSpeed); }
}
//-----------------------------------------
PORTA=ledState;
// 딜레이 추가 (필요에 따라 조절)
_delay_ms(100);
}
}
릴를님의 댓글
릴를 작성일
displayMessage(Smart_fan, Press_Switch); 처음 여기서 출력한 문자열에서 LCD가 바뀌질 않습니다.
블루투스 코드를 넣기 전에 스위치 버튼을 이용해 인터럽트로 선풍기 속도 조절, led 출력, LCD 출력까지 다 되었는데
블루투스 코드를 넣으면 버튼을 눌러도 LCD가 처음 문자열에서 바뀌지 않습니다.
또한 블루투스를 이용해서 속도 조절, led 출력은 되는데 마찬가지로 LCD가 문제입니다
master님의 댓글
master 작성일
전체코드를 첨부해서 질문글을 다시 작성 해보세요
파일이 여러개면 압축해서 첨부하면 됩니다.