目的
シェフの気まぐれ
内部タイマーを使いusでオン時間を測る
工夫点 1000の割り算
1000/15=66
66*1.5=100
100,000/1024=97.65625
97.65625*1.024=100
97.65625*0.024=2.234375
97.65625+2.234375=100
97*32/1024=3.03125
97+3=100
結果
The time taken was 84 seconds
The time taken was 84546 seconds
The time taken was 84589 seconds
The time taken was 84590 seconds
The time taken was 84566 seconds
The time taken was 84623 seconds
The time taken was 84557 seconds
The time taken was 84592 seconds
The time taken was 84583 seconds
The time taken was 84580 seconds
The time taken was 84586 seconds
The time taken was 84583 seconds
The time taken was 84598 seconds
The time taken was 84578 seconds
The time taken was 84557 seconds
The time taken was 84 seconds
The time taken was 84577 seconds
The time taken The time taken was 84587 seconds
The time taken was 84 seconds
The time taken was 84576 seconds
The time taken was 84 seconds
The time taken was 84616 seconds
The time taken was 84 seconds
参考
Timer - タイマー時間
#include "mbed.h"
//10の割り算 0から1028までは、正しい。主に0から999
#define DVI10(n) ((n*205)>>11)
//1000の割り算 だいたい正しい
#define DVI1000(n) ((n>>10)+(((n>>10)*32)>>10))
#define HIGH 1
DigitalIn in1(A0);
//タイマーの設定
Timer t;
//in1のオン時間をusで測る 今のところ引数は、無効
int pulseIn(int pin1,int pu1,int timeout1)
{
while(in1 == 0) {}
t.start();
while(in1 != 0) {}
t.stop();
return(t.read_us());
}//pulseIn
int main() {
int pwmco2;
//PWMでデータ取得
pwmco2=pulseIn(7 ,HIGH,2000000);
printf("The time taken was %d seconds\r\n", pwmco2 );
printf("The time taken was %d seconds\r\n", DVI1000(pwmco2) );
}//main