35
конструктивно. Светодиодные контакты промаркированы метками от a до g
(и дополнительно dp – для отображения десятичной точки), и один общий
вывод, который определяет тип подключения индикатора (схема с
общим
анодом ОА, или общим катодом ОК). Зажигая
одновременно несколько
светодиодов, можно формировать на индикаторе символы цифр.
Схема одноразрядного семисегментного индикатора показана на
рисунке 2.4.
Рисунок 2.4 – Схема одноразрядного семисегментного индикатора
Для подключения одноразрядного светодиодного индикатора к
Arduino будем задействовать 7 цифровых выводов, каждый из контактов a–g
индикатора подключается к выводу Arduino
через ограничительный
резистор 470 Ом. В нашем эксперименте мы используем семисегментный
индикатор с общим катодом ОК, общий провод подсоединяем к земле. На
рисунке 2.3 показана схема подключения одноразрядного семисегментного
индикатора к плате Arduino.
36
Рисунок 2.5 – Схема подключения семисегментного индикатора к Arduino
Приступим к написанию скетча. Мы
будем на семисегментный
индикатор в
цикле выводить цифры от 0 до 9 с паузой 1 секунда.
Сформируем массив значений для цифр 0–9, где старший разряд байта
соответствует метке сегмента a индикатора, а младший – сегменту g.
byte numbers[10] = { B11111100, B01100000, B11011010, B11110010,
B01100110,
B10110110, B10111110, B11100000, B11111110, B11110110};
Для преобразования значения цифры в данные для вывода значения на
выводы Arduino будем использовать битовые операции языка Arduino:
bitRead(x,n); // получение значения n разряда байта x
Скетч эксперимента представлен в листинге 2.
// Список выводов Arduino для подключения к битам a - g
// семисегментный индикатор
int pins [7] = {2,3,4,5,6,7,8};
// значения для вывода чисел 0–9
37
номера байтов [10] = {B11111100, B01100000, B11011010, B11110010,
B01100110,
B10110110, B10111110, B11100000, B11111110, B11100110};
// переменная для хранения значения текущей цифры
int number = 0;
void setup ()
{
// Настройка выводов как выходов
для (int i = 0; i <7; i ++)
pinMode (pins [i], OUTPUT);
}
void loop ()
{
showNumber (число);
задержка (1000);
число = (число + 1)% 10;
}
// функция вывода номеров на семисегментный индикатор
void showNumber (int num)
{
для (int i = 0; i <7; i ++)
{
if (bitRead (numbers [num], 7 - i) == HIGH) // зажечь сегмент
digitalWrite (контакты [i], HIGH);
еще // вывести сегмент
digitalWrite (контакты [i], LOW);
}
}
Достарыңызбен бөлісу: