@Mootfrost
C#, C++, JS, Python

Почему даже default не срабатывает в switch?

Есть вот такой свич:
switch(state){
    case DHT_OK:
       hRTemperature =  "T: " + (String)sensor.tem + " C";
       screen.print(hRTemperature, OLED_C, 25);
       int circleX = 64 + hRTemperature.length() / 2 * 12 - 12 - 5;

       if (circleX != prevCircleX) screen.drawCircle(prevCircleX, 12, 3, false, 0);
       screen.drawCircle(circleX, 12, 3, false, 1);
   
       screen.print("H: " + (String)sensor.hum + "%", OLED_C, 48);
       prevCircleX = circleX;
       Serial.println("rp");
       break;
    case DHT_ERROR_NO_REPLY:
      Serial.println("no rp");
      screen.print("Check", OLED_C, 25);
      screen.print("sensor", OLED_C, 48);
      break;
    default:
      screen.print("!!ERROR!!", OLED_C, 35);
  }

Срабатывает либо первый case, либо вообще ничего, даже default(на примере нет вывода в консоль, но был). Почему так может происходить?
  • Вопрос задан
  • 263 просмотра
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
1. Какое значение у state и констант в case-ах?
Если кейсы не срабатывают, то default ОБЯЗАН сработать, если мы не рассматриваем сценарий бага в компиляторе ил и вмешательства потусторонних сил. (https://onlinegdb.com/VTqDzMc8D)
Вполне возможно, что ты изначально не писал default-ветку, а после добавления забыл перекомпилировать.
2. Попробуй написать минимально воспроизводимый пример, тк я хз что у тебя за библиотеки используются и по тому не имею возможности воспроизвести (а так выглядит нормально)
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Напрашивается что выполнение уходит в Serial.println("no rp"); и не возвращается... ну например ждёт готовности вечно.
Думаю стоит перед ним поставить screen.print(... и если будет видимый результат - точка проблемы понятна
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы