Оператор switch case в Arduino для диапазона данных?

#include "Ultrasonic.h"
Ultrasonic ultrasonic(4, 7);
const int led1 = 9;
const int led2 = 10;
const int led3 = 11;
const int led4 = 12;
const int led5 = 13;



void setup()
{
  pinMode (led1, OUTPUT);
  pinMode (led2, OUTPUT);
  pinMode (led3, OUTPUT);
  pinMode (led4, OUTPUT);
  pinMode (led5, OUTPUT);
  Serial.begin(9600);                        
}

void loop()
{
  float dist = ultrasonic.Ranging(CM);       
  Serial.println(dist);  
  
  
  if (dist > 40)               {digitalWrite(led1, 1); digitalWrite(led2, 0); digitalWrite(led3, 0); digitalWrite(led4, 0); digitalWrite(led5, 0); }
  if (dist <= 40 && dist > 30) {digitalWrite(led1, 1); digitalWrite(led2, 1); digitalWrite(led3, 0); digitalWrite(led4, 0); digitalWrite(led5, 0); }
  if (dist <= 30 && dist > 20) {digitalWrite(led1, 1); digitalWrite(led2, 1); digitalWrite(led3, 1); digitalWrite(led4, 0); digitalWrite(led5, 0); }
  if (dist <= 20 && dist > 10) {digitalWrite(led1, 1); digitalWrite(led2, 1); digitalWrite(led3, 1); digitalWrite(led4, 1); digitalWrite(led5, 0); }
  if (dist <= 10)              {digitalWrite(led1, 1); digitalWrite(led2, 1); digitalWrite(led3, 1); digitalWrite(led4, 1); digitalWrite(led5, 1); }


  delay(100);                                  
}


Получаю расстояние до ближайшего препятствия в сантиметрах и на основании этого зажигаю светодиоды.
Мне не нравится обилие if. Как можно сократить конструкцию, используя switch case?
  • Вопрос задан
  • 7351 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Мне не нравится обилие if. Как можно сократить конструкцию, используя switch case?

Следуя стандарту С/С++ -- никак. К тому же dist у вас -- float, а в кейсах оператора switch можно указать только целочисленные метки.
Но можно кучу if заменить на следующее:
digitalWrite(led1, 1);
digitalWrite(led2, dist <= 40);
digitalWrite(led3, dist <= 30);
digitalWrite(led4, dist <= 20);
digitalWrite(led5, dist <= 10);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы