U želji da naučim više izbegao sam MAX7219 i LedControl biblioteku napisanu za taj integralac i rešio da sam isprogramiram kontrolisanje dvocifrenog(po istom principu i sa više cifara) 7 segmentnog displeja sa zajedničkom katodom. :)
Ranije sam uspešno napisao program za direktno kontrolisanje jednocifrenog, a sada se pojavila potreba za više cifara..
Direktno sam povezao segmente sa otpornicima na Arduino pinove 6-12, spojio sam segmente 1. i 2. displeja, a GND 1 i 2 na tranzistore koji bi vršili ulogu prekidača, baze tranzistora na pinove 4 i 5 na Arduinu, (slika 1 u prilogu);
Poznat mi je termin multipleksiranje, ali mi nije najjasnije kako bi trebalo da izgleda napisan kod za to.. palo mi je na pamet, a kasnije sam nasao na netu da je to ispravan način da se, ukoliko je željeni broj dvocifren, broj razlaže na 2 cifre(deseticu i jedinicu) i program ukljucuje zeljene pinove prve i uz kratki delay() "prebacuje" na programiranje druge cifre.. tako da je za ljudsko oko neprimetno da je postojala pauza izmedju ispisa obe cifre.
Evo mog koda:
Code:
int gnd1=5;
int gnd2=4;
int segmenti=[7]={12,11,10,9,8,7,6};
byte kombinacije[10][7]= {
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0,1,1,1,1,1},
{1,1,1,0,0,0,0},
{1,1,1,1,1,1,1},
{1,1,1,1,0,1,1}
};
void setup() {
for(int i=4;i<13;i++)
pinMode(1,OUTPUT);
Serial.begin(9600);
}
void loop() {
while(Serial.available()==0){};
int broj=Serial.parseInt();
if(broj<10){
digitalWrite(gnd1,LOW);
digitalWrite(gnd2,HIGH);
for(int c=0;c<7;c++)
digitalWrite(segmenti[c],kombinacije[broj][c]);
}
}
int gnd1=5;
int gnd2=4;
int segmenti=[7]={12,11,10,9,8,7,6};
byte kombinacije[10][7]= {
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0,1,1,1,1,1},
{1,1,1,0,0,0,0},
{1,1,1,1,1,1,1},
{1,1,1,1,0,1,1}
};
void setup() {
for(int i=4;i<13;i++)
pinMode(1,OUTPUT);
Serial.begin(9600);
}
void loop() {
while(Serial.available()==0){};
int broj=Serial.parseInt();
if(broj<10){
digitalWrite(gnd1,LOW);
digitalWrite(gnd2,HIGH);
for(int c=0;c<7;c++)
digitalWrite(segmenti[c],kombinacije[broj][c]);
}
}
Sada mi je nejasno ako je broj dvocifren kako da se program prebaci na uredjivanje 2 cifre a da pri tom prva cifra ostane uključena, jer ako izvršim: digitalWrite(gnd1,HIGH); digitalWrite(gnd2,LOW); prva cifra se totalno isključuje.
Nadam se da sam jasno izlošio svoj problem. Ispravite me ako negde grešim. Veliko hvala unapred!
[Ovu poruku je menjao AvramKovacevic dana 17.08.2016. u 13:41 GMT+1]
A.K.___