Семисегментный индикатор — это индикатор, позволяющий отображать цифровую информацию. Чаще всего состоит из 7 светодиодов. Иногда добавляют точку, для чего в индикаторе присутствует дополнительный восьмой светодиод, как в нашем случае.
Ниже представлен пример использования такого индикатора совместно с Arduino nano.
Данный индикатор имеет 10 выводов по пять с каждой стороны. Средний вывод обоих сторон — общая земля. Остальные выводы соответствуют сегментам индикатора.
Так как такие индикаторы состоят из обычных светодиодов, при подаче на них 5 вольт, светодиоды могут перегореть. Поэтому, сегменты чаще всего подключаются к портам Arduino через сопротивления. Для простоты схемы, иногда подключают общее сопротивление к выводу земли. Однако такой вид подключения имеет один недостаток — яркость свечения зависит от количество одновременно включенных сегментов.
Приведенный ниже пример позволяет избежать этот недостаток, при этом не усложнив схему. Все выводы подключаются к цифровым портам Arduino, в том числе и вывод земли индикатора. При этом, чтобы не испортить светодиоды в индикаторе, на вывод земли подается ШИМ-сигнал, равная примерно половине мощности. При таком подключении, из-за быстрого включения-выключения светодиодов, они не успевают перегреться и испортиться. При этом яркость свечения уже мало зависит от количество одновременно включенных сегментов.
Ниже приведена программа, которая отображает все цифры по-очереди:
//Выключить все сегменты индикатора void VV(){ for (int i=2; i<12; i++)//Цикл по всем портам digitalWrite(i,0);//Выключение портов } void setup() { pinMode(9,1); analogWrite(9,125); //Используем 9-й порт в качестве общей земли } void odin(){//Отображение единицы в индикаторе VV();//Выключение всех сегментов pinMode(2,1); digitalWrite(2,1);//Включение нужных сегментов pinMode(6,1); digitalWrite(6,1); } void dva(){//Отображение двойки в индикаторе VV(); pinMode(7,1); digitalWrite(7,1); pinMode(6,1); digitalWrite(6,1); pinMode(5,1); digitalWrite(5,1); pinMode(3,1); digitalWrite(3,1); pinMode(11,1); digitalWrite(11,1); } void tri(){//Отображение тройки в индикаторе VV(); sem();//Сначала включаем семерку pinMode(11,1);//затем недостающие до тройки сегменты digitalWrite(11,1) ;//Такой метод сокращает код программы pinMode(3,1); digitalWrite(3,1) ; } void chetyre(){//Отображение четверки в индикаторе VV(); odin(); pinMode(8,1); digitalWrite(8,1) ; pinMode(11,1); digitalWrite(11,1) ; } void pyat(){//Отображение пятерки в индикаторе VV(); pinMode(7,1); digitalWrite(7,1) ; pinMode(8,1); digitalWrite(8,1) ; pinMode(11,1); digitalWrite(11,1) ; pinMode(3,1); digitalWrite(3,1) ; pinMode(2,1); digitalWrite(2,1) ; } void shest(){//Отображение шестерки в индикаторе VV(); pyat(); pinMode(5,1); digitalWrite(5,1) ; } void sem(){//Отображение семерки в индикаторе VV(); odin(); pinMode(7,1); digitalWrite(7,1); } void vosem(){//Отображение восьмерки в индикаторе VV(); shest(); digitalWrite(6,1); } void devyt(){//Отображение девятки в индикаторе VV(); vosem(); digitalWrite(5,0); } void nol(){//Отображение нуля в индикаторе VV(); vosem(); digitalWrite(11,0); } int d=300; void loop() { odin();//Отображение единицы delay(d);//Задержка в d мс. dva();//отображение двойки delay(d);//и т.д... tri(); delay(d); chetyre(); delay(d); pyat(); delay(d); shest(); delay(d); sem(); delay(d); vosem(); delay(d); devyt(); delay(d); nol(); delay(d); }
В данном примере реализованы функции, отображающие соответствующие цифры на индикаторе. А в основном цикле (void loop()) эти функции вызываются один за другим с задержкой заданной переменной d.
Выражаю благодарность автору данного примера Хасиевой Алине за разработку программы.