Промежуток значений case в switch - case

Nickalaich
Nickalaich аватар
Offline
Зарегистрирован: 07.04.2013

Сабж. 



switch (analogRead(0))
  {
    case ??? // нужно задать промежуток от 100 до 200
  lcd.clear();
  lcd.setCursor(12,0);
  lcd.print(voltage);
  delay(500);
  break;
  }

 

Nickalaich
Nickalaich аватар
Offline
Зарегистрирован: 07.04.2013

В догонку: на самом деле я не уверен, подходит ли для моих задач switch - case. Мне нужно при нажатии одной аналоговой кнопки начать выполнение одной задачи, а при другой - начать выполнение, соответственно, другой задачи. При этом, выводимые на дисплей значения должны меняться постоянно, без нажатия кнопок.

maksim
Offline
Зарегистрирован: 12.02.2012
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;
......
  }