Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/SwitchCase

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Использование оператора 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

Код

  1. /*
  2.   Оператор Switch
  3.  
  4.  Демонстрирует использование оператора switch().
  5.  Он позволяет выбирать между несколькими дискретными значениями одной переменной.
  6.  По сути, это как несколько операторов if().  
  7.  
  8.  Чтобы увидеть этот скетч в действии, плата и датчик должны находиться
  9. в хорошо освещенном помещении.
  10.  Затем откройте окно Serial Monitor, и двигайте рукой над фоторезистором,
  11.  тем самым меняя степень яркости, которую он может воспринять.
  12.  
  13.  Цепь:
  14.  * фоторезистор, подключенный к 0-ому аналоговому контакту и 5-вольтовому напряжению
  15.  * 10000-омовый резистор, заземленный и подключенный к 0-ому аналоговому контакту
  16.  
  17.  Создан 1 июля 2009,
  18.  модифицирован 9 апреля 2012 Томом Иго (Tom Igoe).
  19.  
  20.  Этот код не защищен авторским правом.
  21.  
  22.  http://www.arduino.cc/en/Tutorial/SwitchCase
  23.  */
  24.  
  25. // это константы, т.е. значения, которые не изменятся.
  26. // это самое высокое и самое низкое значения,
  27. // которые могут быть считаны с датчика.
  28. const int sensorMin = 0;      // минимальное значение, которое можно считать с датчика; определено через эксперимент
  29. const int sensorMax = 600;    // максимальное значение, которое можно считать с датчика; определено через эксперимент
  30.  
  31. void setup() {
  32.   // инициализируем последовательную передачу данных:
  33.   Serial.begin(9600);  
  34. }
  35.  
  36. void loop() {
  37.   // считываем данные с датчика:
  38.   int sensorReading = analogRead(A0);
  39.   // дробим диапазон данных от 0 до 600 на четыре отрезка,
  40.   // чтобы у нас было 4 варианта на выбор:
  41.   int range = map(sensorReading, sensorMin, sensorMax, 0, 3);
  42.  
  43.   // выводим на Serial Monitor одно из четырех сообщений,
  44.   // оповещающих о том или ином уровне яркости,
  45.   // т.е. «темно» (dark), «тускло» (dim),
  46.   // «средняя яркость» (medium) или «очень ярко» (bright):
  47.   switch (range) {
  48.   case 0:    // ваша рука над фоторезистором
  49.     Serial.println("dark");
  50.     break;
  51.   case 1:    // ваша рука чуть выше фоторезистора
  52.     Serial.println("dim");
  53.     break;
  54.   case 2:    // ваша рука примерно в 10 см от фоторезистора
  55.     Serial.println("medium");
  56.     break;
  57.   case 3:    // вы совсем не загораживаете фоторезистор
  58.     Serial.println("bright");
  59.     break;
  60.   }
  61.   delay(1);        // делаем задержку между считываниями – для стабильности программы
  62. }

См.также

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

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

  1. Arduino - Switch (case) Statement, used with sensor input