질문게시판 > Atmega128 블루트스를 이용하여서 초음파센서값을 보내고 받을때 앱인벤터로 ??를 보냅니다.

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

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


BASIC4MCU | 질문게시판 | Atmega128 블루트스를 이용하여서 초음파센서값을 보내고 받을때 앱인벤터로 ??를 보냅니다.

페이지 정보

작성자 17전자 작성일2021-12-15 00:00 조회6,598회 댓글3건

본문

	

Atmeg128 과 HC-06블루투스 SR04 초음파센서를 이용하였습니다.

①문자열 전송 테스트 에서는 정상적으로 앱에서abcdefg 가 여러줄 출력되는것을 확인하였습니다.

이를통해서

②초음파센서+센서값 전송에 적용시켜서 

distance 값을 보내고 앱에서 값을 받았는데 다음과같이 이상한값이 출력됩니다. 

초음파센서의 값이 cm로 변환되어서 if조건을 만족하여서LED나 부저는 정상적으로 작동하는데

다음과 같이 블루투스로 송신하는 값이 이상하게 나옵니다.

20cm 30cm 이렇게 나오게 만들고 싶은데 해결방법을 알수있을까요?

 

 

①문자열 전송 테스트 

#include <avr/io.h>

#define F_CPU 16000000UL // 16 MHz

#include <util/delay.h>

//

void tx_char(char d){ while(!(UCSR1A&0x20)); UDR1=d; }

void tx_str(char *s){ while(*s)tx_char(*s++); }

//

int main(){

UCSR1B=8; UBRR1L=103; //9600bps

while(1){ tx_str("abcdefg\r\n"); _delay_ms(1000); }

}

 

②초음파센서+센서값 전송

#include <avr/io.h>

#define F_CPU 16000000UL

#include <util/delay.h>

#define TRIG 6

#define ECHO 7

#define SOUND_VELOCITY 340UL

 

void tx_char(unsigned int tx_data)

{

while(!(UCSR1A&0x20));

UDR1 = tx_data; }

int main(void)

{

UCSR1B=8; UBRR1L=103; //9600bps

int i;

unsigned int distance;

DDRB=0x10;

DDRC=0x10;

DDRF=0x10;

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

while(1)

{

TCCR1B=0x03;

PORTE &= ~(1<<TRIG);

_delay_us(10);

PORTE|=(1<<TRIG);

_delay_us(10);

PORTE &= ~(1<<TRIG);

while(!(PINE & (1<<ECHO)))

;

TCNT1 = 0x0000;

while(PINE & (1<<ECHO))

;

TCCR1B = 0x00;

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

tx_char(distance); 

PORTC =0x00;

PORTF =0x00;

if(distance<1)

{   }

else if (distance<200)

{

for(i=0; i<5; i++)

{

PORTB = 0x10;

PORTC =0x10;

_delay_ms(5);

PORTB = 0x00;

_delay_ms(5);

}

}

else if (distance<600)

{

for(i=0; i<50; i++)

{

PORTB = 0x10;

PORTF=0x10;

_delay_ms(1);

PORTB = 0x00;

_delay_ms(1);

}

_delay_ms(100);

}

else if (distance < 1000)

{

for(i=0; i<250; i++)

{

PORTB = 0x10;

_delay_ms(1);

PORTB = 0x00;

_delay_ms(1);

}

_delay_ms(300);

}

else;

}

}


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

댓글 3

조회수 6,598

master님의 댓글

master 작성일

#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#include <stdio.h>
//
#define TRIG 6
#define ECHO 7
#define SOUND_VELOCITY 340UL
//
void tx_char(char d){ while(!(UCSR1A&0x20)); UDR1=d; }
void tx_str(char *s){ while(*s)tx_char(*s++); }
//
int main(void){
  int i; unsigned int distance; char str[50];
  DDRB=0x10; DDRC=0x10; DDRF=0x10; DDRE=((DDRE|(1<<TRIG))& ~(1<<ECHO));
  UCSR1B=8; UBRR1L=103; //9600bps
  while(1){
      PORTE|=(1<<TRIG); _delay_us(10); PORTE &=~(1<<TRIG);
      while(!(PINE&(1<<ECHO))); TCNT1=0; TCCR1B=3;
      while(  PINE&(1<<ECHO));  TCCR1B=0;
      distance=(unsigned int)(SOUND_VELOCITY*(TCNT1*4/2)/1000);
      sprintf(str,"%d cm \r\n",distance); tx_str(str);
      PORTC=0; PORTF=0;
      if(distance<1){}
      else if(distance<200){
        for(i=0;i<5;i++){ PORTB=0x10; PORTC=0x10; _delay_ms(5); PORTB=0; _delay_ms(5); }
      }
      else if(distance<600){
        for(i=0;i<50;i++){ PORTB=0x10; PORTF=0x10; _delay_ms(1); PORTB=0; _delay_ms(1); }
        _delay_ms(100);
      }
      else if(distance<1000){
        for(i=0;i<250;i++){ PORTB=0x10; _delay_ms(1); PORTB=0; _delay_ms(1); }
        _delay_ms(300);
      }
  }
}

17전자님의 댓글

17전자 댓글의 댓글 작성일

정상적으로 출력이됩니다 감사합니다
103cm
203cm
301cm
201cm
101cm 와 같이 여러줄로 출력이 되는데
혹시 한줄로 값이 계속 변하게 출력을 할수 있나요?
앱인벤터 쪽에서 해결을 해야하는건지 코드가 문제인건지 모르겠습니다.

master님의 댓글

master 댓글의 댓글 작성일

sprintf(str,"%d cm \r\n",distance);
뒤에붙은 "\r\n"를 제거하면 옆으로 계속 길게 작성될테니 이 또한 문제가 될 겁니다.
sprintf(str,"%d cm",distance); tx_str(str);
이렇게 변경해서 돌려보시고
//
잘 안되면
앱인벤터 측에서
문자열을 받아서 출력하기 전에
기존에 출력된 값을 삭제하고 출력하도록 수정해보세요

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
질문 atmega128 키패드 입력 오류에 대하여 질문 있습니다.댓글[2] 새글 마프하나 16:07 38
질문 atmega128에서 스위치1개는LED, 스위치 1개는 세그먼트의 동작하게 하려는데.. 새글 aasdw 06:28 34
답변 답변글 답변 : atmega128에서 스위치1개는LED, 스위치 1개는 세그먼트의 동작하게 하려는데..댓글[1] 새글 master 14:09 24
질문 Atmega128 블루투스 오류 질문 새글 yhj2644 01:35 25
답변 답변글 답변 : Atmega128 블루투스 오류 질문 새글 master 13:51 20
질문 atmega128 타이머 작성시 키패트 입력으로 인터럽트 사용에 대하여 질문이 있습니다.댓글[1] 이미지새글 마프하나 22-05-25 37
질문 atmega128 GPS,블루투스 질문드립니다.댓글[1] 코딩초보1 22-05-24 37
질문 Atmega128 UART통신 echo 반복 질문댓글[2] ming2ming 22-05-23 66
질문 atmega128 스톱워치 작성 중 외부 인터럽트 관련 질문 드립니다.댓글[4] 이미지 마프하나 22-05-22 85
답변 답변글 답변 : atmega128 스톱워치 작성 중 외부 인터럽트 관련 질문 드립니다.댓글[1] 이미지 master 22-05-23 63
질문 Atmega128 UART통신에서 ECHO 관련 질문드립니다. dsfdfsa 22-05-22 67
답변 답변글 답변 : Atmega128 UART통신에서 ECHO 관련 질문드립니다.댓글[1] master 22-05-22 46
질문 ATmega128 진동센서 코딩 질문입니다.댓글[5] 444222a 22-05-20 136
질문 atmega128 서보모터와 초음파센서댓글[5] tmiae 22-05-20 159
질문 아두이노 millis ->atmega128에서 사용하고 싶습니다. akmong413 22-05-19 82
답변 답변글 답변 : 아두이노 millis ->atmega128에서 사용하고 싶습니다.댓글[2] master 22-05-19 108
질문 ATMEGA128 TCCR2 = 0X0B가 의미하는것은 무엇인지 궁금합니다. dfas123 22-05-12 169
답변 답변글 답변 : ATMEGA128 TCCR2 = 0X0B가 의미하는것은 무엇인지 궁금합니다.댓글[1] master 22-05-12 191
질문 ATMEGA128 0번핀과1번핀 스위치를 누르면 LED점등 속도 제어댓글[3] dfas123 22-05-11 206
질문 Atmega128 led 왕복 점등 및 스위치 방향 전환댓글[1] MaeuM 22-05-06 359
질문 ATmega128 모터 질문드립니다댓글[6] zzammo 22-05-03 372
질문 Atmega128 led 점등 Eleccc 22-05-01 306
답변 답변글 답변 : Atmega128 led 점등댓글[8] master 22-05-01 407
질문 ATMEGA128 에 MQ-135 질문입니다댓글[4] 학생 22-04-30 322
질문 ATMEGA128 buzzer(스피커) 질문입니다.댓글[4] 이미지첨부파일 XOXO 22-04-29 301
질문 (ATmega128 LED점등)이 부분이 왜 오류가 뜨는건가요?댓글[3] 이미지첨부파일 isdpolicy 22-04-29 295
질문 Atmega128 UART 통신 관련 질문입니다.댓글[3] 현화 22-04-28 282
질문 ATmega128 lcd 관련 질문 있습니다.댓글[1] 첨부파일 순머 22-04-27 332
질문 Atmega128 공부중에 질문 있습니다댓글[4] 겔젠키르헨 22-04-27 280
질문 ATMEGA128 CTC MODE 모터조종 질문입니다댓글[2] 킹드나인 22-04-18 161
게시물 검색

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