Привет! В начальном наборе для Ардуино осталось совсем немного датчиков. Сегодня посмотрим на одноразрядный 7 сегментный индикатор.
Содержание
Такой индикатор это всего лишь несколько светодиодов собранных в корпус. Они собраны по схеме, которая позволяет нам использовать несколько светодиодов, чтобы отображать цифры и буквы.
Поскольку управлять таким индикатором можно также, как и простым светодиодом. Вспомним один из самых первых уроков. И используем программу из него. Посмотрите его еще раз, если уже забыли или пропустили.
Для того, чтобы выполнить этот урок нам понадобиться.
- Ардуино UNO
- Макетная плата
- Перемычки
- 8 резисторов 220 Ом
- 7-сегментный одноразрядный индикатор
- Кабель USB
7 сегментный индикатор
Все светодиоды внутри корпуса индикатора соединены с общим катодом. Для катода даже выделено две ножки. Они находятся в центре с каждой стороны корпуса.
Подключать каждый светодиод нужно последовательно с сопротивлением. Поэтому каждый контакт платы подключаем к Ардуино через резистор.
Схема и программа
Схема кажется громоздкой. Но, на самом деле, тут всего лишь соединяются 8 светодиодов. Они соединяются с цифровыми портами Ардуино последовательно с резисторами.
Пока что не будем искать какой конкретно светодиод нужно подключить к конкретному порту. Определим это уже в программе.
Простейший код скетча позволит нам проверить работоспособность индикатора. Для начала включим все сегменты.
int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};
void setup() {
for( int j=0; j <= 7; j++){
digitalWrite(leds[j], OUTPUT);
digitalWrite(leds[j], HIGH);
}
}
void loop() {
}
Заполним массив номерами цифровых портов. И будем обращаться к ним с помощью этого массива.
Теперь, надо понять какие порты соответствуют конкретным сегментам на индикаторе. Для этого переберем их последовательно. Добавим небольшую паузу после каждого сегмента. После чего пронумеруем.
int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};
int del = 300;
void setup() {
for( int j=0; j <= 7; j++){
digitalWrite(leds[j], OUTPUT);
delay(del);
digitalWrite(leds[j], HIGH);
}
}
void loop() {
}
Теперь мы можем добавить немного движения в схему. Для начала заставим точку мигать.
int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};
int del = 300;
void setup() {
for( int j=0; j <= 7; j++){
digitalWrite(leds[j], OUTPUT);
digitalWrite(leds[j], HIGH);
}
}
void loop() {
digitalWrite(leds[0], LOW);
delay(del);
digitalWrite(leds[0], HIGH);
delay(del);
}
Обратный отсчет
Ну и теперь напишем небольшую функцию, чтобы мы могли использовать индикатор для отображения цифр.
void digit(int x){
switch (x) {
case 1:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[4],HIGH);
break;
case 2:
digitalWrite (leds[2],HIGH);
digitalWrite (leds[3],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 3:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 4:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 5:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 6:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[3],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 7:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
break;
case 8:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[3],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 9:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
}
}
Теперь мы можем передать в функцию нужную нам цифру и получить ее на индикаторе.
Полный текст программы
Добавим в главный цикл программы вызов функции с увеличением счетчика. Напишем еще одну небольшую функцию очистки экрана. А потом посмотрим, что получилось в итоге.
int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};
int x = 0;
int del = 500;
void setup() {
for( int j=0; j <= 7; j++){
digitalWrite(leds[j], OUTPUT);
digitalWrite(leds[j], LOW);
}
}
void clean(){
for( int j=0; j <= 7; j++){
digitalWrite(leds[j], LOW);
}
}
void digit(int x){
switch (x) {
case 1:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[4],HIGH);
break;
case 2:
digitalWrite (leds[2],HIGH);
digitalWrite (leds[3],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 3:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 4:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 5:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 6:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[3],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 7:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
break;
case 8:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[3],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 9:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
digitalWrite (leds[7],HIGH);
break;
case 0:
digitalWrite (leds[1],HIGH);
digitalWrite (leds[2],HIGH);
digitalWrite (leds[3],HIGH);
digitalWrite (leds[4],HIGH);
digitalWrite (leds[5],HIGH);
digitalWrite (leds[6],HIGH);
break;
}
}
void loop() {
digit(x);
delay(del);
clean();
x++;
if (x == 10){x=0;}
}
Заключение
Мы рассмотрели одноразрядный 7 сегментный индикатор. Как и многие другие элементы, он служит для вывода информации из нашей схемы и программы для пользователя. Мы написали простейшую программу и функцию управления индикатором. Но также для него уже существуют удобные библиотеки. Рассмотрим одно такую в следующий раз.