센서 > AVRStudio 초음파센서 4개 측정

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

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


BASIC4MCU | 센서 | 초음파센서 | AVRStudio 초음파센서 4개 측정

페이지 정보

작성자 키트 작성일2017-08-23 15:02 조회1,653회 댓글4건

본문

//
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>


//
#define Trig1_ON PORTB|=1 //트리거1
#define Trig2_ON PORTB|=2 //트리거2
#define Trig3_ON PORTB|=4 //트리거3
#define Trig4_ON PORTB|=8 //트리거4
//
#define Trig1_OFF PORTB&=~1 //트리거1
#define Trig2_OFF PORTB&=~2 //트리거2
#define Trig3_OFF PORTB&=~4 //트리거3
#define Trig4_OFF PORTB&=~8 //트리거4
//
char s[30];
unsigned int range_I, range[4];
float range_F;
//
char temp[3]={'0','0','0'};
//
void getEcho(int ch){ // ch=0~3
    while(!(PINB&(0x40<<ch)));  // Wait for echo pin to go high
    TCNT1=0x00; TCCR1B=0x02;    // 1:8 prescaler = 0.5us
    while(PINB&(0x40<<ch));     // Wait for echo pin to go low
    TCCR1B=0x08; range_I=TCNT1; // the range in CM
    range_F=(float)range_I;
    range_F/=11.6; // mm
    range[ch]=(unsigned int)range_F; // range[ch]에 저장
}
//

//
int main(void){
    DDRA = 0xc0;
    DDRC = 0xff;

    DDRB=0x0F;  // PB0~3 ouput Trigger, PB4~7 input Echo

    TCCR1B=0x08;  // Set timer up in CTC mode
    _delay_ms(100);
//    init(); // lcd 초기화 함수
    while(1){    
        _delay_ms(25); Trig1_ON; _delay_us(10); Trig1_OFF; getEcho(0);
        _delay_ms(25); Trig2_ON; _delay_us(10); Trig2_OFF; getEcho(1);
        _delay_ms(25); Trig3_ON; _delay_us(10); Trig3_OFF; getEcho(2);
        _delay_ms(25); Trig4_ON; _delay_us(10); Trig4_OFF; getEcho(3);
        //
        sprintf(temp,"%3d %3d %3d %3d",range[0],range[1],range[2],range[3]);
        //
//        lcd_inst(0x01);  _delay_ms(10);
//        lcd_strout(0x00+i,temp[i]); // lcd 문자열 함수 이름으로 바꾸세요
    }
}

 

 

LCD 함수는 사용 중인 것으로 추가 하시기 바랍니다.

댓글 4

조회수 1,653

망고님의 댓글

망고작성일

안녕하세요~ 제가 이 코드를 사용해서 4개 돌리고 lcd에 출력하려고 하는데 동작이 안 돼서요ㅠㅠ
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo13&wr_id=46 여기에 올려주신 맨 마지막 코드는 잘 동작하는데 여러개 일 때 동작을 안 하네요ㅠ
혹시 뭐가 문제일까요? 저는 hc-sr04 초음파센서를 사용하고 있는데 이 코드는 다른 초음파센서를 위한 코드일까요?

master님의 댓글

master작성일

while(!(PINB&(0x10<<ch)));  // 0x10으로 수정
TCNT1=0x00; TCCR1B=0x02; 
while(PINB&(0x10<<ch));    // 0x10으로 수정

master님의 댓글

master작성일

_delay_ms(25);
측정값이 오락가락하는 경우에는 딜레이를 100으로 좀 더 주세요

망고님의 댓글

망고댓글의 댓글작성일

정말 감사합니다! 잘 작동합니다ㅎㅎ

센서HOME > 센서 > 전체 목록

게시물 검색

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