Передача PinMode в функцию

Vergily
Offline
Зарегистрирован: 01.09.2020

Вопрос как можно реализовать следующее:

в ядре в Commons.h  есть перечисление

typedef enum {
  INPUT           = 0x0,
  OUTPUT          = 0x1,
  INPUT_PULLUP    = 0x2,
  INPUT_PULLDOWN  = 0x3,
} PinMode;

его использует функция void pinMode(uint8_t pin, PinMode mode); из wiring_digital.c

Я делаю класс кнопки и хочу в конструкторе сразу передавать значения номера 
пина и pinMode. Сейчас это через костыль - доп переменную const uint8_t mode

class MyButton
{
  public:
    MyButton(const int pinN, const uint8_t mode) {      
      if (mode == 0) {
        pinMode(pinN, INPUT);
        digitalWrite(pinN, LOW );
      }
      if (mode == 1) {
        pinMode(pinN, INPUT_PULLUP);
        digitalWrite(pinN,LOW);
      }
      this->pinN = pinN;
    }

а хотелось бы сразу  MyButton(const int pinN, PinMode mode) {} но не понимаю как передать это в функцию. В лоб - не компилируется

sadman41
Онлайн
Зарегистрирован: 19.10.2016

pinMode(pinN, INPUT); => pinMode(pinN, mode);

b707
Offline
Зарегистрирован: 26.05.2017

Vergily пишет:

Я делаю класс кнопки и хочу в конструкторе сразу передавать значения номера 
пина и pinMode. Сейчас это через костыль - доп переменную const uint8_t mode

в передачи переменной mode как раз никакого "костыля" нет, так и надо делать. А вот код внутри конструктуора у вас - сплошной костыль

Что мешает написать это так

class MyButton
{
  public:
    MyButton(const int _pinN, const uint8_t mode) {      
      
       pinMode(pinN, mode);
       pinN = _pinN;
       digitalWrite(_pinN, LOW );
       
    }

 

Vergily
Offline
Зарегистрирован: 01.09.2020

Спасибо! Все проще чем я думал, тогда конечно костыли откидываем. Просто не хватает опыта и пытаюсь простое сделать сложным, а потом бороться...

просто меня смутило, что enum сделан как отдельный тип данных typedef PinMode. И я пытался передать значение используя этот тип, а не int

v258
Offline
Зарегистрирован: 25.05.2020

вообще там и byte хватит

void pinMode(uint8_t pin, uint8_t mode)

uint8_t это byte, int в этом случае - лишняя трата памяти

 

Vergily
Offline
Зарегистрирован: 01.09.2020

uint8_t - это да. Я больше с  typedef запутался