// Подключаем сервопривод к пину 9 через библиотеку Servo var servo = require("@amperka/servo").connect(P9); // Подключаем сервопривод к пину A5 для считывания данных угла поворота var sensor = require('@amperka/pot').connect(A5); // Переменная для хранения ID анимации var idAnimServo; // Создаём объект анимации // для плавного изменения параметров вращения мотора var animServo = require("@amperka/animation") .create({ // Начальное значение в градусах from: 0, // Конечное значение в градусах to: 180, // Продолжительность полного перехода // за 3 секунд мотор пройдёт диапазон значений от 0 до 180 duration: 3, // Шаг обновления: каждые 20 мс updateInterval: 0.02, }) .queue({ // Начальное значение в градусах from: 180, // Конечное значение в градусах to: 0, // Продолжительность полного перехода // за 3 секунд мотор пройдёт диапазон значений от 180 до 0 duration: 3, }); // Запускаем анимацию idAnimServo = animServo.play(); // Обработчик анимации animServo.on("update", function (val) { servo.write(val); // Если анимация закончилась, // Запускаем её повторно if (idAnimServo._intervalID == null) { idAnimServo = animServo.play(); } }); // Каждые 100 мс // Считываем и выводим текущий угол сервопривода setInterval(function() { value = sensor.read(); valueAngle = map(value, 0.11, 0.70, 0, 180); console.log('Servo value =', Math.round(valueAngle), 'degrees'); }, 100); // Функция преобразования одного диапазона в другой function map(x, minIn, maxIn, minOut, maxOut) { return (x - minIn) * (maxOut - minOut) / (maxIn - minIn) + minOut; }