Передача PinMode в функцию
- Войдите на сайт для отправки комментариев
Чт, 24/09/2020 - 17:26
Вопрос как можно реализовать следующее:
в ядре в 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) {} но не понимаю как передать это в функцию. В лоб - не компилируется
pinMode(pinN, INPUT); => pinMode(pinN, mode);
Я делаю класс кнопки и хочу в конструкторе сразу передавать значения номера
пина и 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 ); }Спасибо! Все проще чем я думал, тогда конечно костыли откидываем. Просто не хватает опыта и пытаюсь простое сделать сложным, а потом бороться...
просто меня смутило, что enum сделан как отдельный тип данных typedef PinMode. И я пытался передать значение используя этот тип, а не int
вообще там и byte хватит
uint8_t это byte, int в этом случае - лишняя трата памяти
uint8_t - это да. Я больше с typedef запутался