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

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

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


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

페이지 정보

작성자 도리비 작성일2018-12-09 13:18 조회3,834회 댓글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

조회수 3,834

등록된 댓글이 없습니다.

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 9620
공지 사이트 이용 안내댓글[24] master 17-10-29 29577
질문 컴퓨터 usb연결시 정상 작동하나 9V건전지 외부전원 연결 시 작동하지 않는 문제댓글[2] 이미지새글첨부파일 보겐을운용 17:26 15
질문 아두이노 dac 연결댓글[1] 이미지새글첨부파일 kodory 16:28 17
질문 아두이노 millis ->atmega128에서 사용하고 싶습니다. 새글 akmong413 16:22 15
답변 답변글 답변 : 아두이노 millis ->atmega128에서 사용하고 싶습니다. 새글 master 17:27 12
질문 아트메가 모터드라이브와 초음파 센서 연동 질문입니다댓글[1] 새글 123424135123q 00:54 19
질문 스텝모터 드라이버 선정 질문드립니다. 새글 아흐흑 22-05-18 18
답변 답변글 답변 : 스텝모터 드라이버 선정 질문드립니다.댓글[1] 이미지새글 master 06:56 15
질문 아두이노로 모터+드라이버 제어댓글[6] 새글 모토 22-05-18 33
질문 온도센서로 서보모터 제어 코딩댓글[1] 새글 진수네1조 22-05-18 38
질문 라즈베리파이 웹캠 데이터 아두이노 전송 (초보)댓글[1] 전자과 22-05-17 34
질문 아두이노 코딩 도와주세요 (초음파센서와 금속감지센서로 서보모터 제어하기) 이현주 22-05-17 57
답변 답변글 답변 : 아두이노 코딩 도와주세요 (초음파센서와 금속감지센서로 서보모터 제어하기) 새글 master 22-05-18 109
질문 아두이노 우노 2개와 앱인벤터끼리의 블루투스 통신 방법댓글[3] 이미지첨부파일 pyoleo 22-05-17 80
질문 졸업작품 첨부파일 ejdog 22-05-16 72
질문 PCB의 커넥터 연결관련 이슈같은데.. 원인을 정확히 모르겠습니다.댓글[2] 이미지 설계못해서개털림 22-05-16 61
질문 STM32F767 사용중인데 발열이 발생합니다.댓글[5] 존클라프 22-05-16 61
질문 리니어 레일 거리 조절댓글[1] 면수 22-05-16 52
질문 아두이노 심전도 센서 BPM 계산댓글[3] 쥬쥬 22-05-16 69
질문 아두이노 서로 다른 전압을 가진 부품 제어 이미지 chovo 22-05-16 49
질문 앱인벤터 질문입니다.댓글[2] 이미지 귀끠우유 22-05-16 55
질문 아두이노 우노끼리 블루투스 통신댓글[1] 첨부파일 pyoleo 22-05-16 61
질문 마이크로 받은 입력을 주파수로 변경댓글[3] 생늧판출 22-05-16 39
질문 while문 안 if문 빠져나오는 방법 kyho3855 22-05-15 33
답변 답변글 답변 : while문 안 if문 빠져나오는 방법댓글[1] master 22-05-16 43
질문 초음파센서로 속도구하기(코드 합치는법) 쥰니 22-05-15 65
답변 답변글 답변 : 초음파센서로 속도구하기(코드 합치는법)댓글[1] master 22-05-16 56
질문 360서보모터 질문입니다댓글[1] 한잔해2 22-05-14 93
질문 아두이노 초보 24V DC 제품 제어댓글[2] 제로펲시 22-05-13 96
게시물 검색

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
모바일버전으로보기