To co jest wyświetlacz 7 segmentowy?
Wyświetlacz siedmiosegmentowy lub inaczej nazywany wskaźnikiem siedmiosegmentowym jest wyświetlaczem składającym się z siedmiu segmentów. Jest on tak skonstruowany, ponieważ służy do wyświetlania cyfr dziesiętnych. Trzeba również zwrócić uwagę na że dużo modeli ma też ósmy segment, który służy do wyświetlania kropki, chociaż jest on często pomijany i jak wpiszemy w Google "Wyświetlacz 7 segmentowy" to najczęściej będą to wyświetlacze z kropka czyli 8 segmentowe.
Jak się dobrze przyjrzymy budowie naszego wyświetlacza to zauważymy, że można na nim nie tylko wyświetlać cyfry, ale także niektóre litery znanego nam alfabetu. Takie rozwiązanie stosuje się w komputerach stacjonarnych, do wyświetlania kodów błędu na płycie głównej.
Warto zaczerpnąć nieco wiedzy historycznej:
Pierwsze siedmiosegmentowe wyświetlanie znaków można znaleźć w patentach już w roku 1903. A stało się to za pośrednictwem Carla Kinsleya, który wynalazł metodę telegraficznego przesyłania liter i cyfr oraz drukowania ich na taśmie w formacie segmentowym. Z kolei w roku 1908 F.W.Wood wynalazł już wyświetlacz ośmiosegmentowy, który wyświetlał cyfrę 4 za pomocą ukośnego paska. Było to nietypowe rozwiązanie, które zrewolucjonizowało podejście do konstruowania wyświetlaczy. Do dziś możemy zaobserwować skutki tego wynalazku w postaci bilbordów, które wyświetlają proste napisy za pośrednictwem małych diod LED.
Wracając jednak do historii w 1910 roku, zaczęto stosować wyświetlacze siedmiosegmentowe w elektrowniach na panelach sygnalizacyjnych, a były one podświetlane żarówkami. W sumie ciężko to sobie wyobrazić, jak duże musiały być te wyświetlacze. Dlatego też nie były aż tak często stosowane aż do pojawienia się diod LED w latach siedemdziesiątych.
Wtedy pojawiły się wyświetlacze, które znamy już na co dzień i często z nich korzystamy nawet nie zastanawiając się. Jeszcze niektórzy może pamiętają jak wyglądały pierwsze telefony komórkowe firmy Nokia, gdzie jakość obrazu nie była aż tak zadowalająca, a cyfry i litery były strasznie kanciate i pixelowate. To właśnie tam wykorzystywano między innymi technologię wyświetlaczy segmentowy.
Schemat podłączenia:
Jak widać na poniższym rysunku, nasz wyświetlacz składa się z 8 diod LED, od razu warto na początku zwrócić uwagę na to, że przed każdą diodą musi być zainstalowany rezystor, aby ich nie spalić. Dodatkowo widzimy że na naszym schemacie są dwa przyłącza "-", tutaj też trzeba pamiętać że trzeba obydwa te przyłącza podpiąć do naszego "-".
Schemat podłączenia wyświetlacza do Arduino:
Aby skonstruować taki schemat wystarczy, że macie w domu wyświetlacz 7 segmentowy, arduino, płytkę stykową, 7 rezystorów 220 Ω i kilka kabelków.
Poniżej przedstawiono kod do Arduino:
int a = 1; //przypisujemy wyrażenie do pinu
int b = 2; //przypisujemy wyrażenie do pinu
int c = 3; //przypisujemy wyrażenie do pinu
int d = 4; //przypisujemy wyrażenie do pinu
int e = 5; //przypisujemy wyrażenie do pinu
int f = 6; //przypisujemy wyrażenie do pinu
int g = 7; //przypisujemy wyrażenie do pinu
void setup() // Nadanie pinom funkcji sygnałowej
{
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() // pętla pozwoli nam na wyświetlanie liczb od 0 do 9
{
zero();
jeden();
dwa();
trzy();
cztery();
piec();
szesc():
siedem();
osiem();
dziewiec();
}
void zero() //funkcja wyświetlająca 0
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(e,LOW);
digitalWrite(d,LOW);
digitalWrite(f,LOW);
}
void jeden() //funkcja wyświetlająca 1
{
digitalWrite(c,HIGH);
digitalWrite(a,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(c,LOW);
digitalWrite(a,LOW);
}
void dwa() //funkcja wyświetlająca 2
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(g,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(g,LOW);
digitalWrite(e,LOW);
digitalWrite(d,LOW);
}
void trzy() //funkcja wyświetlająca 3
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(g,HIGH);
digitalWrite(d,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(g,LOW);
digitalWrite(d,LOW);
}
void cztery() //funkcja wyświetlająca 4
{
digitalWrite(a,HIGH);
digitalWrite(g,HIGH);
digitalWrite(f,HIGH);
digitalWrite(c,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(a,LOW);
digitalWrite(g,LOW);
digitalWrite(f,LOW);
digitalWrite(c,LOW);
}
void piec() //funkcja wyświetlająca 5
{
digitalWrite(b,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
}
void szesc() //funkcja wyświetlająca 6
{
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void siedem() //funkcja wyświetlająca 7
{
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(a,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(a,LOW);
}
void osiem() //funkcja wyświetlająca 8
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void dziewiec() //funkcja wyświetlająca 9
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
delay(1000); //odczekanie 1s
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
}
Na podstawie powyższego kodu skonstruowaliśmy prosty układ pomiarowy, który pozwala na mierzenie napięcia za pomocą potencjometru.
KOD
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int odczytanaWartosc = 0;
int napiecie = 0;
void setup()
{
Serial.begin(9600);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop()
{
odczytanaWartosc = analogRead(A0);
napiecie = map (odczytanaWartosc,0,1023,0,5);
Serial.println(napiecie);
if (napiecie == 0)
{
zero();
}
else if (napiecie == 1)
{
jeden();
}
else if (napiecie == 2)
{
dwa();
}
else if (napiecie == 3)
{
trzy();
}
else if (napiecie == 4)
{
cztery();
}
else
{
piec();
}
}
void zero()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
delay(1000);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(e,LOW);
digitalWrite(d,LOW);
digitalWrite(f,LOW);
}
void jeden()
{
digitalWrite(c,HIGH);
digitalWrite(a,HIGH);
delay(1000);
digitalWrite(c,LOW);
digitalWrite(a,LOW);
}
void dwa()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(g,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
delay(1000);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(g,LOW);
digitalWrite(e,LOW);
digitalWrite(d,LOW);
}
void trzy()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(g,HIGH);
digitalWrite(d,HIGH);
delay(1000);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(g,LOW);
digitalWrite(d,LOW);
}
void cztery()
{
digitalWrite(a,HIGH);
digitalWrite(g,HIGH);
digitalWrite(f,HIGH);
digitalWrite(c,HIGH);
delay(1000);
digitalWrite(a,LOW);
digitalWrite(g,LOW);
digitalWrite(f,LOW);
digitalWrite(c,LOW);
}
void piec()
{
digitalWrite(b,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
delay(1000);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
}
void szesc()
{
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void siedem()
{
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(a,HIGH);
delay(1000);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(a,LOW);
}
void osiem()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
delay(1000);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void dziewiec()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
delay(1000);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
}
Jeśli macie inny pomysł gdzie można wykorzystać nasz bazowy kod, to pochwalcie się tym w komentarzach ;)