Добавляем расширитель портов MCP23017

This commit is contained in:
2022-02-21 20:00:18 +03:00
parent 9fe7adb151
commit 5a96d39012
9 changed files with 119 additions and 18 deletions

View File

@@ -1,9 +1,8 @@
#include "classes/IoTGpio.h"
IoTGpio::IoTGpio(int pins) { // инициируем стартовым числом диапазона доступных пинов для создаваемого экземпляра 0 - системный, далее 100, 200, 300, 400 или иной
pinNums = pins;
_drivers[0] = nullptr;
IoTGpio::IoTGpio(int Index) { // указываем за какой интервал пинов будет отвечать данный экземпляр 0 - сис, 1 - 100, 2 - 200, 3 - 300, 4 -400
index = Index;
}
IoTGpio::~IoTGpio(){
@@ -12,28 +11,33 @@ IoTGpio::~IoTGpio(){
void IoTGpio::pinMode(uint8_t pin, uint8_t mode) {
if (_drivers[pin/100]) _drivers[pin/100]->pinMode(pin, mode);
int pinH = pin/100;
if (_drivers[pinH]) _drivers[pinH]->pinMode(pin - pinH*100, mode);
else ::pinMode(pin, mode);
}
void IoTGpio::digitalWrite(uint8_t pin, uint8_t val) {
if (_drivers[pin/100]) _drivers[pin/100]->digitalWrite(pin, val);
int pinH = pin/100;
if (_drivers[pinH]) _drivers[pinH]->digitalWrite(pin - pinH*100, val);
else ::digitalWrite(pin, val);
}
int IoTGpio::digitalRead(uint8_t pin) {
if (_drivers[pin/100]) return _drivers[pin/100]->digitalRead(pin);
int pinH = pin/100;
if (_drivers[pinH]) return _drivers[pinH]->digitalRead(pin - pinH*100);
else return ::digitalRead(pin);
}
int IoTGpio::analogRead(uint8_t pin) {
if (_drivers[pin/100]) return _drivers[pin/100]->analogRead(pin);
int pinH = pin/100;
if (_drivers[pinH]) return _drivers[pinH]->analogRead(pin - pinH*100);
else return ::analogRead(pin);
}
void IoTGpio::analogWrite(uint8_t pin, int val) {
if (_drivers[pin/100]) _drivers[pin/100]->analogWrite(pin, val);
int pinH = pin/100;
if (_drivers[pinH]) _drivers[pinH]->analogWrite(pin - pinH*100, val);
else {
#ifdef ESP32
// todo: написать для esp32 аналог функции analogWrite
@@ -46,5 +50,5 @@ void IoTGpio::analogWrite(uint8_t pin, int val) {
void IoTGpio::regDriver(IoTGpio* newDriver) {
_drivers[newDriver->pinNums/100] = newDriver;
_drivers[newDriver->index] = newDriver;
}