2013-06-02 3 views
3

Я пишу код на Arduino (очень похоже на C, которого я не знаю, или очень мало), и у меня есть небольшая проблема относительно оператора switch/case.C/Arduino switch case

Мне нужен мой Arduino, чтобы сделать то или это в зависимости от значений потенциометра (от 0 до 1023). Тем не менее, я не имею понятия, как рассказать об этом случае «от 0 до 200». Например, я попробовал

case 0..250: 
    blablaSomeCode; 
    break; 

И так далее ... Как это сделать?

Я не хочу писать случай 1 случай 2 случай 3 ...

ответ

5

Вы должны будете использовать каскад, если (также/особенно если значение является числом с плавающей точкой)

int value= ...; 

if (value>=0 && value<=250 { 
    // some code 0..250 
} 
else 
if (value>250 && value<=500) { 
    // some code 251..500 
} 
else 
if (value>500 && value<=1000) { 
    // etc. 
} 
else { 
    // all other values (less than zero or 1001...) 
} 
+0

Спасибо, много! Я на самом деле написал функцию, называемую isIn, чтобы проверить это! но ваш код намного быстрее! –

+0

Рад слышать! Если производительность является проблемой, вы можете переупорядочить ifs таким образом, чтобы наиболее распространенные случаи находились рядом с вершиной. (И, пожалуйста, подумайте о правильном ответе). – Nicholaz

2
switch(val) 
{ 
    case 0 ... 250: 
     inRange(val); 
     break; 

    default: 
     outOfRange(); 
     break; 
} 

Хотя код в предыдущем ответе действительно, я бы просто придерживаться заявление переключателя, как это очень применимо для проблемы решить.

Обратите внимание, что использование диапазонов ('...') не соответствует стандарту ANSI C, но отлично работает в среде Arduino.