질문게시판 > HC-06 블루투스 통신

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

HC-06 블루투스 통신

페이지 정보

작성자 dhdiw 작성일20-01-07 21:45 조회101회 댓글0건

본문

안녕하세요.

atmega8에서 HC06을 사용해서 통신을 연습하고 있습니다.

(전체코드) while문 제외하고는 위자드로 인해 생성된 제어문들입니다.

#include <io.h>

 

// Declare your global variables here

 

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)

#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<DOR)

 

// USART Receiver buffer

#define RX_BUFFER_SIZE 8

char rx_buffer[RX_BUFFER_SIZE];

 

#if RX_BUFFER_SIZE <= 256

unsigned char rx_wr_index=0,rx_rd_index=0;

#else

unsigned int rx_wr_index=0,rx_rd_index=0;

#endif

 

#if RX_BUFFER_SIZE < 256

unsigned char rx_counter=0;

#else

unsigned int rx_counter=0;

#endif

 

// This flag is set on USART Receiver buffer overflow

bit rx_buffer_overflow;

 

// USART Receiver interrupt service routine

interrupt [USART_RXC] void usart_rx_isr(void)

{

char status,data;

status=UCSRA;

data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

   {

   rx_buffer[rx_wr_index++]=data;

#if RX_BUFFER_SIZE == 256

   // special case for receiver buffer size=256

   if (++rx_counter == 0) rx_buffer_overflow=1;

#else

   if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;

   if (++rx_counter == RX_BUFFER_SIZE)

      {

      rx_counter=0;

      rx_buffer_overflow=1;

      }

#endif

   }

}

 

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer

#define _ALTERNATE_GETCHAR_

#pragma used+

char getchar(void)

{

char data;

while (rx_counter==0);

data=rx_buffer[rx_rd_index++];

#if RX_BUFFER_SIZE != 256

if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;

#endif

#asm("cli")

--rx_counter;

#asm("sei")

return data;

}

#pragma used-

#endif

 

// USART Transmitter buffer

#define TX_BUFFER_SIZE 8

char tx_buffer[TX_BUFFER_SIZE];

 

#if TX_BUFFER_SIZE <= 256

unsigned char tx_wr_index=0,tx_rd_index=0;

#else

unsigned int tx_wr_index=0,tx_rd_index=0;

#endif

 

#if TX_BUFFER_SIZE < 256

unsigned char tx_counter=0;

#else

unsigned int tx_counter=0;

#endif

 

// USART Transmitter interrupt service routine

interrupt [USART_TXC] void usart_tx_isr(void)

{

if (tx_counter)

   {

   --tx_counter;

   UDR=tx_buffer[tx_rd_index++];

#if TX_BUFFER_SIZE != 256

   if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;

#endif

   }

}

 

#ifndef _DEBUG_TERMINAL_IO_

// Write a character to the USART Transmitter buffer

#define _ALTERNATE_PUTCHAR_

#pragma used+

void putchar(char c)

{

while (tx_counter == TX_BUFFER_SIZE);

#asm("cli")

if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))

   {

   tx_buffer[tx_wr_index++]=c;

#if TX_BUFFER_SIZE != 256

   if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;

#endif

   ++tx_counter;

   }

else

   UDR=c;

#asm("sei")

}

#pragma used-

#endif

 

// Standard Input/Output functions

#include <stdio.h>

 

void main(void)

{

DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0);

 

DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (1<<DDD1) | (0<<DDD0);

 

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600

UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);

UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);

UBRRH=0x00;

UBRRL=0x67;

 

ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);

 

#asm("sei")

 

while (1)

      {

      unsigned int k;

        k=getchar();

 

        if(k=='1'){PORTB.1=1; //led on

            printf("Hello"); 

        }

 

        if(k=='0'){PORTB.1=0; //led off

            putchar('x'); 

        }

      // Place your code here

 

      }

}

 

(제어)

while (1)

      {

      unsigned int k;

        k=getchar();

 

        if(k=='1'){PORTB.1=1; //led on

            printf("Hello"); 

        }

 

        if(k=='0'){PORTB.1=0; //led off

            putchar('x'); 

        }

      // Place your code here

 

      }

}

 

우선 긴 문자를 보내주는건 printf를 사용하면 된다는것을 깨달았습니다.

근데 만약 핸드폰에서 ledon을 써서 보내면 

        if(k=="ledon"){PORTB.1=1; //led on

            printf("Hello"); 

        }

이런식으로 제어를 하고 싶습니다.
도움좀 부탁드리겠습니다. 
  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 0

조회수 : 101

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[10] master  17-10-29
공지 [무료 공개] 소스코드 하이라이트 v2.0 beta [… 댓글[1] 첨부파일master  18-01-23
질문 적외선 DC모터 제어 아두이노배우기 새글 14:19
답변 답변 : 적외선 DC모터 제어 master 새글 16:34
질문 아두이노 IDE (ino파일) 로 업로드 하면 작동되는… 댓글[1] 첨부파일이츠라 새글 14:12
질문 atmega128 while 속 if문 실행 문제 이동욱 새글 20-02-24
답변 답변 : atmega128 while 속 if문 실행 … master 새글 20-02-24
질문 Limit Sensor 를 이용한 LED의 자동 작동에… 첨부파일아두이프로 새글 20-02-24
답변 답변 : Limit Sensor 를 이용한 LED의 자… 댓글[1] master 새글 20-02-24
질문 HC-11을 이용하여 1:N 통신중입니다. 댓글[4] 아두이노배우기 새글 20-02-23
질문 스텝모터 정지 댓글[2] 아두이노배우기  20-02-23
답변 답변 : 스텝모터 정지 댓글[2] master  20-02-23
질문 정말 감사합니다. 박취  20-02-19
질문 ov9655카메라와 stm32f4 보드를 이용한 영상처… 댓글[7] flap  20-02-19
질문 GLCD 텍스트 출력 댓글[2] 전자학습자  20-02-17
질문 아두이노 HC-11 통신관련입니다. 아두이노배우기  20-02-15
답변 답변 : 아두이노 HC-11 통신관련입니다. master  20-02-16
답변 답변 : 답변 : 아두이노 HC-11 통신관련입니다. 아두이노배우기  20-02-16
질문 led 불켜기 마스터 슬레이브 댓글[1] 공용  20-02-12
답변 답변 : led 불켜기 마스터 슬레이브 master  20-02-12
질문 아두이노 코딩 관련 질문입니다. bbeuniii  20-02-12
답변 답변 : 아두이노 코딩 관련 질문입니다. master  20-02-12
질문 uart 관련 질문 (wiegand통신) 댓글[9] 첨부파일jhyun8624  20-02-11
질문 회로, 코딩 문제 첨부파일공기구함  20-02-10
답변 답변 : 회로, 코딩 문제 댓글[2] master  20-02-10
질문 회로, 코딩문제 댓글[2] 첨부파일공기구함  20-02-10
질문 코딩어레이 질문 master  20-02-07
질문 컴파일 오류가나는데, 이유를 모르겠습니다. 댓글[5] 창고지기  20-02-06
질문 IR센서 2개로 LED, DC모터 제어 (입문자입니다 … 창고지기  20-02-05
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전