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  -
   225   226   227   228   229   230   231   232   233   234   235