From c144a3ae1e051c2962322e7bea6a30f3969b8ec7 Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 14 Feb 2022 21:23:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A8=D0=BB=D0=B8=D1=84=D1=83=D0=B5=D0=BC=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D0=B0=D1=81=20=D0=BF=D1=80=D0=BE=D1=81=D0=BB?= =?UTF-8?q?=D0=BE=D0=B9=D0=BA=D1=83=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF?= =?UTF-8?q?=D0=B0=20=D0=BA=20gpio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/classes/IoTGpio.h | 12 ++++-------- src/Global.cpp | 2 +- src/classes/IoTGpio.cpp | 39 +++++++++++++++------------------------ 3 files changed, 20 insertions(+), 33 deletions(-) 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