Потенциометр подключался в эксперименте №5 Код (Javascript): var pot = require('@amperka/pot') .connect(A0); var x = pot.read(); Х - будет принимать значения от 0 до 1. А дальше математика и правильно поставленная задача можно уменьшить текущее расстояние срабатывания на какую-то величину Код (Javascript): var sonic = require('@amperka/ultrasonic') .connect({trigPin: P10, echoPin: P11}); var buzzer = require('@amperka/buzzer') .connect(P5) .frequency(440); setInterval(function() { x = pot.read(); sonic.ping(function(err, val) { if (val < 5-(5*х)) { buzzer.turnOn(); } else if (val < 20-(5*х)) { buzzer.beep(0.1, 0.1); } else if (val < 50-(5*х)) { buzzer.beep(0.2, 0.2); } else { buzzer.turnOff(); } }, 'cm'); }, 100); Можно увеличивать Код (Javascript): var sonic = require('@amperka/ultrasonic') .connect({trigPin: P10, echoPin: P11}); var buzzer = require('@amperka/buzzer') .connect(P5) .frequency(440); setInterval(function() { x = pot.read(); sonic.ping(function(err, val) { if (val < 5+(5*х)) { buzzer.turnOn(); } else if (val < 20+(5*х)) { buzzer.beep(0.1, 0.1); } else if (val < 50+(5*х)) { buzzer.beep(0.2, 0.2); } else { buzzer.turnOff(); } }, 'cm'); }, 100); или абсолютное значение Код (Javascript): var sonic = require('@amperka/ultrasonic') .connect({trigPin: P10, echoPin: P11}); var buzzer = require('@amperka/buzzer') .connect(P5) .frequency(440); setInterval(function() { x = pot.read(); sonic.ping(function(err, val) { if (val < 5*х) { buzzer.turnOn(); } else if (val < 20*х) { buzzer.beep(0.1, 0.1); } else if (val < 50*х) { buzzer.beep(0.2, 0.2); } else { buzzer.turnOff(); } }, 'cm'); }, 100);
Сегодня не было достаточно времени сидеть с сыном и разбирать задание. По этому, предвидя, что будут вопросы оставил такой текст. Он его выполнил)) Надеюсь что он и вам поможет понять задачу если остались какие-то вопросы, решив его вы сможете усовершенствовать и дополнить программу уже самостоятельно. Trem в предыдущем посте привел пример решения. Я его дополняю лишь комментариями к программе которые помогли моему ребенку лучше разобраться. Код (Java): // Попробуем решить эту задачу. Но с начала предлагаю разобраться с примером // копируем ультразвуковой датчик созданный разработчиками амперки // require('@amperka/ultrasonic') // в нашу программу и назовем его sonic var sonic = require('@amperka/ultrasonic').connect({trigPin: P10, echoPin: P11}); // копируем пищалку в нашу программу // указываем порт к которому мы ее подсоединили - .connect(P5) // и устанавливаем звучание по умолчанию 440 герц - .frequency(440); var buzzer = require('@amperka/buzzer').connect(P5).frequency(440); // Далее функция setInterval поможет нам периодически отдавать задания нашей плате - это первый параметр, // а частоту с которой мы будем спрашивать выполнение задания записываем в самом конце 100 - второй параметр // setInterval (function(){первый параметр}, второй параметр) setInterval(function() { sonic.ping(function(err, val) { //слушаем что нам говорит ультразвуковой датчик, а говорит он об ошибках либо сообщает расстояние до объекта if (val < 5) { //если расстояние до препятствия меньше 5 см buzzer.turnOn(); //5 см - практически авария включаем пищалку на полную } else if (val < 20) { //если расстояние до препятствия меньше 20 см buzzer.beep(0.1, 0.1); //достаточно близко к препятствию - пищим активнее } else if (val < 50) { //если расстояние до препятствия меньше 50 см buzzer.beep(0.2, 0.2); //50 см не так опасно поэтому пищим не часто, так предупредительно попискиваем } else { //Что ж если все предыдущие условия не выполняются то есть расстояние до препятствия более 50 см, buzzer.turnOff(); //панику поднимать не будем, просто выключим динамик } }, 'cm'); }, 100); // Что ж перечитаем еще раз дополнительное задание и подумаем что нам надо добавить/изменить в программе var sonic = require('@amperka/ultrasonic').connect({trigPin: P10, echoPin: P11}); var buzzer = require('@amperka/buzzer').connect(P5).frequency(440); // полагаю что здесь нам необходимо будет добавить наше новое устройство (потенциометр) в программу setInterval(function() { // полагаю что нам необходимо завести переменную в которую мы будем записывать наше "расстояние срабатывания" // и конечно же эта переменная должна учитывать значения поворота ручки потенциометра, ведь им будем регулировать это расстояние // подобное было в задании №10 Пантограф, только в нем мы изменяли значение поворота мотора sonic.ping(function(err, val) { if (val < 5) { buzzer.turnOn(); } else if (val < 20) { buzzer.beep(0.1, 0.1); } else if (val < /* расстояние начала срабатывания */) { // в примере в этом месте мы начинали нашу панику о приближении к препятствию buzzer.beep(0.2, 0.2); } else { buzzer.turnOff(); } }, 'cm'); }, 100);
Аккуратно, чтобы не измазаться о предыдущий пост замечу следующее. Ультрасоник имеет минимальное и максимальное расстояние для измерения. Можно предположить, что применение потенциометра имеет смысл тогда, когда крайние положенияя крутилки перекрывают весь диапазон измерения.
Дельное дополнение. Это расстояние от 2х см до 4 метров. Мы это уточнение использовали когда в дальнейшем усовершенствовали код. Еще можно для большей явности менять тональность динамика на разных расстояниях. Верю что завтра автор поста разберется со всем и проведет свои собственные эксперименты.
Спасибо за помощь! Я поигрался с потенциометром, понял суть, в основном брал значения как у Trem'а и менял постоянно. Робо Папе спасибо за пояснения, стало легче понимать программу.