From 49cd22a5ddf369bad9d16da956415c4b887d8be9 Mon Sep 17 00:00:00 2001 From: Ilya Belyakov Date: Sun, 15 Oct 2023 19:55:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=82=D1=8E=D0=BD=D0=B8=D0=BD=D0=B3=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D1=8B=20=D0=B8=20=D0=B7=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=89=D0=B0=D0=B5=D0=BC=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D0=B8=D0=B9=20=D0=B0=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=20=D0=BD=D0=B0=20trackingID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/exec/IoTServo/IoTServo.cpp | 51 ++++++++++++++------------ src/modules/exec/IoTServo/modinfo.json | 16 +++++--- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/modules/exec/IoTServo/IoTServo.cpp b/src/modules/exec/IoTServo/IoTServo.cpp index 3cd672cf..adc894c1 100644 --- a/src/modules/exec/IoTServo/IoTServo.cpp +++ b/src/modules/exec/IoTServo/IoTServo.cpp @@ -9,37 +9,42 @@ extern IoTGpio IoTgpio; class IoTServo : public IoTItem { private: Servo servObj; - int _apin, _oldValue; - int _locmap1, _locmap2, _locmap3, _locmap4; + // int _apin, _oldValue; + int _oldValue; + // int _locmap1, _locmap2, _locmap3, _locmap4; public: IoTServo(String parameters): IoTItem(parameters) { - int pin; + int pin, minAngle, maxAngle, minPulseWidth, maxPulseWidth; jsonRead(parameters, "pin", pin); - servObj.attach(pin); + jsonRead(parameters, "minAngle", minAngle); + jsonRead(parameters, "maxAngle", maxAngle); + jsonRead(parameters, "minPulseWidth", minPulseWidth); + jsonRead(parameters, "maxPulseWidth", maxPulseWidth); + servObj.attach(pin, -1, minAngle, maxAngle, minPulseWidth, maxPulseWidth); - jsonRead(parameters, "apin", _apin); - if (_apin >= 0) IoTgpio.pinMode(_apin, INPUT); + // jsonRead(parameters, "apin", _apin); + // if (_apin >= 0) IoTgpio.pinMode(_apin, INPUT); - String map; - jsonRead(parameters, F("amap"), map, false); - if (map != "") { - _locmap1 = selectFromMarkerToMarker(map, ",", 0).toInt(); - _locmap2 = selectFromMarkerToMarker(map, ",", 1).toInt(); - _locmap3 = selectFromMarkerToMarker(map, ",", 2).toInt(); - _locmap4 = selectFromMarkerToMarker(map, ",", 3).toInt(); - } + // String map; + // jsonRead(parameters, F("amap"), map, false); + // if (map != "") { + // _locmap1 = selectFromMarkerToMarker(map, ",", 0).toInt(); + // _locmap2 = selectFromMarkerToMarker(map, ",", 1).toInt(); + // _locmap3 = selectFromMarkerToMarker(map, ",", 2).toInt(); + // _locmap4 = selectFromMarkerToMarker(map, ",", 3).toInt(); + // } } - void doByInterval() { - if (_apin >= 0) { - value.valD = map(IoTgpio.analogRead(_apin), _locmap1, _locmap2, _locmap3, _locmap4); - if (abs(_oldValue - value.valD) > 5) { - _oldValue = value.valD; - servObj.write(_oldValue); - } - } - } + // void doByInterval() { + // if (_apin >= 0) { + // value.valD = map(IoTgpio.analogRead(_apin), _locmap1, _locmap2, _locmap3, _locmap4); + // if (abs(_oldValue - value.valD) > 5) { + // _oldValue = value.valD; + // servObj.write(_oldValue); + // } + // } + // } IoTValue execute(String command, std::vector ¶m) { if (command == "rotate") { diff --git a/src/modules/exec/IoTServo/modinfo.json b/src/modules/exec/IoTServo/modinfo.json index 73f8e61e..09388af4 100644 --- a/src/modules/exec/IoTServo/modinfo.json +++ b/src/modules/exec/IoTServo/modinfo.json @@ -10,10 +10,12 @@ "widget": "rangeServo", "page": "servo", "descr": "угол", - "int": 1, "pin": 12, - "apin": -1, - "amap": "0, 4096, 0, 180" + "minAngle": 0, + "maxAngle": 180, + "minPulseWidth": 544, + "maxPulseWidth": 2400, + "trackingID": "" } ], "about": { @@ -30,10 +32,12 @@ "title": "Сервопривод", "moduleDesc": "Предназначен для управления сервоприводом по уровню аналогово сигнала.", "propInfo": { - "int": "Пауза в секундах между опросами аналогового входа. Если 0, то читаем постоянно", "pin": "Пин, к которому подключен сервопривод", - "apin": "Номер GPIO аналогового пина. Если -1, то функция отключена.", - "amap": "Настройки преобразования значений аналога в нужный диапазон сервы, имеет смысл, если аналог включен." + "minAngle": "Минимальный угол поворота", + "maxAngle": "Максимальный угол поворота", + "minPulseWidth": "Минимальная длина импульса", + "maxPulseWidth": "Максимальная длина импульса", + "trackingID": "Идентификатор отслеживания значения другого элемента конфигурации, например, чтение аналога" }, "retInfo": "Содержит текущее значение поворота", "funcInfo": [