질문게시판 > 안녕하세요 코딩을 하였는데 블루투스 기능을 추가하고싶은데 답변 해 주실분 부탁드립니다

TODAY601 TOTAL2,440,404
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 안녕하세요 코딩을 하였는데 블루투스 기능을 추가하고싶은데 답변 해 주실분 부탁드립니다

페이지 정보

작성자 도리비 작성일2018-12-09 13:18 조회5,780회 댓글0건

본문

	

 

 기본지식이 많이 부족합니다 ㅠㅠ

아래에 키측정 장치 코딩에 블루투스로 스위치 버튼 누르는 것만 작동시키고 싶습니다 블루투스 모듈은 현재 장착중 입니다

어떻게 하면 좋을지 알려주시면 감사하겠습니다 부탁드립니다사용중 모듈은 JMOD-128-01 입니다 블루투스 모듈은 JMOD-BT-1 입니다

 

 

 

 

 

 

 

 

 

#include <avr/io.h>

#define F_CPU 16000000UL

#include <util/delay.h>

#include <avr/interrupt.h>

 

#define    SOUND_VELOCITY       340UL     //  소리속도(m/sec)

 

#define    TRIG      6                           // 거리센서 Trigger 신호(출력)

#define    ECHO      7                           // 거리센서  Echo 신호 (입력)

#define    INT4       4                         // switch interrupt (bit4, 입력)

#define    STATE_0   0

#define    STATE_1   1

#define    STATE_2   2

#define    STATE_3   3

#define    GO        1

#define    STOP      0

#define    NULL      0x00

 

 

int distance_1st, distance_2nd, height;       //1,2차 거리 측정값과 키 계산값

 

unsigned char state = STATE_0;

unsigned char Go_Stop  = STOP;

 

                                           // CLCD Command & Data

#define BIT4_LINE2_DOT58        0x28      // 4 Bit Mode, 2 Lines, 5x8 Dot

#define DISPON_CUROFF_BLKOFF    0x0C      // Display On,Cursor Off, Blink Off

#define DISPOFF_CUROFF_BLKOFF   0x08      // Display Off,Cursor Off, Blink Off

#define INC_NOSHIFT             0x06     // Entry Mode, Cursor Increment,

                                          // Display No Shift

 

#define DISPCLEAR               0x01     // Display Clear, Address 0

                                         // Position, Cursor 0

#define CUR1LINE                0x80     // Cursor Position Line 1 First

#define CUR2LINE                0xC0     // Cursor Position Line 2 First

#define CURHOME                 0x02     // Cursor Home

#define E_BIT                   0x04    // Enable Bit #

#define RW_BIT                  0x03    // Read Write Bit #

#define RS_BIT                  0x02    // Register Select Bit #

 

void CLCD_cmd(char);                           // 명령어 전송함수

void CLCD_data(char);                           // 데이터 Write 함수

void CLCD_puts(char *);                           // 문자열 처리 함수

void display_fnd(unsigned int value);         // FND Display 함수

void init_interrupt();                              // Interrupt 처리함수

 

char If_Ready[] =  "If Ready";                  // 측정시작 프롬프트(1열)

char Press_Switch[] = "Press Switch!";        // 측정시작 프롬프트(2열)

char First[] = "First : ";                         // 첫번째 측정(머리에서 천장까지)

char Second[] = "Second  : ";                 // 두번째 측정(바닥에서 천장까지)

char Height[] = "Height : ";                   // 높이계산 및  Display

char CLCD_NUM[] = "000.0";                  // 초기값 = 000.0

char Error[] = "Error !";                         // 키가 음수인 경우 에러 디스플레이

 

void putchar1(char c)

{

char c;

int main(void)

{

DDRA = ((DDRA | (1<<TRIG)) & ~(1<<ECHO));

                                          // 초음파거리센서 TRIG(bit6, 출력 ), ECHO(bit7, 입력)

DDRC = 0xff;                              // CLCD PORT(data & command)

DDRD = 0xff;                              // CLCD PORT(control 출력 : RS=bit2, RW=bit3 , E=bit4)

DDRE = 0x00;                             // SW1이 연결된 포트 E는 입력으로 선언

 

init_interrupt();                           // 인터럽트 초기화

init_CLCD();                               // CLCD초기화

 

while(1)

         ;                              // 초기화 후에는 모든 일을 인터럽트에서 처리

             

}

void init_interrupt()                         // Interrupt 초기화

{

EICRB = 0x02;                     // INT4 트리거 모드는 하강 에지(Fallin Edge)

EIMSK = 0x10;                    // INT4 인터럽트 활성화

SREG |= 0x80;                    // SREG의 (interupt Enable) 비트(bit) '1' 로셋

}

 

void init_CLCD()                           //LCD 초기화

{

_delay_ms(50);                        //전원 인가 후 CLCD 셋업 시간

PORTC = 0x00;                       //데이터 clear

CLCD_cmd(BIT4_LINE2_DOT58);   // 4 Bit Mode, 2 Lines, 5x8 Dot

CLCD_cmd(DISPON_CUROFF_BLKOFF);       // Display On, Cursor Off, Blink Off

CLCD_cmd(INC_NOSHIFT);        // Entry Mode, Cursor Increment,

                                    // Display No Shift

CLCD_cmd(DISPCLEAR);           // Display Clear, Address 0

_delay_ms(2);                       // 디스플레이 클리어 실행 시간동안 대기

}

    

ISR (INT4_vect)                         // INT4 인터럽트 발생시

{

int distance_1st, distance_2nd, height, number;

 

_delay_ms(100);                  // 스위치 바운스 시간동안 기다림

EIFR |=1<<4;                     // 그사이 스위치 바운스에 의해 생긴

                                // 인터럽트는 무효화 -Debouncing

if ((PINE &=0x10) != 0x00)      // 스위치가 ON 상태인지 확인

return;                        // 아니면 노이즈 입력으로 여기고 그냥 return

switch (state) {

   case STATE_0:                         //스위치를 1번째 누른것 확인

CLCD_cmd(DISPCLEAR);

CLCD_cmd(CUR1LINE);

CLCD_puts(If_Ready);            // Display "if Ready"1열

CLCD_cmd(CUR2LINE);

CLCD_puts(Press_Switch);       // Display "Press Switch!"(2열)

state = STATE_1;

break;

   case STATE_1:                          // 스위치를 2번째 누른것 확인1/AR2 T

CLCD_cmd(DISPCLEAR);

CLCD_cmd(CUR1LINE);

CLCD_puts(First);                  // Display "First   :"

distance_1st = read_distance();

CLCD_num_display(distance_1st);

state = STATE_2;

break;

 

case STATE_2:                            //스위치를 3번째 누른 것 확인

CLCD_cmd(CUR2LINE);

CLCD_puts(Second);                 //   Display "Second :"

distance_2nd = read_distance();

CLCD_num_display(distance_2nd);

state = STATE_3;

break;

 

case STATE_3:                                 //스위치를 4번째 누른 것 확인

CLCD_cmd(DISPCLEAR);

CLCD_cmd(CUR1LINE);

CLCD_puts(Height);                       // Display Height

height = distance_2nd - distance_1st;

if (height < 0 ) CLCD_puts(Error);

else CLCD_num_display(height);

state = STATE_0;

break;

}

}

 

int read_distance()

{

unsigned int distance = 0;

TCCR1B = 0x03;            // Timer/Counter  클록 4us

PORTA &= ~(1<<TRIG);  // Trig=LOW

_delay_us(10);

PORTA |= (1<<TRIG);   // Trig=HIGH

_delay_us(10);

PORTA &= ~ (1<<TRIG); // Trig = LOW

while(!(PINA & (1<<ECHO)))     //wait until Echo = HIGH

        ;

TCNT1 = 0x0000;       // Timer/Countert 값초기화 =(0)

while (PINA & (1<<(ECHO)))

        ;

TCCR1B = 0x00;         // Timer/Countert 클록정지

distance  = (unsigned int)(SOUND_VELOCITY* (TCNT1* 4 / 2)/ 1000);

                 // 거리 = 속도 * 시간 (TCNT1 * 4)는 왕복 시간 ,거리단위는mm

return(distance);

}

void CLCD_puts(char *ptr)

{

while(*ptr != NULL)                   //문자열 마지막이 NILL 인지 검사

      CLCD_data(*ptr++);            // 마지막이 아니면 1문자 디스플레이

}

 

 

void CLCD_num_display(int num)

{

CLCD_NUM[0] = (num/1000)%10 + 0x30;

CLCD_NUM[1] = (num/100)%10+ 0x30;

CLCD_NUM[2] = (num/10)%10 + 0x30;

CLCD_NUM[3] = '.';

CLCD_NUM[4] = (num/1)%10 + 0x30;

CLCD_NUM[5] = NULL;

CLCD_puts(CLCD_NUM);

}

void CLCD_data(char data)

{

PORTD = 0x04;              //0b0000100, E(bit4)=0, R/W(bit3)=0,

                             //RS(bit2)=1, Write 사이클, 데이터모드

_delay_us(1);                 //Setup Time

PORTD = 0x14;             // 0b00010100, E(bit4)=1, R/W(bit3)=0,

                          //RS(bit2)=1 Enable

PORTC = data & 0xf0;    // upper 4bit

PORTD = 0x04;             // 0b0000100, E(bit4)=0, R/W(bit3)=0,

                             //RS(bit2)=1 , Write 사이클 ,데이터 모드

_delay_us(2);                //Hold & Setup Time

PORTD = 0x14;              //0b00010100, E(bit4)=1, R/W(bit3)=0,

                            // RS(bit2)=1  Enable

PORTC = (data << 4) & 0xf0;  // lower 4bit

PORTD = 0x04;              // 0b00000100, E(bit4)=0, R/W(bit3)=0,

                             //RS(bit2)=1 사이클 종료

_delay_ms(1);                //Hold Time & Execution Time

}

 

 

void CLCD_cmd(char cmd)

{

PORTD = 0x00;           //0b0000000, E(bit4)=0, R/W(bit3)=0,

                        //RS(bit2)=0, Write 사이클 , 명령어 모드

_delay_us(1);               // Setup Time

PORTD = 0x10;            //0b00010000, E(bit4)=1, R/W(bit3)=0.

                        // RS(bit2)=0 Enable

PORTC = cmd & 0xf0;     // upper 4bit 전송

PORTD = 0x00;             // 0b0000000, E(bit4)=O, R/W(bit3)=0

                         // RS(bit2)=0 Write 사이클 , 명령어 모드

_delay_us(2);               // Hold & Setup Time

PORTD = 0x10;            // 0b00010000, E(bit4)=1, R/W(bit3)=0.

                           // RS(bit2)=0 Enable

PORTC = (cmd<< 4) & 0xf0;   // lower 4bit 전송

PORTD = 0x04;                // 0b00000100, E(bit4)=0, R/W(bit3)=0,

                               //RS(bit2)=0 사이클 종료

_delay_ms(1);                //Hold Time & Execution Time

       }

}


  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 0

조회수 5,780

등록된 댓글이 없습니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 14881
공지 사이트 이용 안내댓글[28] master 17-10-29 32705
질문 atmega128 온도센서 질문입니다. 새글 으아어려워 03:35 20
답변 답변글 답변 : atmega128 온도센서 질문입니다. 새글 master 06:46 14
질문 (아두이노)qr리더기 gm65 관련 질문입니다. 새글 숨니 01:36 16
답변 답변글 답변 : (아두이노)qr리더기 gm65 관련 질문입니다. 새글 master 06:32 7
질문 flame sensor 질문입니다 새글 Tell 01:30 16
답변 답변글 답변 : flame sensor 질문입니다 새글 master 06:17 11
질문 서보모터 제어 질문댓글[3] 이미지새글첨부파일 NEOkANTsim 22-12-09 33
질문 dfplayer와 음성인식 모듈이 동시에 인식이 안되요댓글[3] 이미지새글첨부파일 tjqhd 22-12-09 22
질문 아두이노 스텝모터 값 제어(헤더파일 사용X) 새글첨부파일 산만 22-12-09 23
답변 답변글 답변 : 아두이노 스텝모터 값 제어(헤더파일 사용X) 새글 master 22-12-09 22
질문 초음파 카운트 새글 고구만 22-12-09 19
답변 답변글 답변 : 초음파 카운트 새글 master 22-12-09 19
질문 정전기로 인해 아두이노 핀이 죽어버립니다..댓글[1] 이미지새글 무야더싱 22-12-08 28
질문 매트랩 블루투스 무선 통신댓글[1] 이미지새글첨부파일 아두이노대학 22-12-08 20
질문 아두이노 else if Relay 관련 질문 새글 노토산스 22-12-08 21
답변 답변글 답변 : 아두이노 else if Relay 관련 질문댓글[1] 새글 master 22-12-08 22
질문 모터드라이버(L298N E6) 2개 동시사용.댓글[1] 이미지첨부파일 마고 22-12-08 33
질문 아두이노 l298n frequency sweep 관련 질문댓글[2] 이미지 sdwdjangwon 22-12-07 25
답변 답변글 답변 : 아두이노 l298n frequency sweep 관련 질문댓글[2] master 22-12-07 31
질문 stm32에서 코드 경과시간 측정하는 방법좀댓글[3] 라칸 22-12-07 24
질문 아두이노 코드 질문있습니다. 호2 22-12-07 34
답변 답변글 답변 : 아두이노 코드 질문있습니다. master 22-12-07 28
질문 아두이노와 초음파 센서로 모터 제어 코드 질문있습니다. blackbunn 22-12-07 32
답변 답변글 답변 : 아두이노와 초음파 센서로 모터 제어 코드 질문있습니다.댓글[1] master 22-12-07 39
질문 버튼 릴레이댓글[3] 아두이노배우기 22-12-07 27
질문 아두이노 초급자 과제 중인데 코드해석이 어렵습니다.. zhem 22-12-06 37
질문 시리얼 모니터 분리 안 되나요?댓글[4] 이미지 까만키위 22-12-06 38
질문 타이머 관련 질문입니다. 이미지첨부파일 adui 22-12-06 33
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기