====== @amperka/multiservo ====== Модуль для работы с [[amp>product/arduino-multiservo-shield|Multiservo Shield]]. Библиотека позволяет управлять привычными сервомоторами с интерфейсом PDM (Pulse Duration Modulation) двух видов: * Сервоприводы с удержанием угла * Сервоприводы постоянного вращения // Настраиваем шину I2C PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000}); // Создаем новый объект MultiServo var mServo = require('@amperka/multiservo').connect(PrimaryI2C); // Создаем новый объект сервопривода, подключенны к пину 0 шилда var s0 = mServo.connect(0); // Устанавливаем привод на угол 0 s0.write(0); setTimeout(function(){ // Устанавливаем привод на угол 90 s0.write(90); setTimeout(function(){ // Устанавливаем привод на угол 180 s0.write(180); }, 2000); }, 2000); func:: connect([i2c]) Возвращает новый объект ''MultiServo'' для работы с шилдом, взаимодействующим по шине ''i2c''. Если параметр ''i2c'' не передан, используется ''PrimaryI2C''. class:: MultiServo Класс для работы с моторшилдом. Имеет один метод ''connect'' для инициализации. meth:: connect(pin[, opts]) Возвращает экземпляр объекта''MultiServoDevice'' для взаимодействия с сервоприводом на разъеме ''pin''. Параметр ''opts''задаёт характеристики сервопривода. Ожидается объект с полями: * ''pulseMin'' — минимальная поддерживаемая приводом длина импульса в миллисекундах. * ''pulseMax'' — максимальная поддерживаемая приводом длина импульса в миллисекундах. * ''valueMin'' — значение для метода ''[[#write|write]]'', соответствующее минимальной длине импульса. * ''valueMax'' — значение для метода ''[[#write|write]]'', соответствующее максимальной длине импульса. Если какие-либо поля не определены или объект ''opts'' вовсе не передан, используются значения по умолчанию. Будьте аккуратны с заданием длины импульсов. Выход за пределы длины, поддерживаемой сервоприводом может привести к его выгоранию. * Для сервоприводов, которые удерживают угол, используйте ''valueMin'' и ''valueMax'' для определения граничных значений поворота вала в градусах. * Для сервомоторов постоянного вращения в ''valueMin'' и ''valueMax'' удобно задавать условные величины ''-1'' и ''1'' или известную из характеристик привода угловую скорость. // Настраиваем шину I2C PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000}); // Создаем новый объект MultiServo var mServo = require('@amperka/multiservo').connect(PrimaryI2C); // Создаем новый объект сервопривода, подключенны к // разъему 0 шилда var s0 = mServo.connect(0, //добавим изменения в пределы {pulseMin: 0.500, pulseMax: 2.500}); // Устанавливаем привод на угол 0 s0.write(0); setTimeout(function(){ // Устанавливаем привод на угол 90 s0.write(180); setTimeout(function(){ // Устанавливаем привод на угол 180 s0.write(0); }, 2000); }, 2000); class:: MultiservoDevice Класс для работы с сервоприводом, создаваемый методом ''connect'' объекта ''Multiservo''. meth:: Servo.write(value[, units]) Устанавливает угол сервопривода в значение ''value'', заданное в единицах ''units''. В качестве ''units'' принимаются значения: * ''"ms"'' — длина пульса в миллисекундах. * ''"us"'' — длина пульса в микросекундах. * не задано — значение в условных единицах в диапазоне [''valueMin''; ''valueMax'']. // Настраиваем шину I2C PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000}); // Создаем новый объект MultiServo var mServo = require('@amperka/multiservo').connect(PrimaryI2C); // Создаем новый объект сервопривода, подключенны к разъему 0 шилда var s0 = mServo.connect(0); s0.write(120); s0.write(900, 'us'); s0.write(1.15, 'ms'); meth:: Servo.release() Отпускает сервопривод. После отключения вал сервопривода вращается свободно под действием внешних сил. // Настраиваем шину I2C PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000}); // Создаем новый объект MultiServo var mServo = require('@amperka/multiservo').connect(PrimaryI2C); // Создаем новый объект MultiServoDevice, подключенный к разъему 0 шилда var s0 = mServo.connect(0); // Устанавливаем привод на угол 90 s0.write(90); setTimeout(function() { // Отпускаем сервопривод через 5 секунд s0.release(); setTimeout(function() { // Еще через 5 секунд устанавливаем привод на угол 180 s0.write(180); }, 5000); }, 5000);