diff --git a/include/classes/IoTGpio.h b/include/classes/IoTGpio.h index 49d783fb..ed817b66 100644 --- a/include/classes/IoTGpio.h +++ b/include/classes/IoTGpio.h @@ -3,23 +3,19 @@ class IoTGpio { public: - IoTGpio(); + IoTGpio(int pins); ~IoTGpio(); void pinMode(uint8_t pin, uint8_t mode); void digitalWrite(uint8_t pin, uint8_t val); int digitalRead(uint8_t pin); int analogRead(uint8_t pin); - void analogReference(uint8_t mode); void analogWrite(uint8_t pin, int val); - void analogWriteFreq(uint32_t freq); - void analogWriteRange(uint32_t range); + int pinNums; // база для определения диапазона номеров пинов. pinNums + используемый void regDriver(IoTGpio* newDriver); private: - IoTGpio* _ext1; //ссылка на объект доступа к портам свыше 100 - IoTGpio* _ext2; //200 - IoTGpio* _ext3; //300 - IoTGpio* _ext4; //400 + IoTGpio* _drivers[5]; //ссылки на объекты доступа к портам более 100, 200, 300, 400. Нулевой элемент используется как маркер - и возвращается nullptr при обращении + }; \ No newline at end of file diff --git a/src/Global.cpp b/src/Global.cpp index 69a007fe..5667cf67 100644 --- a/src/Global.cpp +++ b/src/Global.cpp @@ -29,7 +29,7 @@ WebSocketsServer standWebSocket = WebSocketsServer(81); /********************************************************************************************************************* ***********************************************глобальные переменные************************************************** **********************************************************************************************************************/ -IoTGpio IoTgpio = {}; +IoTGpio IoTgpio(0); String settingsFlashJson = "{}"; //переменная в которой хранятся все настройки, находится в оперативной памяти и синхронизированна с flash памятью String errorsHeapJson = "{}"; //переменная в которой хранятся все ошибки, находится в оперативной памяти только diff --git a/src/classes/IoTGpio.cpp b/src/classes/IoTGpio.cpp index e6b75382..96faeac2 100644 --- a/src/classes/IoTGpio.cpp +++ b/src/classes/IoTGpio.cpp @@ -1,8 +1,9 @@ #include "classes/IoTGpio.h" -IoTGpio::IoTGpio(){ - _ext1 = _ext2 = _ext3 = _ext4 = nullptr; +IoTGpio::IoTGpio(int pins) { // инициируем стартовым числом диапазона доступных пинов для создаваемого экземпляра 0 - системный, далее 100, 200, 300, 400 или иной + pinNums = pins; + _drivers[0] = nullptr; } IoTGpio::~IoTGpio(){ @@ -11,42 +12,32 @@ IoTGpio::~IoTGpio(){ void IoTGpio::pinMode(uint8_t pin, uint8_t mode) { - ::pinMode(pin, mode); + if (_drivers[pin/100]) _drivers[pin/100]->pinMode(pin, mode); + else ::pinMode(pin, mode); } void IoTGpio::digitalWrite(uint8_t pin, uint8_t val) { - ::digitalWrite(pin, val); + if (_drivers[pin/100]) _drivers[pin/100]->digitalWrite(pin, val); + else ::digitalWrite(pin, val); } int IoTGpio::digitalRead(uint8_t pin) { - return ::digitalRead(pin); + if (_drivers[pin/100]) return _drivers[pin/100]->digitalRead(pin); + else return ::digitalRead(pin); } - - int IoTGpio::analogRead(uint8_t pin) { - return ::analogRead(pin); -} - -void IoTGpio::analogReference(uint8_t mode) { - ::analogReference(mode); + if (_drivers[pin/100]) return _drivers[pin/100]->analogRead(pin); + else return ::analogRead(pin); } void IoTGpio::analogWrite(uint8_t pin, int val) { - ::analogWrite(pin, val); -} - -void IoTGpio::analogWriteFreq(uint32_t freq) { - ::analogWriteFreq(freq); -} - -void IoTGpio::analogWriteRange(uint32_t range) { - ::analogWriteRange(range); + if (_drivers[pin/100]) _drivers[pin/100]->analogWrite(pin, val); + else ::analogWrite(pin, val); } void IoTGpio::regDriver(IoTGpio* newDriver) { - -} - + _drivers[newDriver->pinNums/100] = newDriver; +} \ No newline at end of file