IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
CV-12
4-místný sedmisegmentový displej
Tento displej použijeme pro vytvoření stopek.
Pokud se použije 4-místný 7-segmentový LED displej, pin “společná anoda nebo katoda“ se používá pro kontrolu zobrazené číslice. Může být tedy zobrazena jenom jedna číslice. Nicméně, protože je to založeno na efektu Persistence of Vision, můžeme vidět čtyři 7-segmentové displeje a všechny budou zobrazovat nějaká čísla. Důvodem je, že elektronická rychlost skenování je příliš vysoká a my tedy nestihneme zaznamenat blikání.
Budeme potřebovat
-
Arduino Uno (nebo jinou desku). 2. USB kabel. 3. Nepájivé kontaktní pole. 4. Vodiče 5. 4-místný sedmisegmentový displej
-
8x Odpor 220Ω
Zapojení
Obrázek 1: Zapojení 4x7 segmentového displeje
_ IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
CV-12
Tabulka zapojení pinů
| 4x7 segmentový displej | Arduino |
|---|---|
| a | 2 |
| b | 3 |
| c | 4 |
| d | 5 |
| e | 6 |
| f | 7 |
| g | 8 |
| p | 9 |
| D1 | 10 |
| D2 | 12 |
| D3 | 11 |
| D4 | 13 |
Obrázek 2: Označení pinů na displeji
Obrázek 3: Reálné zapojení 4x7 segmentového displeje
_ IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
CV-12
Obrázek 4: Jiný pohled na zapojení 4x7 segmentového displeje
Instalace knihoven
Staženou knihovnu „ TimerOne_r11.zip “ rozbalte do adresáře: „ C:\Users\uživatelské_jméno\Documents\Arduino\Libraries “ ještě před kompilací programu.
Program
Do Arduino IDE vložíme kód programu a nahrajeme jej do Arduina:
#include <TimerOne.h>
//#define CC// Jestli máme CC (společná katoda) displej
#define CA// Jestli máme CA (společná anoda) displej
#ifdef CA
#define ON_NUMBER LOW//vymení v kódu před kompilací
ON_NUMBER za LOW
#define OFF_NUMBER HIGH
#define ON_DIGIT HIGH
#define OFF_DIGIT LOW
#else
#define ON_NUMBER HIGH
#define OFF_NUMBER LOW
#define ON_DIGIT LOW
#define OFF_DIGIT HIGH
#endif
_ CV-12
IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
// Připojení displeje k pinům Arduino
const int a = 2;
const int b = 3;
const int c = 4;
const int d = 5;
const int e = 6;
const int f = 7;
const int g = 8;
const int p = 9;
const int d1 = 10;
const int d2 = 11;
const int d3 = 12;
const int d4 = 13;
// n představuje hodnotu zobrazenou na displeji.
// například při zobrazení n = 0 se zobrazí 0000. Maximální
hodnota je 9999.
long n = 0;
int x = 100;
// del je pauza mezi spínanými číslovkami, 5ms je dobrá hodnota
pro hodiny.
int del = 5;
// nastavit count = 0. Zde je count hodnota počítání, která se
zvyšuje o 1 každých 0,1 sekundy,
// znamená, že 1 sekunda se počítá, když je hodnota 10
int count = 0;
void setup() {
// nastavení pinů displeje jako výstupu
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
// nastavime časovač o délce 100000 mikrosekund
// (nebo 0,1s - nebo 10Hz => led 5x bliká,
// 5 cyklů zapnutí a vypnutí, za sekundu)
Timer1.initialize(100000);
Timer1.attachInterrupt( add ); // připojme servisní rutinu
}
void loop() {
_ CV-12
IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
clearLEDs(); // vypnout všechny segmenty
pickDigit(0); // rozsvítit displej d1
pickNumber(n%10);// získat a ukázat hodnotu tisíce
delay(del); // pauza 5ms
clearLEDs();
pickDigit(1); // rozsvítit displej d2
pickNumber(n%100/10);// získat a ukázat hodnotu sto
delay(del);
clearLEDs();
pickDigit(2); // rozsvítit displej d3
pickNumber((n%1000)/100);// získat a ukázat hodnotu deset
delay(del);
clearLEDs();
pickDigit(3); // rozsvítit displej d4
pickNumbern/1000;// získat a ukázat hodnotu do 9
delay(del);
}
void pickDigit(int x) { // vybrat displej
// Tento 7 segmentový displej je CA (se společnou anodou) nebo
CC (se společnou katodou)
// Takže také pomocí digitalWrite nastavíme všechny anody na
LOW (jestli displej je CA )
// nebo na HIGH (jestli displej je CC) a celý displej vypneme
digitalWrite(d1, OFF_DIGIT);
digitalWrite(d2, OFF_DIGIT);
digitalWrite(d3, OFF_DIGIT);
digitalWrite(d4, OFF_DIGIT);
switch(x){
case 0:
digitalWrite(d1, ON_DIGIT); // zapnout displej d1
break;
case 1:
digitalWrite(d2, ON_DIGIT); // zapnout displej d2
break;
case 2:
digitalWrite(d3, ON_DIGIT); // zapnout displej d3
break;
default:
digitalWrite(d4, ON_DIGIT); // zapnout displej d4
break;
}
}
// Funkce je pro ovládání 7 segmentového displeje pro zobrazení
čísel
_ CV-12
IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
// Zde "x" je číslo, které chceš zobrazit. Je to celé číslo od 0
do 9
void pickNumber(int x) {
switch(x) {
default:
zero();
break;
case 1:
one();
break;
case 2:
two();
break;
case 3:
three();
break;
case 4:
four();
break;
case 5:
five();
break;
case 6:
six();
break;
case 7:
seven();
break;
case 8:
eight();
break;
case 9:
nine();
break;
}
}
// vypnout všechny segmenty
void clearLEDs() {
digitalWrite(a, OFF_NUMBER);
digitalWrite(b, OFF_NUMBER);
digitalWrite(c, OFF_NUMBER);
digitalWrite(d, OFF_NUMBER);
digitalWrite(e, OFF_NUMBER);
digitalWrite(f, OFF_NUMBER);
digitalWrite(g, OFF_NUMBER);
digitalWrite(p, OFF_NUMBER);
}
// zobrazit 0 na displeji
void zero() {
_ CV-12
IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
digitalWrite(a, ON_NUMBER);
digitalWrite(b, ON_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, ON_NUMBER);
digitalWrite(e, ON_NUMBER);
digitalWrite(f, ON_NUMBER);
digitalWrite(g, OFF_NUMBER);
}
// zobrazit 1 na displeji
void one() {
digitalWrite(a, OFF_NUMBER);
digitalWrite(b, ON_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, OFF_NUMBER);
digitalWrite(e, OFF_NUMBER);
digitalWrite(f, OFF_NUMBER);
digitalWrite(g, OFF_NUMBER);
}
// zobrazit 2 na displeji
void two() {
digitalWrite(a, ON_NUMBER);
digitalWrite(b, ON_NUMBER);
digitalWrite(c, OFF_NUMBER);
digitalWrite(d, ON_NUMBER);
digitalWrite(e, ON_NUMBER);
digitalWrite(f, OFF_NUMBER);
digitalWrite(g, ON_NUMBER);
}
// zobrazit 3 na displeji
void three() {
digitalWrite(a, ON_NUMBER);
digitalWrite(b, ON_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, ON_NUMBER);
digitalWrite(e, OFF_NUMBER);
digitalWrite(f, OFF_NUMBER);
digitalWrite(g, ON_NUMBER);
}
// zobrazit 4 na displeji
void four() {
digitalWrite(a, OFF_NUMBER);
digitalWrite(b, ON_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, OFF_NUMBER);
digitalWrite(e, OFF_NUMBER);
digitalWrite(f, ON_NUMBER);
digitalWrite(g, ON_NUMBER);
}
// zobrazit 5 na displeji
_ CV-12
IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
void five() {
digitalWrite(a, ON_NUMBER);
digitalWrite(b, OFF_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, ON_NUMBER);
digitalWrite(e, OFF_NUMBER);
digitalWrite(f, ON_NUMBER);
digitalWrite(g, ON_NUMBER);
}
// zobrazit 6 na displeji
void six() {
digitalWrite(a, ON_NUMBER);
digitalWrite(b, OFF_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, ON_NUMBER);
digitalWrite(e, ON_NUMBER);
digitalWrite(f, ON_NUMBER);
digitalWrite(g, ON_NUMBER);
}
// zobrazit 7 na displeji
void seven() {
digitalWrite(a, ON_NUMBER);
digitalWrite(b, ON_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, OFF_NUMBER);
digitalWrite(e, OFF_NUMBER);
digitalWrite(f, OFF_NUMBER);
digitalWrite(g, OFF_NUMBER);
}
// zobrazit 8 na displeji
void eight() {
digitalWrite(a, ON_NUMBER);
digitalWrite(b, ON_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, ON_NUMBER);
digitalWrite(e, ON_NUMBER);
digitalWrite(f, ON_NUMBER);
digitalWrite(g, ON_NUMBER);
}
// zobrazit 9 na displeji
void nine() {
digitalWrite(a, ON_NUMBER);
digitalWrite(b, ON_NUMBER);
digitalWrite(c, ON_NUMBER);
digitalWrite(d, ON_NUMBER);
digitalWrite(e, OFF_NUMBER);
digitalWrite(f, ON_NUMBER);
digitalWrite(g, ON_NUMBER);
}
_ CV-12
IT3 – RBT – Arduino – 4-místný sedmisegmentový displej
void add() {
// přepnout LED
count ++;
if(count == 10) {
count = 0;
n++;
if(n == 10000) {
n = 0;
}
}
}
Citace:
Arduino MAXI Starter kit OD BASTLÍŘŮ BASTLÍŘŮM - Lekce 19 Stopky - 4-místný sedmisegmentový displej
_