Page 230 - 완) I MDP 프로젝트 작품 보고서(전체과 1학년)1.6
P. 230
#include <mega128.h>
#include <delay.h>
unsigned char rx = 0; //블루투스를 이용해 APP에서 오는 데이터 수신 변수
unsigned char count = 5; //자신의 점수를 표현하기 위한 변수
unsigned char mag = 0; //자기센서의 상태를 확인하기 위한 변수
unsigned char flagServo = 0; //서보모터 기능 사용 여부를 위한 변수
unsigned char BTcount = 0x35; //블루투스를 이용해 APP으로 점수를 보내기 위한 변수
unsigned char stoptank = 0;
unsigned int tim0_cnt = 0, mot_pos = 0, change = 0; //서보모터의 각도 주기 관련 변수
unsigned int rc_time[3] = {54, 150, 210}; // 0도, 90도, 180도
void BTrecive(); //블루투스를 이용해 APP에서 오는 데이터를 처리하는 함수
void MAGsensor(); //자기센서의 변화가 생길 시 수행하는 함수
void IRsensor(); //적외선 수신센서가 정해진 수치만큼 공격을 받았을 시 수행하는 함수
void servoMAG(); //서보모터 구동을 위한 함수
void end();
void main()
{
DDRA = 0xff; //PA는 모터 조정을 위해
DDRB = 0xff;
DDRC = 0xff;
DDRF = 0xff;
DDRG = 0xff; //PA, B, C, F, G를 출력으로 설정
EIMSK = 0b00000011; //외부 인터럽트(INT0, INT1)허용
EICRA = 0b00001010; //INT0가 하강 엣지가 입력될 때 실행되는 것으로 설정
// 타이머/카운터 0 인터럽트 주기
// 이론치 (256-238) x 8분주 x 1/16us = 9us, 실측치 약 10us
TIMSK = 0x01; // TOIE0 = '1';
TCCR0 = 0x02; // 일반모드, 프리스케일 = CK/8
TCNT0 = 238; // 타이머/카운터0 레지스터 초기값
UCSR0A = 0x00;
UCSR0B = 0b10011000; //수신 인터럽트 허용, 수송신 기능 인에이블
UCSR0C = 0b00000110; //전송 데이터를 8비트로
UBRR0H = 0;
UBRR0L = 103; //BAUD RATE(보율)을 9600으로 맞춤(BT와 AVR의 통신 속도를 맞춤)
SREG |= 0x80; //모든 인터럽트 허용
PORTF = count; //FND에 점수 출력(with 7447)
UDR0 = BTcount; //블루투스를 이용해 APP으로 전송해줌
while (stoptank == 0)
{
PORTB.2 = 1;
BTrecive();
servoMAG();
- 223 -