Промежуток значений case в switch - case
- Войдите на сайт для отправки комментариев
Пт, 10/05/2013 - 12:53
Сабж.
switch (analogRead(0))
{
case ??? // нужно задать промежуток от 100 до 200
lcd.clear();
lcd.setCursor(12,0);
lcd.print(voltage);
delay(500);
break;
}
В догонку: на самом деле я не уверен, подходит ли для моих задач switch - case. Мне нужно при нажатии одной аналоговой кнопки начать выполнение одной задачи, а при другой - начать выполнение, соответственно, другой задачи. При этом, выводимые на дисплей значения должны меняться постоянно, без нажатия кнопок.
byte ADC_read(byte ADC_pin) { ADMUX = ADC_pin; // ADC pin ADMUX |= 1<<REFS0; // Set ADC reference to AVCC ADMUX |= 1<<ADLAR; // 8 bit reading ADCSRA |= 1<<ADEN; ADCSRA |= 1<<ADSC; while(!(ADCSRA & (1<<ADIF))); ADCSRA |= 1<<ADIF; byte result = ADCH; ADMUX = 0; ADCSRB &= ~(1<<ADLAR); // 10 bit reading return result; } byte Keybord() { static unsigned long key_time; if(millis() < key_time) return 0; static byte key_prev; if(ADC_read(0) > 200) { key_prev = 0; return 0; } byte key = 0; byte push[] = {0, 0, 0, 0, 0}; for(byte i = 0; i < 5; i++) { byte a = ADC_read(0); // 0 НИЧЕГО if(a == 0) push[i] = 1; // 1 ВПРАВО else if(a < 50) push[i] = 2; // 2 ВВЕРХ else if(a < 100) push[i] = 3; // 3 ВНИЗ else if(a < 150) push[i] = 4; // 4 ВЛЕВО else if(a < 200) push[i] = 5; // 5 ВЫБОР else push[i] = 0; } if(push[0] == push[1] && push[1] == push[2] && push[2] == push[3] && push[3] == push[4]) key = push[0]; if(key == key_prev) return 0; key_prev = key; key_time = millis() + 50; return key; }Функция Keybord() возвращает число от 0 до 5 в зависимости от нажатой кнопки + реализован антидребезг.
switch (Keybord()) { case 1 lcd.clear(); lcd.setCursor(12,0); lcd.print(voltage); delay(500); break; ...... }