Arduino:Примеры/BarGraph

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

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


Светодиодная шкала [1]

Светодиодная шкала – это серия расположенных в ряд светодиодов (как в эквалайзере). Она часто используется в качестве дисплея для аналоговых датчиков. Впрочем, в этом примере мы воспользуемся не светодиодной шкалой, а ее «разобранной» версией, т.е. несколькими светодиодами, и научимся ими управлять. В основе этого урока лежат два других – «Цикл For» (или «Рыцарь дорог») и «Использование входных данных для управления частотой мигания светодиода». Скетч работает следующим образом. Сначала считываем входные данные. Затем масштабируем диапазон входных данных под количество светодиодов (всего в цепи их будет десять). Затем используем цикл for(), чтобы «перескакивать» с одного светодиода на другой. Если номер светодиода ниже отмасштабированного значения, включаем его. Если выше – выключаем.

LITE-ON INC- LTA-1000G.jpg

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

  • Плата Arduino;
  • Светодиодная шкала или 10 светодиодов;
  • Потенциометр;
  • 10 резисторов на 220 Ом;
  • Провода-перемычки;
  • Макетная плата Breadboard;

Цепь

BarGraph bb.png

Схема

BarGraph2 schem.png

Код

 1 /*
 2   Светодиодная шкала
 3  
 4   Включает последовательно расположенные светодиоды
 5  в зависимости от данных, считанных с аналогового датчика. 
 6   Это простой способ сделать светодиодную шкалу.
 7   И хотя в этом примере используется 10 светодиодов,
 8  на самом деле их можно подключить сколько угодно,
 9  но попутно поменяв число в ledCount (т.е. в переменной с количеством светодиодов)
10  и добавив или удалив контакты в массиве ledPins.
11   
12  При помощи этого метода можно управлять не только светодиодами, но и
13 другими цифровыми устройствами для вывода данных, 
14 формирующихся на основе входных аналоговых данных.   
15  
16  Цепь:
17    * Десять светодиодов подключено к десяти цифровым контактам (со 2-ого по 11-ый)
18    * Те же десять светодиодов через 220-омовые резисторы подключены к «земле»
19  
20  Создан 4 сентября 2010 Томом Иго (Tom Igoe)
21 
22  Этот код не защищен авторским правом.
23  
24  http://www.arduino.cc/en/Tutorial/BarGraph
25  */
26 
27 
28 // Это константы, т.е. значения, которые не изменятся:
29 const int analogPin = A0;   // Контакт, к которому подключен потенциометр
30 const int ledCount = 10;    // Количество светодиодов в шкале
31 
32 int ledPins[] = { 
33   2, 3, 4, 5, 6, 7,8,9,10,11 };   // Массив с номерам контактов, к которым подключены светодиоды
34 
35 void setup() {
36   // Зацикливаем массив со светодиодами и делаем все эти контакты выходными:
37   for (int thisLed = 0; thisLed < ledCount; thisLed++) {
38     pinMode(ledPins[thisLed], OUTPUT); 
39   }
40 }
41 
42 void loop() {
43   // Считываем данные с потенциометра:
44   int sensorReading = analogRead(analogPin);
45   // Масштабируем эти данные под количество светодиодов:
46   int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
47 
48   // Зацикливаем массив со светодиодами:
49   for (int thisLed = 0; thisLed < ledCount; thisLed++) {
50     // Если номер контакта, находящегося в массиве,
51     // меньше значения в ledLevel,
52     // то включаем светодиод, соответствующий этому контакту:
53     if (thisLed < ledLevel) {
54       digitalWrite(ledPins[thisLed], HIGH);
55     } 
56     // выключаем все светодиоды, чьи номера контактов меньше значения в ledLevel:
57     else {
58       digitalWrite(ledPins[thisLed], LOW); 
59     }
60   }
61 }

См.также

  • pinMode()
  • for()
  • digitalWrite()
  • if...else
  • map()
  • For Loop
  • Array
  • If Statement
  • Row Column Scanning

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