Arduino:Примеры/BarGraph

Материал из Онлайн справочника
Версия от 21:58, 13 декабря 2016; Myagkij (обсуждение | вклад) (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

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


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

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

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

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

Цепь

Схема

Код

/*
  Светодиодная шкала
 
  Включает последовательно расположенные светодиоды
 в зависимости от данных, считанных с аналогового датчика. 
  Это простой способ сделать светодиодную шкалу.
  И хотя в этом примере используется 10 светодиодов,
 на самом деле их можно подключить сколько угодно,
 но попутно поменяв число в ledCount (т.е. в переменной с количеством светодиодов)
 и добавив или удалив контакты в массиве ledPins.
  
 При помощи этого метода можно управлять не только светодиодами, но и
другими цифровыми устройствами для вывода данных, 
формирующихся на основе входных аналоговых данных.   
 
 Цепь:
   * Десять светодиодов подключено к десяти цифровым контактам (со 2-ого по 11-ый)
   * Те же десять светодиодов через 220-омовые резисторы подключены к «земле»
 
 Создан 4 сентября 2010 Томом Иго (Tom Igoe)

 Этот код не защищен авторским правом.
 
 http://www.arduino.cc/en/Tutorial/BarGraph
 */


// Это константы, т.е. значения, которые не изменятся:
const int analogPin = A0;   // Контакт, к которому подключен потенциометр
const int ledCount = 10;    // Количество светодиодов в шкале

int ledPins[] = { 
  2, 3, 4, 5, 6, 7,8,9,10,11 };   // Массив с номерам контактов, к которым подключены светодиоды

void setup() {
  // Зацикливаем массив со светодиодами и делаем все эти контакты выходными:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT); 
  }
}

void loop() {
  // Считываем данные с потенциометра:
  int sensorReading = analogRead(analogPin);
  // Масштабируем эти данные под количество светодиодов:
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);

  // Зацикливаем массив со светодиодами:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    // Если номер контакта, находящегося в массиве,
    // меньше значения в ledLevel,
    // то включаем светодиод, соответствующий этому контакту:
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    } 
    // выключаем все светодиоды, чьи номера контактов меньше значения в ledLevel:
    else {
      digitalWrite(ledPins[thisLed], LOW); 
    }
  }
}

См.также

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

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