Добавляем в сценарии digitalWrite(pin), digitalRead(pin), digitalInvert(pin)

This commit is contained in:
2022-03-03 23:28:27 +03:00
parent 42c1cd3e57
commit 0ae8fd1e38
4 changed files with 29 additions and 1 deletions

View File

@@ -11,6 +11,7 @@ class IoTGpio {
virtual int digitalRead(uint8_t pin); virtual int digitalRead(uint8_t pin);
virtual int analogRead(uint8_t pin); virtual int analogRead(uint8_t pin);
virtual void analogWrite(uint8_t pin, int val); virtual void analogWrite(uint8_t pin, int val);
virtual void digitalInvert(uint8_t pin);
int index; int index;
void regDriver(IoTGpio* newDriver); void regDriver(IoTGpio* newDriver);

View File

@@ -48,6 +48,12 @@ void IoTGpio::analogWrite(uint8_t pin, int val) {
} }
} }
void IoTGpio::digitalInvert(uint8_t pin) {
int pinH = pin/100;
if (_drivers[pinH]) _drivers[pinH]->digitalInvert(pin - pinH*100);
else ::digitalWrite(pin, 1 - ::digitalRead(pin));
}
void IoTGpio::regDriver(IoTGpio* newDriver) { void IoTGpio::regDriver(IoTGpio* newDriver) {
_drivers[newDriver->index] = newDriver; _drivers[newDriver->index] = newDriver;

View File

@@ -36,6 +36,10 @@ class Mcp23017 : public IoTItem, IoTGpio {
return mcp.digitalRead(pin); return mcp.digitalRead(pin);
} }
void digitalInvert(uint8_t pin) {
mcp.digitalWrite(pin, 1 - mcp.digitalRead(pin));
}
~Mcp23017() {}; ~Mcp23017() {};
}; };

View File

@@ -31,8 +31,25 @@ class SysExt : public IoTItem {
if (command == "reboot") { // выполняем код при вызове спец команды из сценария: ID.reboot(); if (command == "reboot") { // выполняем код при вызове спец команды из сценария: ID.reboot();
ESP.restart(); ESP.restart();
} else if (command == "digitalRead") {
if (param.size()) {
IoTgpio.pinMode(param[0].valD, INPUT);
value.valD = IoTgpio.digitalRead(param[0].valD);
return value;
}
} else if (command == "digitalWrite") {
if (param.size() == 2) {
IoTgpio.pinMode(param[0].valD, OUTPUT);
IoTgpio.digitalWrite(param[0].valD, param[1].valD);
return {};
}
} else if (command == "digitalInvert") {
if (param.size()) {
IoTgpio.pinMode(param[0].valD, OUTPUT);
IoTgpio.digitalInvert(param[0].valD);
return {};
}
} }
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
} }