BASIC4MCU | 질문게시판 | 답변 : 적외선 센서 코딩
페이지 정보
작성자 master 작성일2020-06-14 07:47 조회210,600회 댓글20건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2020-06-14 오전 7:52:40// by Ok-Hyun Park//#define F_CPU 16000000UL#include <avr/io.h>#include <util/delay.h>#include <stdio.h>//void TX0_char(char d){ while(!(UCSR0A&0x20)); UDR0=d; }void TX0_str(char *s){ while(*s)TX0_char(*s++); }//int main(){char str[100];int a;float distance;ADCSRA=0xE7;UCSR0B=0x18; UBRR0L=51; // 19200while(1){_delay_ms(300);a=ADC;distance=12343.85*pow(a,-1.15);sprintf(str,"ADC:%d, distance:%.2f \r\n",(double)distance);TX0_str(str);}}
ADC값을 같이 표시해서 연산에 문제가 있는지
아니면 ADC값이 제대로 읽혀지지 않는지 체크하세요
댓글 20
조회수 210,600master님의 댓글
master 작성일
#include <stdio.h>
헤더파일 추가
//
delay_us(125); // _delay_us(125); // ADC변환준비시간(125uS)
딜레이 함수명 변경
//
distance = 12343.85*pow(ADCW,-1.15); //distance = 12343.85*pow(ADC,-1.15); // ADC 10bit 데이터를 cm 단위로 변환
ADC 대신 ADCW 사용
jinh님의 댓글
jinh 작성일적외선 센서로 감지하고 신호 출력만 할건데 따로 추가나 수정할 부분 없어 보이시나요?
master님의 댓글
master
해보고 문제가 발생하면 질문글을 작성해주세요
jinh님의 댓글
jinh 작성일컴파일을 진행하니 POW 선언이 안되서 그런건지 에러매세지가 출력됩니다. 무슨 문제인지 알수있으신가요?
master님의 댓글
master
POW() 함수는
#include <math.h>
헤더파일 선언이 되어 있어야 할 것입니다.
jinh님의 댓글
jinh 작성일아 감사합니다 오류나면 추가로 문의할게요.
jinh님의 댓글
jinh 작성일
위에 소스에서 헤더파일 #include <math.h> 추가하고 컴파일을 하니 이제 데이터를 cm변환, 15cm접근시 동작 소스에서 에러가 나오는데
위에 소스에 적외선센서 범위 10~80cm안에 오면 동작시킬려고 하면 추가해야되는 소스가 있을까요?
master님의 댓글
master
소스가 어떻게 작성 되어 있는지 모르겠지만
sprintf() 이 함수를 사용하려면
#include <stdio.h> 추가하세요
jinh님의 댓글
jinh 작성일제가 스튜디오를 안쓰고 코드비전을 사용하는데 헤더가 스튜디오가 필요한가요?
master님의 댓글
master
컴파일러에 상관없이 sprintf() 이 함수를 사용하려면 #include <stdio.h> 추가하세요
jinh님의 댓글
jinh 작성일위댓글에 달린 소스에서 적외선 센서 범위에 들어오면 작동하는게 어려워서 질문을 다시합니다.
master님의 댓글
master
if (distance <= 15) Warning(); // 15cm 이하로 접근할 경우 동작.
이미 센서 범위에 들어오면 워닝 함수를 실행 하도록 코드를 작성 하셨는데요?
워닝 함수는 질문 소스에 보이지 않으니 만들든지, 워닝함수 대신 다른 코드를 넣으셔야겠습니다만...
jinh님의 댓글
jinh 작성일
정말 답해주셔서 감사합니다. ㅠㅠ
마지막으로 하나 더 질문좀 할려고 합니다.
접근할 때 동작하는 코딩 부분에 워닝함수는 어떻게 작성하는지 알수있을까요.
만약에 워닝함수가 안된다고 하면 다른코드는 어떤걸 써야되는지도 궁금합니다.
master님의 댓글
master 작성일
void Warning(){ // 워닝함수는 메인함수 위에 선언해서 원하는 코드를 함수 내에 작성하면 됩니다.
}
void main(){
master님의 댓글
master 작성일
if (distance <= 15){ // Warning(); // 15cm 이하로 접근할 경우 동작.
코드를 여기에 작성합니다.
}
워닝함수를 사용하지 않고 코드를 작성하는 것은 위처럼 합니다.
jinh님의 댓글
jinh 작성일워닝함수를 이용하면 메인함수 위에 for문으로 작성하는건지, 만약 워닝함수를 이용하지 않게되면 워닝괄호에 for문을 넣게되는건지 궁금합니다. 따로 0,1을 안넣고 사용하는지도 궁금합니다.
jinh님의 댓글
jinh 작성일그리고 괄호안에 들어갈만한 예제가 있을까요
master님의 댓글
master
제가 도와드릴만큼의 실력을 먼저 갖추셔야 합니다.
c언어 문법부터 알려드리려면 반년 정도는 과외를 받으셔야 합니다.
기간과 비용이 허락한다면 말이죠...
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo6&wr_id=63
이런 강좌글을 보면서 혼자서 공부하는 방법도 있습니다.
물론 서적과 웹에도 쉬운 강좌글은 얼마든지 있습니다.
혼자서 공부하는 것이 가장 효율이 높습니다.
jinh님의 댓글
jinh 작성일아 그렇군요 따로 어떤 소스를 이용해야될지 잘 안나와서 문의드렸습니다. 기본 소스는 이용할줄 아는데 저기에 어떤 소스가 들어가는게 헷갈리네요.
master님의 댓글
master
많은 예제를 학습해야지 응용이 가능하게 됩니다.
지금 질문은 알파벳은 외웠는데 외국인과 간단한 인사를 어떻게 해야 하는지 묻는 것과 같습니다.