Вот пример реализации “медленный ШИМ”:
//12_27_slow_PWM.js
//Имя виртуального устройства
var nameDevicePWM = "testPWM";
//Определим обект для виртуального устройства
var virt_device_params = {
cells: { }
};
//Установим имя виртуальнго устройства
virt_device_params.title = nameDevicePWM;
//Описываем функцию.
function slowPWM_generator(namePWM, devicePWM, maxValue, periodPWM){
//Добавляем в объект элементы управления
virt_device_params.cells[namePWM] = {"type": "range", "value" : 0};
virt_device_params.cells[namePWM].max = maxValue;
//Создаем таймер для канала.
this[namePWM+"_IntervalID"] = setInterval(function () {
//Тут Включим канал, если значение контрола виртуального устройства не 0
log.debug("timer for", namePWM, "enter");
if (dev[nameDevicePWM][namePWM]){
log.debug("Enable", devicePWM);
dev[devicePWM]=true;
//и сразу зададим время "включенного" состояние
setTimeout(function () {
//По таймауту - отключаем устройство
log.debug("Disable", devicePWM)
dev[devicePWM]=false;
}, (periodPWM*1000)/maxValue*dev[nameDevicePWM][namePWM]);
}
}, periodPWM*1000);
log.info("Создано PWM устройство", namePWM)
log.info(namePWM+"_IntervalID=", this[namePWM+"_IntervalID"])
}
//Вызовем нужное количество раз функцию, параметры:
//Имя канала виртустройства
//топик физического устройства
//"максимальное" значение
//период ШИМ в секундах
slowPWM_generator("Device1_A1", "wb-gpio/A1_OUT", 100, 2)
slowPWM_generator("Device1_A2", "wb-gpio/A2_OUT", 100, 5)
slowPWM_generator("Device1_A3", "wb-gpio/A3_OUT",100, 12)
slowPWM_generator("Device1_A4", "wb-gpio/A4_OUT",100, 8)
//Создадим само виртуальное устройство
if (Object.keys(virt_device_params.cells).length) {
defineVirtualDevice(nameDevicePWM, virt_device_params);
}