У меня есть датчик движения и близости, подключенный к малине pi. То, что я хочу сделать, - это когда датчик движения обнаруживает движение, он получает показание от датчика приближения, чтобы увидеть, насколько близко человек ... когда человек попадает на определенное расстояние, отображается сообщение.Raspberry pi обнаружение близости nodejs
Датчик движения срабатывает, и я получаю считывание с датчика приближения, однако датчик приближения попадает в петлю, и значение никогда не обновляется (даже если кто-то прямо на нем).
движение:
import gpio from 'gpio';
import proximity from './proximity';
const gpio4 = gpio.export(4, {
direction: 'in',
});
// bind to the "change" event
gpio4.on('change', (val) => {
// value will report either 1 or 0 (number) when the value changes
if (val === 1) {
console.log('checking proximity');
proximity.getDistance();
}
});
близость:
import gpio from 'gpio';
// pin 38 GPIO 20 - for trigger
const trig = gpio.export(38, {
direction: 'out'
});
// pin 37 GPIO 26 - for echo
const echo = gpio.export(37, {
direction: 'in'
});
function getDistance() {
const speedSound = 34000;
// resetting trigger
trig.set(0);
setTimeout(500);
console.log("initial trig value (0): " + trig.value); // should be 0
responsiveVoice.speak('');
const timestamp = moment().add(30, 's');
let start = 0;
let end = 0;
trig.set();
setTimeout(10);
trig.set(0);
while (echo.value === 0) {
start = new Date().getTime()/1000;
console.log('Echo is ' + echo.value);
}
while (echo.value === 1) {
end = new Date().getTime()/1000;
console.log('Echo is ' + echo.value);
let timeDiff = end - start;
let distance = (timeDiff * speedSound)/2;
console.log('Distance = ' + distance);
if (distance < 60) {
console.log('User is within 2 ft. Enable voice');
return true;
} else {
return false;
}
}
}
module.exports = {
getDistance
};
Что мне нужно сделать, чтобы получить это работает правильно, не застревая в бесконечном цикле?
Что такое эхо. стоимость? Я уверен, что вы застряли в одном из них, когда петли. Как echo.value изменяется от 0 до 1 и наоборот? –
@HamiltonLucas, если датчик приближения обнаруживает что-то echo.value = 1, если нет, то это 0. Я основываю код на этом коде python: http://www.raspberrypi-spy.co.uk/2012/12/ultrasasonic-distance-measurement-using-python-part-1/если я начинаю с ничего перед датчиком, я получаю echo.value = 0, и он застревает в этом цикле, даже когда я что-то перемещаю, наоборот, если я начну с чего-то перед ним, я получаю echo.value = 1, и когда я отвожу его от датчика, он все еще застревает в этом цикле. – erichardson30
Для начала это не делает ничего полезного и, вероятно, не того, что вы хотите : 'setTimeout (500);'. Это не ждет 500 мс, прежде чем продолжить. Фактически, он ничего не делает. Первый аргумент для 'setTimeout()' - это функция, которая будет называться в будущем. Второй аргумент - это время ожидания перед вызовом этой функции. Следующая строка кода после 'setTimeout()' выполняется немедленно. Он не ждет значения тайм-аута. – jfriend00