Использование директивы #define для обозначения элементов case в конструкции switch

Если вот так, то возникает ошибка

Спойлер

enum event : uint8_t {
  EVENT_1,
  EVENT_2,
  EVENT_3,
};


void setup() {
  switch (event ) {

    case EVENT_1:
      break;

    case EVENT_2:
      break;

    case EVENT_3:
      break;
  }
}

void loop() {}

In function 'void setup()':
sketch_dec27b:13:11: error: 'event ' was not declared in this scope
   switch (event ) {
           ^~~~~~~~~~~~~~~~
exit status 1
'event ' was not declared in this scope




Так всё ок

enum : uint8_t {
  EVENT_1,
  EVENT_2,
  EVENT_3,
}event ;

Класс использовать вот так?

enum class Event : uint8_t {
  EVENT_1,
  EVENT_2,
  EVENT_3,
};

Event Event_value = Event::EVENT_1;


void setup() {
  switch (Event_value) {

    case Event::EVENT_1:
     Event_value =  Event::EVENT_2;
      break;

    case Event::EVENT_2:
      Event_value = Event::EVENT_3;
      break;

    case Event::EVENT_3:
      Event_value = Event::EVENT_1;
      break;
  }
}

void loop() {}

Ну стоит наверное почитать что нибудь про enum.

Обычно оно как то так расписывается:

enum myEnumType{uno=1, dues,tres,quattro} myEnum;
//Где myEnumType тип данных перечисление которое может принимать значения перечисленные в фигурных скобках.
//myEnum создание объекта 

//Все это можно реализовать и вот так
enum myEnumType{uno=1, dues,tres,quattro} ;
myEnumType myEnum=uno;//отдельно создание объекта и его инициализация

Соответственно если не создан тип объекта, то и сам объект создавать как то бессмысленно.

1 лайк

А если вот так?

enum event : uint8_t {
  EVENT_1,
  EVENT_2,
  EVENT_3,
};

event _event = EVENT_1;

void setup() {
  switch (_event ) {

    case EVENT_1:
      break;

    case EVENT_2:
      break;

    case EVENT_3:
      break;
  }
}

void loop() {}


Давайте и я вставлю…

typedef enum : uint8_t {smManual = 0x00, smAuto, smSettings} systemMode_t;
...
systemMode_t systemMode = smManual;
Спойлер

Так и знала что будет много интересного :grinning:
Что из этого выбрать для использования…

Не пытаться обьять необьятное, т е начинать экономить память, когда её начинает не хватать.
Вы внукам лишнюю память МК хотите оставить)

Ахаххх, до внуков мне еще рановато, а с текстовыми названиями блоков case работать удобнее чем с цифрами

А я говорил ))

Главное стараться не использовать ++stepMode;

А то новый режим добавите случайно/через несколько месяцев новый режим в середину списка - долго придётся косяк искать (