Page 156 - 완) I MDP 프로젝트 작품 보고서(전체과 1학년)1.6
P. 156
(3) Source Program
#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 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비트로
- 149 -