BASIC4MCU | 질문게시판 | 아트메가128와 avr studio7을 쓰는중인데 코드 질문있습니다.
페이지 정보
작성자 정이 작성일2023-11-23 12:50 조회1,419회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=23435
본문
#include <avr/io.h>
#include <util/delay.h>
// LED가 연결된 포트와 핀 설정
#define LED_PORT PORTE
#define LED_MASK 0x07 // Bits 2:0 for 3 LEDs on Port E
// 블루투스 통신에 사용되는 UART 포트 설정
#define BAUD_RATE 9600
#define F_CPU 16000000UL
#define UBRR_VALUE ((F_CPU) / (BAUD_RATE * 16UL) - 1)
void servoInit() {
TCCR1A = 0x82;
TCCR1B = 0x1b;
ICR1 = 4999;
}
void servoRotate1(char angle) {
DDRB = 0x20;
PORTB = 0x20;
OCR1A = angle;
_delay_ms(1000); // Adjust the delay time as needed
OCR1A = 375; // Reset the motor position
}
void servoRotate2(char angle) {
DDRB = 0x40;
PORTB = 0x40;
OCR1B = angle;
_delay_ms(1000); // Adjust the delay time as needed
OCR1B = 375; // Reset the motor position
}
void servoRotate3(char angle) {
DDRB = 0x80;
PORTB = 0x80;
OCR1C = angle;
_delay_ms(1000); // Adjust the delay time as needed
OCR1C = 375; // Reset the motor position
}
void USART1_Init() {
// USART1 설정
UBRR1H = (unsigned char)(UBRR_VALUE >> 8);
UBRR1L = (unsigned char)UBRR_VALUE;
UCSR1B = (1 << TXEN1) | (1 << RXEN1);
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);
}
void USART1_Transmit(unsigned char data) {
// 데이터 전송
while (!(UCSR1A & (1 << UDRE1)))
;
UDR1 = data;
}
unsigned char USART1_Receive() {
// 데이터 수신
while (!(UCSR1A & (1 << RXC1)))
;
return UDR1;
}
void LED_Init() {
// LED 핀을 출력으로 설정
DDRE |= LED_MASK;
// 초기에 3개의 LED를 켬
LED_PORT |= LED_MASK;
}
void LED_On1() {
// LED를 켬
LED_PORT &= ~(1 << 0); // Turn off PORTE0
_delay_ms(3000); // Delay for 3 seconds
LED_PORT |= (1 << 3); // Turn on PORTE3
servoRotate1(500);
}
void LED_On2() {
// LED를 끔
LED_PORT &= ~(1 << 1); // Turn off PORTE1
_delay_ms(3000); // Delay for 3 seconds
LED_PORT |= (1 << 4); // Turn on PORTE4
servoRotate2(500);
}
void LED_On3() {
// LED를 끔
LED_PORT &= ~(1 << 2); // Turn off PORTE1
_delay_ms(3000); // Delay for 3 seconds
LED_PORT |= (1 << 5); // Turn on PORTE4
servoRotate3(500);
}
int main(void) {
USART1_Init();
LED_Init();
servoInit();
while (1) {
// 휴대폰에서 받은 데이터 확인
unsigned char data = USART1_Receive();
// 받은 데이터에 따라 LED 제어
if (data == '1') {
LED_On1();
} else if (data == '2') {
LED_On2();
}else if (data == '3') {
LED_On3();
}
}
return 0;
}
블루투스 이용해서 led랑 서보모터 동작중입니다 휴대폰에서 1값을 주면 pb5서보모터가 반응을하는데 2,3을 주거나 초기값에도 pb6,7에 꼽혀있는 서보모터가 반응하지않아 질문드립니다
댓글 1
조회수 1,419master님의 댓글
master 작성일TCCR1A=0xAA;