BASIC4MCU | 질문게시판 | 아두이노 외부에서 입력되는 펄스를 통해 시간구하기
페이지 정보
작성자 dnener 작성일2021-07-04 21:08 조회20,846회 댓글6건본문
int freq = 1000000 / (pulseIn(pulse_pin,HIGH)+pulseIn(pulse_pin,LOW));
int msec= (1/freq)*100;
count += msec;
delayMicroseconds(10);
print(count);
현재 이렇게 카운트가 되게 하고있습니다 그러나 여기에서 10msec 로 시간을 조정을하고싶은데
int freq = 10000 / (pulseIn(pulse_pin,HIGH)+pulseIn(pulse_pin,LOW));
int msec= (1/freq)*10;
count += msec;
delayMicroseconds(10);
print(count);
이렇게 바꾸면 카운트가 1씩오르다가 10씩오르더라구요...
10msec 로 유지하면서 카운트가 1씩 오르게끔 하고싶습니다ㅠㅠ
댓글 6
조회수 20,846master님의 댓글
master 작성일
pulseIn()함수는 us 단위입니다.
int freq = 1000000 / (pulseIn(pulse_pin,HIGH)+pulseIn(pulse_pin,LOW));
freq는 sec 단위라서 1000000을 사용한 것이고요
int msec= (1/freq)*100;
주파수를 주기로 변경하기 위해서 1/freq 역수를 취하고 있습니다.
1000을 곱하지 않고 100을 곱한 것이 10ms 단위인 것으로 보이므로 수정 할 필요가 없었을 것으로 생각 됩니다.
master님의 댓글
master 작성일
역수를 두번이나 취하면
역수를 취하지 않는 것과 동일하죠
int msec=(pulseIn(pulse_pin,HIGH)+pulseIn(pulse_pin,LOW))/1000; count+=msec; print(count);
1ms 단위는 위처럼 처리하면 됩니다. ( us/1000=ms)
int ms10=(pulseIn(pulse_pin,HIGH)+pulseIn(pulse_pin,LOW))/10000; count+=ms10; print(count);
10ms 단위는 us값을 10000으로 나눠주면 됩니다.
dnener님의 댓글
dnener
10ms는 1s 보다 훨씬 빨라야하는거 아닌가요??
master님의 댓글
master
훨씬..이라는 추상적인 표현보다 정확하게 100배 빠르다고 표현하는 것이 좋겠죠
dnener님의 댓글
dnener
아하...
혹시 현재 int freq = 1000000 / (pulseIn(pulse_pin,HIGH)+pulseIn(pulse_pin,LOW)); 이 값에 들어오는 pulse_pin의 값이 100Hz 펄스를 입력받아서 10msec 기준으로 잡으려고하는데...
그러면 int freq = 1000000 * 1000000 / (pulseIn(pulse_pin,HIGH)+pulseIn(pulse_pin,LOW)); 를 하면 100이 나오므로 = 1000000*100*10^-6 = 100
int msec = (1/freq) 를 하면 0.01 이 나오므로 10msec 가 되는건가요 ?? = 1/100 = 0.01
master님의 댓글
master
int ms10=(pulseIn(pulse_pin,HIGH)+pulseIn(pulse_pin,LOW))/10000;
count+=ms10;
print(count);
설명도 해드렸고
코드도 작성 해드렸는데
이해 하려고 하지 않고 어째서 질문이 계속 될까요?