Взаимодействие Arduino с семисегментным индикатором
Для многих приложений для отображения данных нет необходимости в использовании более дорогого жидкокристаллического дисплея. Будет достаточно и простого семисегментного индикатора.
Если вашему приложению на Arduino необходимо отображать только цифры, подумайте об использовании семисегментного индикатора. Семисегментный индикатор имеет семь светодиодов, расположенных в форме восьмерки. Он прост в использовании и экономичен в плане стоимости. На рисунке ниже показан типовой семисегментный индикатор.
Семисегментные индикаторы бывают двух типов: с общим анодом и общим катодом. Внутренняя структура обоих типов почти одинакова. Разница заключается в полярности светодиодов и общем выводе. В семисегментном индикаторе с общим катодом (такой мы использовали в экспериментах) катоды всех семи светодиодов и светодиода точки подключены к выводам 3 и 8. Чтобы использовать такой индикатор, нам необходимо подключить корпус к выводам 3 и 8 и подать +5В на другие выводы, чтобы отдельные светодиоды загорелись. Следующей схеме показана внутренняя структура семисегментного индикатора с общим катодом:
Индикатор с общим анодом является полной противоположностью. В индикаторе с общим анодом положительные выводы всех восьми светодиодов соединены вместе и подключены к выводам 3 и 8. Чтобы зажечь отдельный сегмент, вы соединяете его второй вывод с корпусом. На следующей диаграмме показана внутренняя структура семисегментного индикатора с общим анодом:
Сем сегментов обозначены как a-g, а точка как "dp", как показано на рисунке ниже:
Чтобы отобразить конкретную цифру, вы включаете отдельные сегменты, как показано в таблице ниже:
Цифра | gfedcba | abcdefg | a | b | c | d | e | f | g |
---|---|---|---|---|---|---|---|---|---|
0 | 0x3F | 0x7E | вкл | вкл | вкл | вкл | вкл | вкл | выкл |
1 | 0x06 | 0x30 | выкл | вкл | вкл | выкл | выкл | выкл | выкл |
2 | 0x5B | 0x6D | вкл | вкл | выкл | вкл | вкл | выкл | вкл |
3 | 0x4F | 0x79 | вкл | вкл | вкл | вкл | выкл | выкл | вкл |
4 | 0x66 | 0x33 | выкл | вкл | вкл | выкл | выкл | вкл | вкл |
5 | 0x6D | 0x5B | вкл | выкл | вкл | вкл | выкл | вкл | вкл |
6 | 0x7D | 0x5F | вкл | выкл | вкл | вкл | вкл | вкл | вкл |
7 | 0x07 | 0x70 | вкл | вкл | вкл | выкл | выкл | выкл | выкл |
8 | 0x7F | 0x7F | вкл | вкл | вкл | вкл | вкл | вкл | вкл |
9 | 0x6F | 0x7B | вкл | вкл | вкл | вкл | выкл | вкл | вкл |
A | 0x77 | 0x77 | вкл | вкл | вкл | выкл | вкл | вкл | вкл |
B | 0x7C | 0x1F | выкл | выкл | вкл | вкл | вкл | вкл | вкл |
C | 0x39 | 0x4E | вкл | выкл | выкл | вкл | вкл | вкл | выкл |
D | 0x5E | 0x3D | выкл | вкл | вкл | вкл | вкл | выкл | вкл |
E | 0x79 | 0x4F | вкл | выкл | выкл | вкл | вкл | вкл | вкл |
F | 0x71 | 0x47 | вкл | выкл | выкл | выкл | вкл | вкл | вкл |
Эксперимент 1
В этом эксперименте мы просто будем включать и выключать светодиоды, чтобы познакомиться с работой семисегментного индикатора.
Необходимые комплектующие
- 1 x семисегментный индикатор (общий катод);
- 1 x Arduino MEGA 2560
- 1 x макетная плата;
- перемычки.
Схема соединений
В этой схеме выводы семисегментного индикатора подключены к контактам 2-9 платы Arduino, как показано в таблице ниже. Общие выводы (3 и 8) подключены к GND, а dp остается неподключенным, так как точка не используется в этом эксперименте.
Выводы семисегментного индикатора | Выводы Arduino | Цвет провода |
---|---|---|
1(e) | 6 | оранжевый |
2(d) | 5 | белый |
3,8(COM) | GND | |
c | 4 | желтый |
5(dp) | - | |
6(b) | 3 | красный |
7(a) | 2 | синий |
9(f) | 7 | зеленовато-голубой |
10(g) | 8 | зеленый |
Код
void setup()
{
// определить режимы работы выводов
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}
void loop()
{
// цикл для включения светодиодов сегментов индикатора
for(int i=2; i<9; i++)
{
digitalWrite(i,HIGH);
delay(600);
}
// цикл для выключения светодиодов сегментов индикатора
for(int i=2; i<9; i++)
{
digitalWrite(i,LOW);
delay(600);
}
delay(1000);
}
Эксперимент 2
Описание
В этом руководстве мы свяжем семисегментный индикатор с Arduino Mega и посмотрим, как отобразить на индикаторе значения счетчика, уменьшающиеся на 1 каждую секунду.
Необходимые комплектующие
В этом эксперименте используются те же комплектующие, что и в первом случае.
Схема соединений
Схема соединений в этом эксперименте такая же, как и в первом случае.
Код
// создать массив для хранения конфигурации выводов индикатора для цифр
int num_array[10][7] = { { 1,1,1,1,1,1,0 }, // 0
{ 0,1,1,0,0,0,0 }, // 1
{ 1,1,0,1,1,0,1 }, // 2
{ 1,1,1,1,0,0,1 }, // 3
{ 0,1,1,0,0,1,1 }, // 4
{ 1,0,1,1,0,1,1 }, // 5
{ 1,0,1,1,1,1,1 }, // 6
{ 1,1,1,0,0,0,0 }, // 7
{ 1,1,1,1,1,1,1 }, // 8
{ 1,1,1,1,0,1,1 }}; // 9
// объявление функции
void Num_Write(int);
void setup()
{
// установить режимы работы выводов
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop()
{
// цикл счетчика
for (int counter = 10; counter > 0; --counter)
{
delay(1000);
Num_Write(counter-1);
}
delay(3000);
}
// эта функция записывает значения в выводы, подключенные к индикатору
void Num_Write(int number)
{
int pin= 2;
for (int j=0; j < 7; j++)
{
digitalWrite(pin, num_array[number][j]);
pin++;
}
}