🚚 Besplatna dostava za narudžbe veće od 35EUR

7 SEGMENTNI DISPLAY

7 SEGMENTNI DISPLAY-Uncategorized

ŠTO SU?

Sedam segmentni display ili sedam segmentni indikator je popularno rečeno old-school način prikaza arapskih brojeva. Više znakova mogu prikazivati 9, 14 ili 16 segmentni displayi. Alternativno, postoje slični ekrani koji prikazuju i druge simbole, npr. LED matrice.

Ime su dobili po tome što se sastoje od 7 segmenata, vidljivo na slici iznad. Tri segmenta su vodoravna i četiri okomita. Svaki segment svijetli pomoću LCD ili LED tehnologije. Zapravo, mnoštvo je načina na koji se osjetljavaju segmentni, npr. vrlo popularne nixie lampe.

 

KAKO RADE?

Zadržimo se na modernim LED 7 segmentnim displayima. Za početak odjelimo ih na one sa zajedničkom katodom(-) i zajedničkom anodom(+). Jednostavno je, displaye sa zajedničkom katodom spojiti ćemo na gnd pin, a zatim s digitalWrite(pin, HIGH); trigati segment displaya i obratno. Ubrzo detaljnije.

Slika iznad prikazuje nam nožice displaya, ukupno 10. Srednja nožica gore i dolje odnosi se na zajedničku katodu, odnosno anodu ovisno o modelu. Ostalih 8 otpada na 7 segmenata displaya plus točka koja se nalazi u donjem desnom uglu. Pogledajmo pinout.
Pinout se odnosi na display sa zajedničkom katodom i prikazuje koja nožica triga koji segment. Npr. spojim (-) nožicu s (-) polom baterije, a pin8 preko otpornika s plus polom i zasvjetliti će nam točka.
Ako koristima display sa zajedničkom anodom, zamjenimo polove i dobijemo istu stvar.

Naravno da nećemo premještati kabliće za svaki znak koji želimo prikazati pa idemo spojiti sve na Dasduino.

 

KONTROLIRANJE S DASDUINOM

Pa za početak spojimo pinove na Dasduino kako prikazuju slike. NAPOMENA: ovdje koristimo display sa zajedničkom katodom, ako imate zajedničku anodu za sada samo spojite +5V s Dasduina na pinove koji su povezani crnim kablićem (gnd).

Evo i mala tablica spajanja:
Nama posebnom razloga zašto smo odabrali ove pinove, slobodno birajte koje želite. Ako vam display zauzima previše pinova razmislite o korištenju shift registra.

Što i kako prikazati?

Slika iznad prikazuje neke od simbola koje možemo “aktivirati” na displayu. Ponovimo još jednom logiku uz pomoć tablice:
Brojevi 0 i 1 označavaju upaljeno i ugašeno, odnosno 0-LOW i 1-HIGH. Ponovno, ovo se odnosi na displaye sa zajedničkom katodom. Ako koristite zajedničku anodu jednostavno zamjenite nule i jedinice.

Zapišimo i jedan konkretan Arduino kod. Upalimo broj 1, a nakon pola sekunde broj 2.

void setup()
{
  // napraviti cemo mali loop koji pretvara pinove od 2 do 9 u izlazne
  for(int i=2; i<=9; i++)
  {
    pinMode(i, OUTPUT);
  }
}
void loop()
{
  // palimo broj jedan
  digitalWrite(5, HIGH);
  digitalWrite(8, HIGH);
  // pauza 500ms = 0.5s
  delay(500);
  // gasimo znakove koji su preostali na ekranu
  // kako se ne bi pomješali sa znamenkom dva
  digitalWrite(5, LOW);
  digitalWrite(8, LOW);
  // palimo broj dva
  digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  // još jedna pauza kako bi stigli oko registrirati
  // promjenu prije nego se loop krene ispocetka
  delay(500);
  // gasimo segmente broja dva
  digitalWrite(2, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
}

I tako dalje za svaku znamenku. Jako puno koda. Jedan od načina da si olakšamo je da napravimo funkciju za svaki znak koji koristimo zatim ju pozovemo kada želimo:

// funkcija za znak 1
void Jedan()
{
  digitalWrite(5, HIGH);
  digitalWrite(8, HIGH);
}
// funkcija za znak 2
void Dva()
{
  digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
}
// fukkcija za brisanje preostalih segmenata
void Ocisti()
{
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
}

Kod iz prvog primjera sada bi izgledao ovako:

void setup()
{
  // napraviti cemo mali loop koji pretvara pinove od 2 do 9 u izlazne
  for(int i=2; i<=9; i++)
  {
    pinMode(i, OUTPUT);
  }
}
void loop()
{
  Jedan(); //palimo broj jedan
  delay(500);  //pauza
  Ocisti(); //brisemo preostale segmente
  Dva(); //palimo broj dva
  delay(500); //pauza
  Ocisti(); //brisemo preostale segmente
}
void Jedan()
{
  digitalWrite(5, HIGH);
  digitalWrite(8, HIGH);
}
// funkcija za znak 2
void Dva()
{
  digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
}
// fukkcija za brisanje preostalih segmenata
void Ocisti()
{
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
}

Ovo, naravno, ima smisla kada češće koristimo isti znak nego što je korišten u ovom primjeru. Iste te funkcije možemo staviti u library te ih pozivati po želji. Pogledajte naš tutorial o tome kako napraviti vlastiti Arduino library koji upravo kontrolira ove displaye.