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

Код

 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

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