В этом уроке мы познакомимся с цифровым индикатором и создадим на его основе секундомер от 0 до 9, который будет активироваться нажатием кнопки. Для данного урока понадобятся:
1.Микроконтроллер Arduino - 1 шт;
2. Макетная плата - 1 шт;
3. Резистор 220 Ом - 7 шт;
4. Реристор 10 кОм - 1 шт;
5. кнопка - 1 шт;
6. Индикатор 1-разрядный;
7. провода "папа-папа" - 12 шт.
Подключение
Светодиодный индикатор имеет 10 выводов. Посокльку эта модель индикатора с общим анодом, то анод для всех сегментов будет общим. В качестве анодов используются выводы индикатора 3 и 8 (можно использовать любой из них). В качестве катодов используются следующие выводы индикатора: 7, 6, 4, 2, 1, 9, 10, 5 (точка). Выводы индикатора нумеруются по порядку против часовой стрелки, начиная с левого нижнего. Низ индикатора при этом обозначается маркировкой модели, нанесенной на один из его торцов.
Не забудьте, что светодиодный индикатор нельзя подключать к контроллеру напрямую, для подключения необходимо включать в цепь каждого сегмента резистор, номиналом 220-350 Ом.
Скетч для загрузки:
//Будем прибавлять двойку в цикле (чтобы пин 0 стал пином 2)
const int SIX_COUNT = 2;
const int COUNT_DIGITS = 7; //Количество пинов (сегментов)
const int button = 9; //Кнопка на пине 9
//Создание массива масок типа Byte. В значения массива запишем двоичную запись
//цифр, для их последовательного чтения. Нумерация элементов массива начинается
//с 0. Получается, что число 0 имеет запись 0b1111110 – где 0b – означает
//двоичную запись, а следующие цифры по очереди означают какие сегменты нам
//нужно зажечь на световом индикаторе. Для нуля зажигать нужно с 1 по 6 //сегменты (со 2 по 7 пины нужно подать ток)
byte arabNumbers[10] = {
0b1111110, 0b0011000, 0b1101101, 0b0111101, 0b0011011,
0b0110111, 0b1110111, 0b0011100, 0b1111111, 0b0111111
};
void setup()
{ //В цикле определим пины на выход
for (int i = 0; i <= COUNT_DIGITS; i++)
pinMode(i + SIX_COUNT, OUTPUT);
pinMode(button, INPUT);
}
void loop()
{
if (digitalRead(button) == HIGH)
{ //Нажатие кнопки
for (int i = 0; i <= 9; i++)
{ //Счет от 0 до 9
byte mask = arabNumbers[i]; //Найдем маску нужной цифры (например, цифре
//ноль – соответствует маска 1111110) и установим нужное значение для
//каждого сегмента
for (int segment = 0; segment <= COUNT_DIGITS; segment++)
{
//В переменную запишем, нужно ли зажигать светодиод сегмента
boolean onLamp = bitRead(mask, segment);
//Зажигаем либо гасим сегмент
digitalWrite(segment + SIX_COUNT, onLamp);
}
delay(1000); //Задержка на секунду
}
for (int i = 0; i <= COUNT_DIGITS; i++) //Выключить все сегменты
digitalWrite(i + SIX_COUNT, LOW);
}
}