개발/HW 개발

AVR / ATmega8 / 솔라카 만들기 / 소스코드

두노이노 2015. 1. 23. 16:13

블루투스 통신을 이용했다.

 

모바일에서 블루투스로 a,b,c,d,e,f등을 보내면 그에 맞게 앞바퀴를 움직인다.

 

ATmega8에 크리스탈을 달고 16Mhz를 이용해 구성했다.

 

 

 

////

 

#define F_CPU 16000000
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>

#define DELAY1 30
#define DELAY2 50
#define DELAY3 100
#define DELAY4 200
#define DELAY5 300


volatile unsigned char RxData=0, RxFlag=0, DataFlag=0;
volatile unsigned char TimerFlag=0;

 

ISR(USART_RXC_vect)
{
 RxData=UDR;  
 UART_Tx(RxData);

 if(RxData == 'a'){DataFlag=1;}
 else if(RxData == 'b'){DataFlag=2;}
 else if(RxData == 'c'){DataFlag=3;}
 else if(RxData == 'd'){DataFlag=4;}
 else if(RxData == 'e'){DataFlag=5;}

 else if(RxData == 'f'){DataFlag=6;}
 else if(RxData == 'B'){DataFlag=7;}
 else if(RxData == 'C'){DataFlag=8;}
 else if(RxData == 'D'){DataFlag=9;}
 else if(RxData == 'E'){DataFlag=10;}
 
 
 RxFlag=1;
}


void UART_Tx(char TxData){ while(!(UCSRA&(1<<UDRE))); UDR=TxData;}

void UART_Init(void)
{
 UCSRA=0;
 UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
 UCSRC=(1<<UCSZ1)|(1<<UCSZ0);
 UBRRH=0;
 //UBRRL=8;  //115200bps
 UBRRL=103;  //9600bps 
}

 

int main(void)
{
 DDRB=0xff;
 UART_Init();
 sei();
 

 while(1)
 {
 
  if(RxFlag==1)
  { 
   if(DataFlag==1)  {PORTB=0x01; _delay_ms(DELAY3); PORTB=0x00;}
   else if(DataFlag==2){PORTB=0x01; _delay_ms(DELAY4); PORTB=0x00;}
   else if(DataFlag==3){PORTB=0x02; _delay_ms(DELAY3); PORTB=0x00;}
   else if(DataFlag==4){PORTB=0x02; _delay_ms(DELAY4); PORTB=0x00;}


   else if(DataFlag==5){PORTB=0x01; _delay_ms(DELAY5); PORTB=0x00;}
   else if(DataFlag==6){PORTB=0x02; _delay_ms(DELAY5); PORTB=0x00;}
/*
   else if(DataFlag==7){PORTB=0x02; _delay_ms(DELAY2); PORTB=0x00;}
   else if(DataFlag==8){PORTB=0x02; _delay_ms(DELAY3); PORTB=0x00;}
   else if(DataFlag==9){PORTB=0x02; _delay_ms(DELAY4); PORTB=0x00;}
   else if(DataFlag==10){PORTB=0x02; _delay_ms(DELAY5); PORTB=0x00;}
  */
   DataFlag=0;
   RxFlag=0;  
  }
 
 
 }
}