Светодиодная шкала – это серия расположенных в ряд светодиодов (как в эквалайзере). Она часто используется в качестве дисплея для аналоговых датчиков. Впрочем, в этом примере мы воспользуемся не светодиодной шкалой, а ее «разобранной» версией, т.е. несколькими светодиодами, и научимся ими управлять.
В основе этого урока лежат два других – «Цикл For» (или «Рыцарь дорог») и «Использование входных данных для управления частотой мигания светодиода».
Скетч работает следующим образом. Сначала считываем входные данные. Затем масштабируем диапазон входных данных под количество светодиодов (всего в цепи их будет десять). Затем используем цикл for(), чтобы «перескакивать» с одного светодиода на другой. Если номер светодиода ниже отмасштабированного значения, включаем его. Если выше – выключаем.
/*
Светодиодная шкала
Включает последовательно расположенные светодиоды
в зависимости от данных, считанных с аналогового датчика.
Это простой способ сделать светодиодную шкалу.
И хотя в этом примере используется 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);
}
}
}