코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
avr atmega128 사용하여 숫자받기
유선우 | 2017-11-27
|
|
---|---|
안녕하세요 저는 일단 앱인벤터를 이용하여 텍스트 형식으로 rgb 값을 0~255로 받아 예를 들면 255,34,9 처럼 블루투스로 보낼 수 있습니다. 하지만 이 값을 avr atmega128을 통해 읽고 이걸로 pwm을 제어하여 rgb led를 제어하려고 하는데 제가 부족한 탓인지 선언부가 잘 못 된건지 1자리 수의 문자만char 하나만 인식하고 배열도 안되네요... #include <avr/io.h>
#define F_CPU 16000000UL // 16 MHz #include <util/delay.h> void setColor(int r,int g,int b){ OCR1A=r; OCR1B=g; OCR1C=b; }
unsigned char RX1_char_scan(void) // 수신버퍼의 데이터 전달함수
{ if((UCSR1A & 0x80) == 0x00) // RXC1 = clear : 수신버퍼에 데이터가 없으면 return 0x00; // null 반환 else // RXC1 = set : 수신버퍼에 데이터가 있으면 return UDR1; // 수신 데이터 반환 } void rx_string(char *str) { int a=0; while((str[a]=RX1_char_scan())!='\n');
{ a++; } str[a]='\0'; } void TX1_char(unsigned char data) // 데이터 송신함수 { while((UCSR1A & 0x20) == 0x00); // UDRE1 = set되어 송신데이터 받을 준비가 되면 UDR1 = data; // 데이터를 UDR1으로. } void TX1_string(char *string) // 문자열 전달함수
{ // *string 포인터가 문자열파라매터의 첫 글자 주소를 가르킨다. while(*string !='\0') // 문자열의 끝(null)이 올때까지 이하내용을 수행 { TX1_char(*string); string++; // 주소값을 증가시켜 다음문자열 가르킴 } } int main()
{ int i,color,ratio; float f; DDRB=0xE0; // PB5(r),PB6(g),PB7(b) out TCCR1A=0xFE; TCCR1B=0x1A; ICR1=255; char data[6]; unsigned char RXD;
DDRC = 0xFF; // --------------- UART 1 관련 레지스터 설정 -------------------- UBRR1H = 0; UBRR1L = 103; // BUADRATE 결정 103 : 9600 BUAD 송수신 속도 결정 UCSR1A = 0x00; UCSR1B = 0x18; // RxDn, TxDn pin ENABLE UCSR1C = 0x06; // Parity check disable, 1 stop, 8 data RXD = UDR1; // dummy data read TX1_string("Bluetooth Communication Test"); // 수신 문자열 TX1_char(0x0D); // 아스키 문자 CR(CARRIGE RETURN : 커서를 처음으로) 전송 TX1_char(0x0A); // 아스키 문자 LF(LINE FEED : 그다음줄로..) 전송 while(1)
{ RXD = RX1_char_scan(); rx_string(data); if(!strcmp(data, "on"))
{ setColor(200,0,0); TX1_string("Light ON"); } } } |
|
이전글 | 앱인벤터와 블루투스 | 2017-11-27 |
다음글 | rc522 릴레이 질문 | 2017-11-28 |