BASIC4MCU | 질문게시판 | ATmega128 2개로 hc-05,hc-06블루트수 통신
페이지 정보
작성자 동콩이 작성일2024-12-04 14:19 조회136회 댓글0건본문
제가 송신측에는 hc-05 수신측에는 hc-06을 두고 서로 블루투스 통신을 할려고 합니다 지금 제 코드르 보시면 송신측에서 버튼1을 누르면 LCD에 A를 띄우고 A라는 값을 수신측으로 보내고 A를 수신측에 LCD에 띄우고 싶은데 지금 통신은 됩니다 하지만 A라는 값이 안뜨고 이상한 값이 떠서 문제입니다. HC-05에 마스터 모드로 해주고 서로 보우레이트 맞추고 HC-06의 MAC 주소도 넣었습니다. 혹시 어떤 문제가 있는지 궁금합니다
송신측:
#include <mega128.h>
#include <delay.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x15 ; PORTC
#endasm
// UART 데이터 송신 함수
void uart_send(char data) {
while (!(UCSR0A & (1 << UDRE0))); // 송신 버퍼 대기
UDR0 = data; // 데이터 송신
}
void main(void) {
// 버튼 입력 포트 설정 (PD0)
DDRD = 0x00; // 입력 설정
PORTD = 0xFF; // 풀업 저항 활성화
// CLCD 초기화
lcd_init(16);
// UART 초기화 (9600bps)
UCSR0B = (1 << TXEN0); // 송신 활성화
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8비트 데이터
UBRR0L = 103; // 16MHz에서 9600bps 설정
// 초기 메시지
lcd_clear();
lcd_putsf("Controller Ready");
while (1) {
// PD0 버튼 눌림 확인 (low active)
if (!(PIND & 0x01)) {
// 데이터 송신
uart_send('A');
// LCD에 송신 표시
lcd_clear();
lcd_putsf("Sent:A ");
// 디바운스 및 표시 유지
delay_ms(500);
// 초기 메시지로 복귀
lcd_clear();
lcd_putsf("Controller Ready");
}
}
}
수신측#include <mega128.h>#include <delay.h>#include <lcd.h>#asm.equ __lcd_port=0x15 ; PORTC#endasm// UART 데이터 수신 함수char uart_receive(void) {while (!(UCSR0A & (1 << RXC0))); // 데이터 수신 대기return UDR0; // 수신된 데이터 반환}void main(void) {char received;// CLCD 초기화lcd_init(16);// UART 초기화 (9600bps)UCSR0B = (1 << RXEN0); // 수신 활성화UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8비트 데이터UBRR0L = 103; // 16MHz에서 9600bps 설정// 초기 메시지lcd_clear();lcd_putsf("Waiting...");while (1) {// 데이터 수신received = uart_receive();// 수신된 데이터가 'A'면 PORTA LOWif (received == 'A') {// PORTA를 출력으로 설정하고 LOWDDRA = 0xFF;PORTA = 0x00;// LCD에 상태 표시lcd_clear();lcd_putsf("PORTA set LOW");// 대기delay_ms(500);}}}
댓글 0
조회수 136등록된 댓글이 없습니다.