12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include <Arduino.h>
-
- #include "GPIOBank.h"
-
- #ifdef PLATFORM_ESP
- #include "WifiStuff.h"
- #endif // PLATFORM_ESP
-
- GPIOBank::GPIOBank(int _size) {
- size = _size;
- pins = new int[size];
- out_state = new bool[size];
- is_output = false;
- }
-
- GPIOBank::~GPIOBank(void) {
- delete pins;
- delete out_state;
- }
-
- void GPIOBank::setPinNumbers(int _pins[]) {
- for (int i = 0; i < size; i++) {
- pins[i] = _pins[i];
- }
- }
-
- void GPIOBank::setOutput(void) {
- for (int i = 0; i < size; i++) {
- pinMode(pins[i], INPUT);
- out_state[i] = true;
- }
- is_output = true;
- }
-
- void GPIOBank::setInput(bool pullup) {
- for (int i = 0; i < size; i++) {
- if (pullup) {
- pinMode(pins[i], INPUT_PULLUP);
- } else {
- pinMode(pins[i], INPUT);
- }
- }
- is_output = false;
- }
-
- int GPIOBank::getSize(void) {
- return size;
- }
-
- void GPIOBank::setPin(int n, bool state) {
- if (!is_output) {
- return;
- }
-
- if ((n >= 0) && (n < size)) {
- //digitalWrite(pins[n], (!state) ? HIGH : LOW);
-
- if (state) {
- pinMode(pins[n], OUTPUT);
- digitalWrite(pins[n], LOW);
- } else {
- pinMode(pins[n], INPUT);
- }
- out_state[n] = !state;
-
- #ifdef PLATFORM_ESP
- wifi_schedule_websocket();
- #endif // PLATFORM_ESP
- }
- }
-
- void GPIOBank::setAll(bool state) {
- for (int i = 0; i < size; i++) {
- setPin(i, state);
- }
- }
-
- bool GPIOBank::getPin(int n) {
- if ((n >= 0) && (n < size)) {
- if (is_output) {
- return !out_state[n];
- } else {
- return (!digitalRead(pins[n]));
- }
- } else {
- return false;
- }
- }
|