Noobish here。重複調用嵌入在init函數中的函數
我正在建設覆盆子pi項目,每5分鐘測量一個水箱的深度。我已經在坦克中放置了一個超聲波距離測量儀,並且已經使用節點和r-pi-usonic庫運行了所有的程序。我可以對超聲波設備進行初始調用,以創建平均10個單獨的度量(因爲各個度量的變化)並將其記錄到控制檯。
但我想要做的是每5分鐘重複一次。我最初嘗試通過設置setInterval()來完成此操作,並嘗試使用cron。但是,隨着查詢循環在init函數捆綁起來,它引發以下錯誤......
timers.js:274
callback.apply(this, args);
^
TypeError: Cannot read property 'apply' of undefined
at wrapper [as _onTimeout] (timers.js:274:13)
at Timer.listOnTimeout (timers.js:119:15)
所以我的問題是真的是什麼讓這個運行查詢每5分鐘的最佳方式?答案無疑會幫助我理解回調等。對不起,這樣的傻瓜!
我的代碼在這裏,爲它的廢話道歉!
//Import required modules
var usonic = require('r-pi-usonic');
console.log('starting water tank monitor');
var min_tank = 30
var max_tank = 90
var tank_percent = 0
usonic.init(function (error) {
if (error) {
console.log('Error')
} else {
var sensor = usonic.createSensor(13, 21, 1000);
var i = 0
var values = 0
function myLoop(){
setTimeout(function() {
var v = sensor().toFixed(2) ;
values = values+parseFloat(v);
i++;
if (i < 10) {
myLoop();
} else {
value = (values/10).toFixed(2)
tank_percent = 100 -((value - min_tank)/ (max_tank - min_tank) * 100)
console.log(tank_percent);
i = 0;
values = 0;
}
}, 500)
};
setInterval (myLoop(), 30000);
}
});
謝謝 - 我的字面意思是要在一塊石頭下爬行,永遠不會再出來 – user2870492