Izumi0711
@Izumi0711

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

obnizで繰り返し実行を押した後に、Errorで止まってしまうので、 繰り返し実行をし続けたい

解決したいこと

Javascryptでobnizで一定の距離が開いたらスピーカーが鳴るIoTを作成しています。
実装中に途中までは正常に動くのですが、
どうしても途中で止まってしまいます。
解決方法を教えていただけると嬉しいです。

発生している問題・エラー

PS C:\Users\Desktop\Obniz-iot> node distance.js
distance 32.00072604508428 mm
distance 28.08574360339843 mm
distance 144.343700458678 mm
distance 237.45219591964127 mm
distance 181.45092534074377 mm
distance 63.83123546226917 mm
distance 66.04405162496114 mm
C:\Users\Echas\Desktop\Obniz-iot\node_modules\obniz\dist\src\obniz\ObnizConnection.js:378
                        throw err;
                        ^

Error: No More pwm Available.
    at Obniz._getFreePeripheralUnit (C:\Users\Echas\Desktop\Obniz-iot\node_modules\obniz\dist\src\obniz\ObnizComponents.js:322:15)
    at Obniz.getFreePwm (C:\Users\Desktop\Obniz-iot\node_modules\obniz\dist\src\obniz\ObnizComponents.js:84:21)
    at Speaker.wired (C:\Users\Desktop\Obniz-iot\node_modules\obniz\dist\src\parts\Sound\Speaker\index.js:20:26)
    at Obniz.wired (C:\Users\Desktop\Obniz-iot\node_modules\obniz\dist\src\obniz\ObnizParts.js:103:15)
    at C:\Users\Desktop\Obniz-iot\distance.js:10:25
    at callback (C:\Users\Desktop\Obniz-iot\node_modules\obniz\dist\src\parts\DistanceSensor\HC-SR04\index.js:64:21)
    at Obniz._runUserCreatedFunction (C:\Users\Desktop\Obniz-iot\node_modules\obniz\dist\src\obniz\ObnizConnection.js:374:23)
    at C:\Users\Desktop\Obniz-iot\node_modules\obniz\dist\src\obniz\libs\measurements\measure.js:85:28
    at ObnizMeasure.notifyFromObniz (C:\Users\Desktop\Obniz-iot\node_modules\obniz\dist\src\obniz\libs\ComponentAbstact.js:46:21)
    at Obniz._notifyToModule (C:\Users\Desktop\Obniz-iot\node_modules\obniz\dist\src\obniz\ObnizComponents.js:271:37)

7回ほど処理を実行した後に処理が止まってしまいます。

該当するソースコード

const Obniz = require('obniz');
const obniz = new Obniz('xxxx-xxxx'); // Obniz_IDに自分のIDを入れます

obniz.onconnect = async function () {
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    setInterval(async function(){
    hcsr04.measure(function( distance ){
  console.log("distance " + distance + " mm")

  const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });

  if (distance > 200) {
    speaker.play(1000);
  } else {
    speaker.stop();
  }
})
}, 1000);
}

自分で試したこと

こちらを参考にobniz.onloop も試したのですが、
7回で同じエラーが出て止まってしまいました。

PWMに何かヒントがある気がするのですが、
これがどうエラーに繋がっているかまでは分かりませんでした。

どなたかご教示いただけますと幸いです。
よろしくお願いします。

0

2Answer

恐らく、obnizにはPWMが6つしかないところ
ループの中で7つめのスピーカーを追加しようとしたところで
No More pwm Available(これ以上のpwmは利用できません)
というエラーが出ているのだと思います。

下記のようにスピーカーの宣言をsetIntervalの外に出したらどうなりますかね?
(動作未確認)

const Obniz = require('obniz');
const obniz = new Obniz('xxxx-xxxx'); // Obniz_IDに自分のIDを入れます

obniz.onconnect = async function () {
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
+  const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });
    setInterval(async function(){
    hcsr04.measure(function( distance ){
  console.log("distance " + distance + " mm")

-  const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });

  if (distance > 200) {
    speaker.play(1000);
  } else {
    speaker.stop();
  }
})
}, 1000);
}
1Like

PWMの仕組みの説明から、解決方法までご教授いただき、ありがとうございます!!
スピーカーの宣言をsetIntervalの外に出したら、無事にエラーが出ずに動き続けることができました!!
はじめてのobniz作成で、自分のつくりたい!!と思ったことができて、本当に嬉しいです!
ありがとうございます!!!

0Like

Your answer might help someone💌