照度センサで筋トレを実施した回数を取得しています。 照度センサで明るさによる電圧の変化を取得し、一定の値で電圧が変化した場合筋トレ1回を実施したとみなしてカウントしています。 私の実行環境では、通常時の電圧は約0.4V。筋トレを実施して暗くなった際は0.1~Vだったので、0.2V以下を筋トレ実施のラインとしています。
照度センサの計測に変化がない間はブザーを鳴らす間隔を広げています。 最初は5000ms間隔からスタートし、筋トレがきつくて回数に変化がない場合1000ms広げています。 最初は、「setinterval」関数による間隔を変数で制御して広げようとしたのですが、「setinterval」関数の間隔は最初の値からの変更を受け付けていなかったため、「setTimeout」関数で毎回処理を停止させながら、変数による間隔制御を行えるようにいたしました。(一番苦労しました。。)
const Obniz = require('obniz');
const obniz = new Obniz('自分のobnizID');
let timer = 5000;
let count = 0;
let shisyo_CK = 0;
const sleep = (msec) => new Promise(res => setTimeout(res, msec));
obniz.onconnect = async function () {
const speaker = obniz.wired('Speaker', { signal: 10, gnd: 11 });
obniz.io0.output(true); // io0電圧を5Vに(電源+)
obniz.io2.output(false); // io2電圧を0Vに(電源−)
async function shisyo(){
speaker.play(1000); await sleep(300); speaker.stop();
var voltage = await obniz.ad1.getWait();
console.log(`changed to ${voltage} v`);
shisyo_CK += timer;
if (voltage < 0.2){
count += 1;
shisyo_CK = 0;
console.log(count);
}
if (shisyo_CK > timer){
timer += 1000;
console.log(timer);
}
setTimeout (shisyo, timer);
}
shisyo();
}