Arduino:Примеры/SwitchCase

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Использование оператора Switch при считывании данных от датчика [1]

Оператор if() позволяет создать ситуацию, которая может разрешиться только двумя вариантами – TRUE или FALSE. Однако порой требуется создать не два варианта, а больше, и тут можно воспользоваться несколькими операторами if(), но есть и другой способ – применить оператор switch(). Данный же урок продемонстрирует, как при помощи оператора switch() определять одно из четырех состояний фоторезистора – «темно», «тускло», «средняя яркость» и «очень ярко».

В этом примере сначала программа будет считывать данные от фоторезистора. Затем она воспользуется функцией map(), чтобы раздробить полученные данные на четыре отрезка/значения: 0, 1, 2 и 3. Наконец, она использует оператор switch(), чтобы вывести на компьютер одно из четырех сообщений – в зависимости от того, какое из четырех значений будет возвращено функцией analogRead(). То есть, по сути, в финале программа выведет на компьютер информацию о том, какую степень яркости «чувствует» фоторезистор.

Необходимое оборудование

  • Плата Arduino;
  • Фоторезистор (или другой аналоговый датчик);
  • Один 10 кОм резистор;
  • Макетная плата Breadboard;
  • Провода-перемычки;

Цепь

Фоторезистор подключен к 0-ому входному аналоговому и 5-вольтовому контактам по принципу делителя напряжения. С другой стороны к нему подсоединен 10000-омовый резистор, который тоже подключен к 0-ому аналоговому контакту и «земле». Функция analogRead() будет возвращать из этой цепи данные в диапазоне от 0 до 600. Сам урок должен проходить в достаточно освещенном помещении.

SwitchCase bb.png

Схема

SwitchCase2 N schem.png

Код

/*
  Оператор Switch
 
 Демонстрирует использование оператора switch(). 
 Он позволяет выбирать между несколькими дискретными значениями одной переменной. 
 По сути, это как несколько операторов if().  
 
 Чтобы увидеть этот скетч в действии, плата и датчик должны находиться
в хорошо освещенном помещении.
 Затем откройте окно Serial Monitor, и двигайте рукой над фоторезистором,
 тем самым меняя степень яркости, которую он может воспринять. 
 
 Цепь:
 * фоторезистор, подключенный к 0-ому аналоговому контакту и 5-вольтовому напряжению
 * 10000-омовый резистор, заземленный и подключенный к 0-ому аналоговому контакту
 
 Создан 1 июля 2009, 
 модифицирован 9 апреля 2012 Томом Иго (Tom Igoe). 
 
 Этот код не защищен авторским правом.
 
 http://www.arduino.cc/en/Tutorial/SwitchCase
 */

// это константы, т.е. значения, которые не изменятся. 
// это самое высокое и самое низкое значения,
// которые могут быть считаны с датчика. 
const int sensorMin = 0;      // минимальное значение, которое можно считать с датчика; определено через эксперимент 
const int sensorMax = 600;    // максимальное значение, которое можно считать с датчика; определено через эксперимент

void setup() {
  // инициализируем последовательную передачу данных:
  Serial.begin(9600);  
}

void loop() {
  // считываем данные с датчика:
  int sensorReading = analogRead(A0);
  // дробим диапазон данных от 0 до 600 на четыре отрезка,
  // чтобы у нас было 4 варианта на выбор:
  int range = map(sensorReading, sensorMin, sensorMax, 0, 3);

  // выводим на Serial Monitor одно из четырех сообщений,
  // оповещающих о том или ином уровне яркости,
  // т.е. «темно» (dark), «тускло» (dim),
  // «средняя яркость» (medium) или «очень ярко» (bright):
  switch (range) {
  case 0:    // ваша рука над фоторезистором
    Serial.println("dark");
    break;
  case 1:    // ваша рука чуть выше фоторезистора 
    Serial.println("dim");
    break;
  case 2:    // ваша рука примерно в 10 см от фоторезистора 
    Serial.println("medium");
    break;
  case 3:    // вы совсем не загораживаете фоторезистор
    Serial.println("bright");
    break;
  } 
  delay(1);        // делаем задержку между считываниями – для стабильности программы 
}

См.также

  1. serial.begin()
  2. analogRead{}
  3. map()
  4. Serial.println()
  5. If Statement
  6. For Loop
  7. Array
  8. While Loop
  9. Switch Case

Внешние ссылки