DIY fertilizer mixer and plant watering machine https://www.xythobuz.de/giessomat.html
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GPIOBank.cpp 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <Arduino.h>
  2. #include "GPIOBank.h"
  3. #ifdef PLATFORM_ESP
  4. #include "WifiStuff.h"
  5. #endif // PLATFORM_ESP
  6. GPIOBank::GPIOBank(int _size) {
  7. size = _size;
  8. pins = new int[size];
  9. out_state = new bool[size];
  10. is_output = false;
  11. }
  12. GPIOBank::~GPIOBank(void) {
  13. delete pins;
  14. delete out_state;
  15. }
  16. void GPIOBank::setPinNumbers(int _pins[]) {
  17. for (int i = 0; i < size; i++) {
  18. pins[i] = _pins[i];
  19. }
  20. }
  21. void GPIOBank::setOutput(void) {
  22. for (int i = 0; i < size; i++) {
  23. pinMode(pins[i], INPUT);
  24. out_state[i] = true;
  25. }
  26. is_output = true;
  27. }
  28. void GPIOBank::setInput(bool pullup) {
  29. for (int i = 0; i < size; i++) {
  30. if (pullup) {
  31. pinMode(pins[i], INPUT_PULLUP);
  32. } else {
  33. pinMode(pins[i], INPUT);
  34. }
  35. }
  36. is_output = false;
  37. }
  38. int GPIOBank::getSize(void) {
  39. return size;
  40. }
  41. void GPIOBank::setPin(int n, bool state) {
  42. if (!is_output) {
  43. return;
  44. }
  45. if ((n >= 0) && (n < size)) {
  46. //digitalWrite(pins[n], (!state) ? HIGH : LOW);
  47. if (state) {
  48. pinMode(pins[n], OUTPUT);
  49. digitalWrite(pins[n], LOW);
  50. } else {
  51. pinMode(pins[n], INPUT);
  52. }
  53. out_state[n] = !state;
  54. #ifdef PLATFORM_ESP
  55. wifi_schedule_websocket();
  56. #endif // PLATFORM_ESP
  57. }
  58. }
  59. void GPIOBank::setAll(bool state) {
  60. for (int i = 0; i < size; i++) {
  61. setPin(i, state);
  62. }
  63. }
  64. bool GPIOBank::getPin(int n) {
  65. if ((n >= 0) && (n < size)) {
  66. if (is_output) {
  67. return !out_state[n];
  68. } else {
  69. return (!digitalRead(pins[n]));
  70. }
  71. } else {
  72. return false;
  73. }
  74. }