Arduino:Примеры/BarGraph
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Светодиодная шкала [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