Arduino program

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Arduino program

Príspevok od používateľa jankrizan » 21 Feb 2024, 17:57

Zdravím.
Chcem vás (arduino nadšencov) poprosiť o radu a pomoc s kodom pre moje zapojenie. Problém je, že presvitajú niektoré segmenty LED displeja a neviem ich zhasnúť. Niečo málo v programe arduina viem zmeniť, ale zásadné príkazy povely neovládam. K fotke. Displej nie je presvietený, len farby skresľuje foťák. Môj výtvor (upravený)

Kód: Vybrať všetko

v_meter8_dva_displeje_anoda_final.ino]

Original z internetu

Kód: Vybrať všetko

v_meter_orig.ino
Za pochopenie a pomoc Ďakujem.
Prílohy
ukazka.jpg
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Arduino program

Príspevok od používateľa jankrizan » 21 Feb 2024, 18:09

Všimol som si,že kody nie sú vložené. Poprosím o radu ako sa to vkladá. Ctrl C a ctrl V zjavne nefungujú. Ďakujem.
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: Arduino program

Príspevok od používateľa dan21 » 21 Feb 2024, 18:16

Neviem ci to pomoze, ale skus dat pre display nejaky matny priesvitny plast (sklo)
Niekedy sa take davali do LED hodin :-)
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Arduino program

Príspevok od používateľa jankrizan » 21 Feb 2024, 18:21

Vložím ich ako txt.
Môj kod upravený.
/*
Read me

Use all this information at your own risk, i hold no responsibility for any and all indirect or dicrect damage to your arduino, hardware and software of your pc, any electronic devices if you choose to use this information.

This meter only can measure up to 5V

This meter cannot measure negative voltage and make sure you connect the probes to the battery in the correct way (red probe(A0) to the positive side of the battery and black probe(GND) to the negative side of the battery)

*/
int a=12;
int b=11;
int c=10;
int d=9;
int e=8;
int f=7;
int g=6;

int gnd1=5;
int gnd2=4;
int gnd3=3;
int gnd4=2;
int gnd5=0;
int gnd6=A2;
int gnd7=A3;
int gnd8=A4;
int gnd9=A5;
int inpa=A0;
int inpb=A1;
int t;
int v=100;
float Reading;
int OneDigit, TenDigit, HundredDigit, FigureDigit, FiveDigit, SixDigit, SevenDigit, EightDigit;
void mask(int num, int aa, int bb, int cc, int dd, int ee, int ff, int gg)
{
switch (num)
{
case 0 :
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 1 :
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 2 :
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, LOW);
break;

case 3 :
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, LOW);
break;

case 4 :
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 5 :
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 6 :
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 7 :
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 8 :
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 9 :
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 10 : //V
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 11 : //A
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 12 : // print V
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 13 : // print _
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 14 : // print S
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 15 : // print //t
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;


}
}

void setup()
{
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(gnd5,OUTPUT);
pinMode(gnd1,OUTPUT);
pinMode(gnd2,OUTPUT);
pinMode(gnd3,OUTPUT);
pinMode(gnd4,OUTPUT);
pinMode(gnd6,OUTPUT);
pinMode(gnd7,OUTPUT);
pinMode(gnd8,OUTPUT);
pinMode(gnd9,OUTPUT);
pinMode(inpa,INPUT);
pinMode(inpb,INPUT_PULLUP);


}

void loop ()
{
t=analogRead(inpb);
float TempOneDigit;
int i;
Reading = (analogRead(inpa)*10.00/10230.00);
if(t>v)
{
FigureDigit = 10;
}
else
if(t<v)
{
FigureDigit = 11;
}
HundredDigit = int(Reading) % 10;
TenDigit = int ((Reading-HundredDigit )*10) % 10;
TempOneDigit = int(Reading * 10);
OneDigit = int ((Reading - float(TempOneDigit/10))* 100) %10;
FiveDigit = 12;
SixDigit = 13;
SevenDigit = 14;
EightDigit = 15;



for (i=0 ; i<20; i++)
{
mask (OneDigit, a, b, c, d, e, f, g);
digitalWrite(gnd3, LOW);
digitalWrite(gnd2, LOW);
digitalWrite(gnd1, LOW);
digitalWrite(gnd4, HIGH);
digitalWrite(gnd5, HIGH);
digitalWrite(gnd6, LOW);
digitalWrite(gnd7, LOW);
digitalWrite(gnd8, LOW);
digitalWrite(gnd9, LOW);
delay(3);

mask (TenDigit, a, b, c, d, e, f ,g);
digitalWrite(gnd3, HIGH);
digitalWrite(gnd2, LOW);
digitalWrite(gnd1, LOW);
digitalWrite(gnd4, LOW);
digitalWrite(gnd5, LOW);
digitalWrite(gnd6, LOW);
digitalWrite(gnd7, LOW);
digitalWrite(gnd8, LOW);
digitalWrite(gnd9, LOW);
delay(3);

mask (HundredDigit, a, b, c, d, e, f ,g);
digitalWrite(gnd3, LOW);
if (HundredDigit >= 1)
digitalWrite(gnd2, HIGH);
digitalWrite(gnd1, LOW);
digitalWrite(gnd4, LOW);
digitalWrite(gnd5, HIGH);
digitalWrite(gnd6, LOW);
digitalWrite(gnd7, LOW);
digitalWrite(gnd8, LOW);
digitalWrite(gnd9, LOW);
delay(3);

mask (FigureDigit, a, b, c, d, e, f ,g);
digitalWrite(gnd3, LOW);
digitalWrite(gnd2, LOW);
digitalWrite(gnd1, HIGH);
digitalWrite(gnd4, LOW);
digitalWrite(gnd5, HIGH);
digitalWrite(gnd6, LOW);
digitalWrite(gnd7, LOW);
digitalWrite(gnd8, LOW);
digitalWrite(gnd9, LOW);
delay(3);

mask (FiveDigit, a, b, c, d, e, f, g);
digitalWrite(gnd3, LOW);
digitalWrite(gnd2, LOW);
digitalWrite(gnd1, LOW);
digitalWrite(gnd4, LOW);
digitalWrite(gnd5, HIGH);
digitalWrite(gnd6, HIGH);
digitalWrite(gnd7, LOW);
digitalWrite(gnd8, LOW);
digitalWrite(gnd9, LOW);
delay(3);

mask (SixDigit, a, b, c, d, e, f ,g);
digitalWrite(gnd3, LOW);
digitalWrite(gnd2, LOW);
digitalWrite(gnd1, LOW);
digitalWrite(gnd4, LOW);
digitalWrite(gnd5, HIGH);
digitalWrite(gnd6, LOW);
digitalWrite(gnd7, HIGH);
digitalWrite(gnd8, LOW);
digitalWrite(gnd9, LOW);
delay(3);

mask (SevenDigit, a, b, c, d, e, f ,g);
digitalWrite(gnd3, LOW);
digitalWrite(gnd2, LOW);
digitalWrite(gnd1, LOW);
digitalWrite(gnd4, LOW);
digitalWrite(gnd5, HIGH);
digitalWrite(gnd6, LOW);
digitalWrite(gnd7, LOW);
digitalWrite(gnd8, HIGH);
digitalWrite(gnd9, LOW);
delay(3);
mask (EightDigit, a, b, c, d, e, f ,g);
digitalWrite(gnd3, LOW);
digitalWrite(gnd2, LOW);
digitalWrite(gnd1, LOW);
digitalWrite(gnd4, LOW);
digitalWrite(gnd5, HIGH);
digitalWrite(gnd6, LOW);
digitalWrite(gnd7, LOW);
digitalWrite(gnd8, LOW);
digitalWrite(gnd9, HIGH);
delay(3);

}}


a originál z ktorého som vychádzal.
/*
Read me

Use all this information at your own risk, i hold no responsibility for any and all indirect or dicrect damage to your arduino, hardware and software of your pc, any electronic devices if you choose to use this information.

This meter only can measure up to 5V

This meter cannot measure negative voltage and make sure you connect the probes to the battery in the correct way (red probe(A0) to the positive side of the battery and black probe(GND) to the negative side of the battery)

*/
int a=13;
int b=12;
int c=11;
int d=10;
int e=9;
int f=8;
int g=7;
int deci = 3;
int gnd1=6;
int gnd2=5;
int gnd3=4;
int inp=A0;

float Reading;
int OneDigit, TenDigit, HundredDigit;

void mask(int num, int aa, int bb, int cc, int dd, int ee, int ff, int gg)
{
switch (num)
{
case 0 :
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, LOW);
break;

case 1 :
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 2 :
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 3 :
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 4 :
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 5 :
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 6 :
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 7 :
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 8 :
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 9 :
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

}
}

void setup()
{
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(deci,OUTPUT);
pinMode(gnd1,OUTPUT);
pinMode(gnd2, OUTPUT);
pinMode(gnd3, OUTPUT);
pinMode(inp, INPUT);
digitalWrite(deci, HIGH);
}

void loop ()
{
float TempOneDigit;
int i;
Reading = (analogRead(inp)*5.00/1023.00);
HundredDigit = int(Reading) % 10;
TenDigit = int ((Reading-HundredDigit )*10) % 10;
TempOneDigit = int(Reading * 10);
OneDigit = int ((Reading - float(TempOneDigit/10))* 100) %10;

for (i=0 ; i<20 ; i++) {
mask (OneDigit, a, b, c, d, e, f, g);
digitalWrite(gnd3,LOW);
digitalWrite(gnd2, HIGH);
digitalWrite(gnd1, HIGH);
delay(5);
mask (TenDigit, a, b, c, d, e, f ,g);
digitalWrite(gnd3,HIGH);
digitalWrite(gnd2, LOW);
digitalWrite(gnd1, HIGH);
delay(5);
mask (HundredDigit, a, b, c, d, e, f ,g);
digitalWrite(gnd3,HIGH);
digitalWrite(gnd2, HIGH);
digitalWrite(gnd1, LOW);
delay(5);

}

}
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Arduino program

Príspevok od používateľa jankrizan » 21 Feb 2024, 18:27

To sklíčko nepomôže, to som skúšal. To by som musel dať veľmi tmavé a už by to ovplyvnilo aj funkčné segmenty (slabý svit).
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Arduino program

Príspevok od používateľa jankrizan » 21 Feb 2024, 18:41

Tak už som to pochopil, to vkladanie kodu.
Môj upravený

Kód: Vybrať všetko

/*
Read me

Use all this information at your own risk, i hold no responsibility for any and all indirect or dicrect damage to your arduino, hardware and software of your pc, any electronic devices if you choose to use this information.

This meter only can measure up to 5V

This meter cannot measure negative voltage and make sure you connect the probes to the battery in the correct way (red probe(A0) to the positive side of the battery and black probe(GND) to the negative side of the battery)

*/
int a=12;
int b=11;
int c=10;
int d=9;
int e=8;
int f=7;
int g=6;

int gnd1=5;
int gnd2=4;
int gnd3=3;
int gnd4=2;
int gnd5=0;
int gnd6=A2;
int gnd7=A3;
int gnd8=A4;
int gnd9=A5;
int inpa=A0;
int inpb=A1;
int t;
int v=100;
float Reading;
int OneDigit, TenDigit, HundredDigit, FigureDigit, FiveDigit, SixDigit, SevenDigit, EightDigit;
void mask(int num, int aa, int bb, int cc, int dd, int ee, int ff, int gg) 
{ 
switch (num) 
{ 
case 0 :
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 1 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 2 : 
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, LOW);
break;

case 3 : 
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, LOW);
break;

case 4 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 5 : 
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 6 : 
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 7 : 
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 8 : 
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 9 : 
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 10 : //V
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 11 : //A
digitalWrite(aa, LOW);
digitalWrite(bb, LOW);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 12 : // print V
digitalWrite(aa, HIGH); 
digitalWrite(bb, LOW);   
digitalWrite(cc, LOW);   
digitalWrite(dd, LOW);   
digitalWrite(ee, LOW);   
digitalWrite(ff, LOW);   
digitalWrite(gg, HIGH); 
break;

   case 13 : // print _
digitalWrite(aa, HIGH);   
digitalWrite(bb, HIGH);   
digitalWrite(cc, HIGH);   
digitalWrite(dd, HIGH);   
digitalWrite(ee, HIGH);   
digitalWrite(ff, HIGH);   
digitalWrite(gg, HIGH); 
      break;
      
  case 14 : // print S
digitalWrite(aa, LOW);   
digitalWrite(bb, HIGH);   
digitalWrite(cc, LOW);   
digitalWrite(dd, LOW);   
digitalWrite(ee, HIGH);   
digitalWrite(ff, LOW);   
digitalWrite(gg, LOW); 
     break;     
    
   case 15 : // print //t
digitalWrite(aa, HIGH);   
digitalWrite(bb, HIGH);   
digitalWrite(cc, HIGH);   
digitalWrite(dd, LOW);   
digitalWrite(ee, LOW);   
digitalWrite(ff, LOW);   
digitalWrite(gg, LOW); 
     break;           


}
}

void setup()
{
  pinMode(a,OUTPUT);
  pinMode(b,OUTPUT);
  pinMode(c,OUTPUT);
  pinMode(d,OUTPUT);
  pinMode(e,OUTPUT);
  pinMode(f,OUTPUT);
  pinMode(g,OUTPUT);
  pinMode(gnd5,OUTPUT);   
  pinMode(gnd1,OUTPUT);
  pinMode(gnd2,OUTPUT);
  pinMode(gnd3,OUTPUT);
  pinMode(gnd4,OUTPUT);
  pinMode(gnd6,OUTPUT);
  pinMode(gnd7,OUTPUT);
  pinMode(gnd8,OUTPUT);
  pinMode(gnd9,OUTPUT);
  pinMode(inpa,INPUT);
  pinMode(inpb,INPUT_PULLUP); 
  
 
}
  
 void loop ()
 {
  t=analogRead(inpb);
  float TempOneDigit;
   int i;
Reading = (analogRead(inpa)*10.00/10230.00); 
if(t>v)
{
FigureDigit = 10;
}
 else  
if(t<v)
{
FigureDigit = 11;
}
HundredDigit = int(Reading) % 10;
TenDigit = int ((Reading-HundredDigit )*10) % 10;
TempOneDigit = int(Reading * 10);
OneDigit = int ((Reading - float(TempOneDigit/10))* 100) %10;
FiveDigit = 12;
SixDigit = 13;
SevenDigit = 14;
EightDigit = 15;



for (i=0 ; i<20; i++)
{
 mask (OneDigit, a, b, c, d, e, f, g);
 digitalWrite(gnd3, LOW);
 digitalWrite(gnd2, LOW);
 digitalWrite(gnd1, LOW);
 digitalWrite(gnd4, HIGH);
 digitalWrite(gnd5, HIGH);
 digitalWrite(gnd6, LOW);
 digitalWrite(gnd7, LOW); 
 digitalWrite(gnd8, LOW);
 digitalWrite(gnd9, LOW); 
  delay(3);
  
 mask (TenDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, HIGH);
 digitalWrite(gnd2, LOW);
 digitalWrite(gnd1, LOW);
 digitalWrite(gnd4, LOW);
 digitalWrite(gnd5, LOW);
 digitalWrite(gnd6, LOW);
 digitalWrite(gnd7, LOW); 
 digitalWrite(gnd8, LOW);
 digitalWrite(gnd9, LOW); 
 delay(3);
 
 mask (HundredDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, LOW);
 if (HundredDigit >= 1)    
 digitalWrite(gnd2, HIGH);
 digitalWrite(gnd1, LOW);
 digitalWrite(gnd4, LOW);
 digitalWrite(gnd5, HIGH);
 digitalWrite(gnd6, LOW);
 digitalWrite(gnd7, LOW); 
 digitalWrite(gnd8, LOW);
 digitalWrite(gnd9, LOW);
 delay(3);
 
mask (FigureDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, LOW); 
 digitalWrite(gnd2, LOW);
 digitalWrite(gnd1, HIGH);
 digitalWrite(gnd4, LOW);
 digitalWrite(gnd5, HIGH);
 digitalWrite(gnd6, LOW);
 digitalWrite(gnd7, LOW); 
 digitalWrite(gnd8, LOW);
 digitalWrite(gnd9, LOW);
 delay(3);

  mask (FiveDigit, a, b, c, d, e, f, g);
 digitalWrite(gnd3, LOW);
 digitalWrite(gnd2, LOW); 
 digitalWrite(gnd1, LOW);
 digitalWrite(gnd4, LOW);
 digitalWrite(gnd5, HIGH);
 digitalWrite(gnd6, HIGH);
 digitalWrite(gnd7, LOW); 
 digitalWrite(gnd8, LOW);
 digitalWrite(gnd9, LOW); 
  delay(3);
  
 mask (SixDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, LOW);
 digitalWrite(gnd2, LOW);
 digitalWrite(gnd1, LOW);
 digitalWrite(gnd4, LOW);
 digitalWrite(gnd5, HIGH);
 digitalWrite(gnd6, LOW);
 digitalWrite(gnd7, HIGH); 
 digitalWrite(gnd8, LOW);
 digitalWrite(gnd9, LOW); 
 delay(3);
 
 mask (SevenDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, LOW);   
 digitalWrite(gnd2, LOW); 
 digitalWrite(gnd1, LOW);
 digitalWrite(gnd4, LOW);
 digitalWrite(gnd5, HIGH);
 digitalWrite(gnd6, LOW);
 digitalWrite(gnd7, LOW); 
 digitalWrite(gnd8, HIGH);
 digitalWrite(gnd9, LOW);
 delay(3);
mask (EightDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, LOW); 
 digitalWrite(gnd2, LOW); 
 digitalWrite(gnd1, LOW);
 digitalWrite(gnd4, LOW);
 digitalWrite(gnd5, HIGH);
 digitalWrite(gnd6, LOW);
 digitalWrite(gnd7, LOW); 
 digitalWrite(gnd8, LOW);
 digitalWrite(gnd9, HIGH);
 delay(3);
 
}}
Original z internetu

Kód: Vybrať všetko

/*
Read me

Use all this information at your own risk, i hold no responsibility for any and all indirect or dicrect damage to your arduino, hardware and software of your pc, any electronic devices if you choose to use this information.

This meter only can measure up to 5V

This meter cannot measure negative voltage and make sure you connect the probes to the battery in the correct way (red probe(A0) to the positive side of the battery and black probe(GND) to the negative side of the battery)

*/
int a=13;
int b=12;
int c=11;
int d=10;
int e=9;
int f=8;
int g=7;
int deci = 3;
int gnd1=6;
int gnd2=5;
int gnd3=4;
int inp=A0;

float Reading;
int OneDigit, TenDigit, HundredDigit;

void mask(int num, int aa, int bb, int cc, int dd, int ee, int ff, int gg) 
{ 
switch (num) 
{ 
case 0 :
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, LOW);
break;

case 1 : 
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 2 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 3 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 4 : 
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 5 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 6 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 7 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 8 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 9 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

}
}

void setup()
{
  pinMode(a,OUTPUT);
  pinMode(b,OUTPUT);
  pinMode(c,OUTPUT);
  pinMode(d,OUTPUT);
  pinMode(e,OUTPUT);
  pinMode(f,OUTPUT);
  pinMode(g,OUTPUT);
  pinMode(deci,OUTPUT); 
  pinMode(gnd1,OUTPUT);
  pinMode(gnd2, OUTPUT);
  pinMode(gnd3, OUTPUT);
  pinMode(inp, INPUT); 
  digitalWrite(deci, HIGH);
}
  
 void loop ()
 {
   float TempOneDigit;
   int i;
Reading = (analogRead(inp)*5.00/1023.00);
HundredDigit = int(Reading) % 10;
TenDigit = int ((Reading-HundredDigit )*10) % 10;
TempOneDigit = int(Reading * 10);
OneDigit = int ((Reading - float(TempOneDigit/10))* 100) %10;

for (i=0 ; i<20 ; i++) {
 mask (OneDigit, a, b, c, d, e, f, g);
 digitalWrite(gnd3,LOW);
 digitalWrite(gnd2, HIGH);
 digitalWrite(gnd1, HIGH);
 delay(5);
 mask (TenDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3,HIGH);
 digitalWrite(gnd2, LOW);
 digitalWrite(gnd1, HIGH);
 delay(5);
 mask (HundredDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3,HIGH);
 digitalWrite(gnd2, HIGH);
 digitalWrite(gnd1, LOW);
 delay(5);

}

 }

Nech mi administrátor prepáči, že so tak zaplnil stránky.
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4319
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: Arduino program

Príspevok od používateľa misocko » 21 Feb 2024, 19:07

keď dobre vidim, Ty meniš masku (zobrazovaný udaj) pri aktivnych GND pre niektore pozicie.
Pred zmenou masky by som rozhodne vypol vsetky GND.
takze:
vsetky GND do LOW
maska
potrebne GND do HIGH
delay
Vsetky GND do LOW
dalsi maska
...
okrem toho by som digitalWrite prerobil na priamu manipulaciu portu, nakoľko ta cela zbehne v jednom takte procesora (cela cislica by zbehla v jednom takte) a digitalWrite potrebuje myslim tri takty takze ak tam mas 7 digitalWrite na cislicu, tak potrebuje 21 taktov procesora a čas je tu vzácny pri LED segmentovke
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino program

Príspevok od používateľa peterple » 21 Feb 2024, 19:15

Kedže ide o multiplexný displej tak môžeš mať vždy zapnutý iba jeden segment. Zapínanie segmentov sa robí cez premenné označené ako gndx. Teo originál má tri segmenty a všimni si že v každom momente majú zapnutý (zapísali tam nulu) iba jeden z troch.

V prvom rade si ale musíme ujasniť ako sa tie segmenty zapínajú. V originále to vyzerá že sa segment zapína logickou nulou. V tvojom kóde ťažko odhadnúť. lebo sa zdá ako by si ich zapínal log jednotkou.
Na to je treba vedieť ako je to zapojené.

Inak ten kód je hodne, hodne začiatočnícky level. Bolo by treba aby si porozumel každému riadku čo tam je.
1
Obrázok 1
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Arduino program

Príspevok od používateľa jankrizan » 21 Feb 2024, 20:39

V originale je použity disp. so spol. katodou, ja mám s anodou. Mám spravený môj kod aj na katody, Ale presvitajjú segmenty aj na origo kode. Pripadá mi to ako oneskorené zhášanie segmentov, lebo ak dám delay na od 50 a viac, tak zhasínajú segmenty pekne, ale je to nepoužiteľné. Aktívne je HIGH. Rozumejme displej celé číslo, lebo ja segment uvažujem- v jednom čísle je sedem segmentov,-jenu čiarku.
Kod na katody, aktívne LOW

Kód: Vybrať všetko

/*
Read me

Use all this information at your own risk, i hold no responsibility for any and all indirect or dicrect damage to your arduino, hardware and software of your pc, any electronic devices if you choose to use this information.

This meter only can measure up to 5V

This meter cannot measure negative voltage and make sure you connect the probes to the battery in the correct way (red probe(A0) to the positive side of the battery and black probe(GND) to the negative side of the battery)

*/
int a=12;
int b=11;
int c=10;
int d=9;
int e=8;
int f=7;
int g=6;

int gnd1=5;
int gnd2=4;
int gnd3=3;
int gnd4=2;
int gnd5=0;
int gnd6=A2;
int gnd7=A3;
int gnd8=A4;
int gnd9=A5;
int inpa=A0;
int inpb=A1;
int t;
int v=100;
float Reading;
int OneDigit, TenDigit, HundredDigit, FigureDigit, FiveDigit, SixDigit, SevenDigit, EightDigit;
void mask(int num, int aa, int bb, int cc, int dd, int ee, int ff, int gg) 
{ 
switch (num) 
{ 
case 0 :
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, LOW);
break;

case 1 : 
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 2 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, LOW);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 3 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, HIGH);
break;

case 4 : 
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 5 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 6 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, LOW);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 7 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, LOW);
digitalWrite(ff, LOW);
digitalWrite(gg, LOW);
break;

case 8 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 9 : 
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, LOW);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 10 : //V
digitalWrite(aa, LOW);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, HIGH);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, LOW);
break;

case 11 : //A
digitalWrite(aa, HIGH);
digitalWrite(bb, HIGH);
digitalWrite(cc, HIGH);
digitalWrite(dd, LOW);
digitalWrite(ee, HIGH);
digitalWrite(ff, HIGH);
digitalWrite(gg, HIGH);
break;

case 12 : // print V
digitalWrite(aa, LOW); 
digitalWrite(bb, HIGH);   
digitalWrite(cc, HIGH);   
digitalWrite(dd, HIGH);   
digitalWrite(ee, HIGH);   
digitalWrite(ff, HIGH);   
digitalWrite(gg, LOW ); 
break;

   case 13 : // print _
digitalWrite(aa, LOW);   
digitalWrite(bb, LOW);   
digitalWrite(cc, LOW);   
digitalWrite(dd, LOW);   
digitalWrite(ee, LOW);   
digitalWrite(ff, LOW);   
digitalWrite(gg, LOW); 
      break;
      
  case 14 : // print S
digitalWrite(aa, HIGH);   
digitalWrite(bb, LOW);   
digitalWrite(cc, HIGH);   
digitalWrite(dd, HIGH);   
digitalWrite(ee, LOW);   
digitalWrite(ff, HIGH);   
digitalWrite(gg, HIGH); 
     break;     
    
   case 15 : // print //t
digitalWrite(aa, LOW);   
digitalWrite(bb, LOW);   
digitalWrite(cc, LOW);   
digitalWrite(dd, HIGH);   
digitalWrite(ee, HIGH);   
digitalWrite(ff, HIGH);   
digitalWrite(gg, HIGH); 
     break;           


}
}

void setup()
{
  pinMode(a,OUTPUT);
  pinMode(b,OUTPUT);
  pinMode(c,OUTPUT);
  pinMode(d,OUTPUT);
  pinMode(e,OUTPUT);
  pinMode(f,OUTPUT);
  pinMode(g,OUTPUT);
  pinMode(gnd5,OUTPUT);   
  pinMode(gnd1,OUTPUT);
  pinMode(gnd2,OUTPUT);
  pinMode(gnd3,OUTPUT);
  pinMode(gnd4,OUTPUT);
  pinMode(gnd6,OUTPUT);
  pinMode(gnd7,OUTPUT);
  pinMode(gnd8,OUTPUT);
  pinMode(gnd9,OUTPUT);
  pinMode(inpa,INPUT);
  pinMode(inpb,INPUT_PULLUP); 
  
 
}
  
 void loop ()
 {
  t=analogRead(inpb);
  float TempOneDigit;
   int i;
Reading = (analogRead(inpa)*10.00/10230.00); 
if(t>v)
{
FigureDigit = 11;
}
 else  
if(t<v)
{
FigureDigit = 10;
}
HundredDigit = int(Reading) % 10;
TenDigit = int ((Reading-HundredDigit )*10) % 10;
TempOneDigit = int(Reading * 10);
OneDigit = int ((Reading - float(TempOneDigit/10))* 100) %10;
FiveDigit = 12;
SixDigit = 13;
SevenDigit = 14;
EightDigit = 15;



for (i=0 ; i<20; i++)
{
 mask (OneDigit, a, b, c, d, e, f, g);
 digitalWrite(gnd3, HIGH);
 digitalWrite(gnd2, HIGH);
 digitalWrite(gnd1, HIGH);
 digitalWrite(gnd4, LOW);
 digitalWrite(gnd5, LOW);
 digitalWrite(gnd6, HIGH);
 digitalWrite(gnd7, HIGH); 
 digitalWrite(gnd8, HIGH);
 digitalWrite(gnd9, HIGH); 
  delay(3);
  
 mask (TenDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, LOW);
 digitalWrite(gnd2, HIGH);
 digitalWrite(gnd1, HIGH);
 digitalWrite(gnd4, HIGH);
 digitalWrite(gnd5, HIGH);
 digitalWrite(gnd6, HIGH);
 digitalWrite(gnd7, HIGH); 
 digitalWrite(gnd8, HIGH);
 digitalWrite(gnd9, HIGH); 
 delay(3);
 
 mask (HundredDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, HIGH);
 if (HundredDigit >= 1)    
 digitalWrite(gnd2, LOW);
 digitalWrite(gnd1, HIGH);
 digitalWrite(gnd4, HIGH);
 digitalWrite(gnd5, LOW);
 digitalWrite(gnd6, HIGH);
 digitalWrite(gnd7, HIGH); 
 digitalWrite(gnd8, HIGH);
 digitalWrite(gnd9, HIGH);
 delay(3);
 
mask (FigureDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, HIGH); 
 digitalWrite(gnd2, HIGH);
 digitalWrite(gnd1, LOW);
 digitalWrite(gnd4, HIGH);
 digitalWrite(gnd5, LOW);
 digitalWrite(gnd6, HIGH);
 digitalWrite(gnd7, HIGH); 
 digitalWrite(gnd8, HIGH);
 digitalWrite(gnd9, HIGH);
 delay(3);

  mask (FiveDigit, a, b, c, d, e, f, g);
 digitalWrite(gnd3, HIGH);
 digitalWrite(gnd2, HIGH); 
 digitalWrite(gnd1, HIGH);
 digitalWrite(gnd4, HIGH);
 digitalWrite(gnd5, LOW);
 digitalWrite(gnd6, LOW);
 digitalWrite(gnd7, HIGH); 
 digitalWrite(gnd8, HIGH);
 digitalWrite(gnd9, HIGH); 
  delay(3);
  
 mask (SixDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, HIGH);
 digitalWrite(gnd2, HIGH);
 digitalWrite(gnd1, HIGH);
 digitalWrite(gnd4, HIGH);
 digitalWrite(gnd5, LOW);
 digitalWrite(gnd6, HIGH);
 digitalWrite(gnd7, LOW); 
 digitalWrite(gnd8, HIGH);
 digitalWrite(gnd9, HIGH); 
 delay(3);
 
 mask (SevenDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, HIGH);   
 digitalWrite(gnd2, HIGH); 
 digitalWrite(gnd1, HIGH);
 digitalWrite(gnd4, HIGH);
 digitalWrite(gnd5, LOW);
 digitalWrite(gnd6, HIGH);
 digitalWrite(gnd7, HIGH); 
 digitalWrite(gnd8, LOW);
 digitalWrite(gnd9, HIGH);
 delay(3);
mask (EightDigit, a, b, c, d, e, f ,g);
 digitalWrite(gnd3, HIGH); 
 digitalWrite(gnd2, HIGH); 
 digitalWrite(gnd1, HIGH);
 digitalWrite(gnd4, HIGH);
 digitalWrite(gnd5, LOW);
 digitalWrite(gnd6, HIGH);
 digitalWrite(gnd7, HIGH); 
 digitalWrite(gnd8, HIGH);
 digitalWrite(gnd9, LOW);
 delay(3);
 
}}
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Arduino program

Príspevok od používateľa jankrizan » 21 Feb 2024, 20:53

Misocko, asi nechápem tvoj počin-Pred zmenou masky by som rozhodne vypol vsetky GND.
takze:
vsetky GND do LOW
maska
potrebne GND do HIGH
delay
Vsetky GND do LOW
dalsi maska
skus mi to viac objasniť, poprípade skús to aplikovať v kode, aby som to pochopil. Vďaka.
0

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: Arduino program

Príspevok od používateľa balu » 21 Feb 2024, 20:56

Není to žádné zpožděné zhasínání segmentů - je to prostě a jednoduše špatně napsaný program.
Musíš :
1) vypnout VŠECHNY společné anody/katody - to abys nemusel "přemýšlet", který zrovna svítí.
2) přenastavit piny pro zobrazovaný znak
3) zapnout požadované společné anody/katody

To, co děláš v programu ty je :
1) přepneš společné anody/katody na požadované (pořád ještě svítí minulý znak)
2) přepneš jednotlivé segmetny na nový znak (když to děláš segment po segmentu, trvá to strašně dlouho)

Proto prosvicují sousední znaky do vedlejšího.
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4319
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: Arduino program

Príspevok od používateľa misocko » 22 Feb 2024, 09:43

skusim Ti v skratke popisat ovladanie LED displejov v multiplexe
mas 4 cislice (jednotky, desiatky, stovky, tisicky) - moze ich byt viac, podla toho aky displej mas
mas niekolko segmetov na zobrazenie cislice (v danom pripade 7)
multiplex - aby si pre dany displej pouzil co najmenej noziciek procesora, tak vsetky rovnake segmenty od všetkych čislic su spojene dokopy na jednu nozicku procesora (vsetky hotne vodorovne, 1 nozicka; vsetky stredne vodorovne = 2 nozicka ...). Potom na celi 4 cislicovy displej potrebujes 7 noziciek na segmenty a dalsie 4 nozicky pre cislice (jednou rozsvietis desiatky, druhou desiatky,....) - to je v povodnom programe GND.
Vzdy svieti v jednom momente iba jedna cislica !!!
takze namaskujes segmenty pre pozadovany "znak" na pozicii jednotky a nasledne mu na chvilu zapnes GND pre jednotky.
to GND vypnes
namaskujes segmenty pre pozadovany "znak" na pozicii desiatky a nasledne mu na chvilu zapnes GND pre desiatky. A tak dookola.
už povodny program nečaka na vypnutie GND a meni masku, Ty si to ešte zabil tým že si domiesal masky s GND a GND pouizvas na ovladanie jednotlivých segmentov.
nazvoslovie si sprav ake chces, GND je v tovojom pripade mätuce, (je to proste pin ktorý je spolocny pre vsetky segmenty v danom čisle.
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 989
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Arduino program

Príspevok od používateľa budvar10 » 22 Feb 2024, 10:00

https://s-o.webnode.cz/kjs/

Možno to pomôže. Je tam viac príkladov konštrukcií. Je to pre PIC, princíp je rovnaký.
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Arduino program

Príspevok od používateľa jankrizan » 22 Feb 2024, 11:00

Chlapi. Ja vám veľmi pekne ďakujem za výklad, ale túto teoriu ovládam. Horšie je to s praxou a to, že kde v slučkách použijem to vypnutie GND a aký príkaz na to použijem. Tým, že neovládam angličtinu, musím používať prekladač, aby som vedel čo ktorá inštrukcia robí a čo znamená. Mimochodom to GND je v pôvodnom kode, ja som len postupne doplňal program, aby mi to šlo, neriešil som názvoslovie jednotlivých výrazov. Ak môžem poprosiť, upravte mi niekto program aspoň v kúsku časti a ja si zbytok dorobím, jedna sa mi hlavne o pochopenie toho, o čom sa teraz bavíme.
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2574
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Arduino program

Príspevok od používateľa maskrtnik01 » 22 Feb 2024, 11:52

Kód: Vybrať všetko

#define NUM_SEGMENTS 7                                          //Pocet segmentov
#define NUM_DIGITS 6                                            //Pocet cislic
#define NUM_CHARS 10                                            //Pocet znakov
#define SEG_A 1                                                 //Segment - aktivna uroven
#define SEG_N 0                                                 //Segment - neaktivna uroven
#define DIG_A 0                                                 //Cislica - aktivna uroven
#define DIG_N 1                                                 //Cislica - neaktivna uroven
#define DISPLAY_UPDATE_PERIOD 6                                 //Perioda multiplexu v milisekundach

uint8_t seg_pins[NUM_SEGMENTS] = {0, 1, 2, 3, 4, 5, 6};         //Piny segmentov
uint8_t dig_pins[NUM_DIGITS] = {7, 8, 9, 10, 11, 12};           //Piny cislic

uint8_t font[NUM_CHARS][NUM_SEGMENTS] = {                       //Font
  {SEG_A, SEG_A, SEG_A, SEG_A, SEG_A, SEG_A, SEG_N},            //0
  {SEG_N, SEG_A, SEG_A, SEG_N, SEG_N, SEG_N, SEG_N},            //1
  {SEG_A, SEG_A, SEG_N, SEG_A, SEG_A, SEG_N, SEG_A},            //2
  {SEG_A, SEG_A, SEG_A, SEG_A, SEG_N, SEG_N, SEG_A},            //3
  {SEG_N, SEG_A, SEG_A, SEG_N, SEG_N, SEG_A, SEG_A},            //4
  {SEG_A, SEG_N, SEG_A, SEG_A, SEG_N, SEG_A, SEG_A},            //5
  {SEG_A, SEG_N, SEG_A, SEG_A, SEG_A, SEG_A, SEG_A},            //6
  {SEG_A, SEG_A, SEG_A, SEG_N, SEG_N, SEG_N, SEG_N},            //7
  {SEG_A, SEG_A, SEG_A, SEG_A, SEG_A, SEG_A, SEG_A},            //8
  {SEG_A, SEG_A, SEG_A, SEG_A, SEG_N, SEG_A, SEG_A},            //9
};

uint8_t data[NUM_DIGITS] = {};                                  //Aktualne zobrazene data
unsigned long lastDisplayUpdate;                                //Cas poslednej aktualizacie
uint8_t currentDigit = 0;                                       //Multiplex - aktualna cislica

void setup() {
  for(uint8_t i = 0;i < NUM_DIGITS;i++)
  {
    pinMode(dig_pins[i], OUTPUT);                               //Nastavit pin cislice ako vystup
    digitalWrite(dig_pins[i], DIG_N);                           //A do neaktivnej urovne
  }
  for(uint8_t i = 0;i < NUM_SEGMENTS;i++)
  {
    pinMode(seg_pins[i], OUTPUT);                               //Nastavit pin segmentu ako vystup
    digitalWrite(seg_pins[i], SEG_N);                           //A do neaktivnej urovne
  }
  lastDisplayUpdate = millis();                                 //Zapamatat pociatocny cas
}

void loop() {
  unsigned long currentTime = millis();                         //Zapamatat aktualny cas
  if((currentTime - lastDisplayUpdate) > DISPLAY_UPDATE_PERIOD) //Ak ubehol stanoveny cas
  {                                                             
    lastDisplayUpdate = currentTime;                            //Zapamatat cas poslednej aktualizacie
    
    for(uint8_t i = 0;i < NUM_DIGITS;i++)
      digitalWrite(dig_pins[i], DIG_N);                         //Vypnut vsetky cislice

    for(uint8_t i = 0;i < NUM_SEGMENTS;i++)
      digitalWrite(seg_pins[i], font[data[currentDigit]][i]);   //Nastavit uroven segmentov

    digitalWrite(dig_pins[currentDigit], DIG_A);                //Zapnut aktualnu cislicu

    currentDigit++;                                             //Posun na dalsiu cislicu
    if(currentDigit == NUM_DIGITS)                              //Ak bola posledna
      currentDigit = 0;                                         //Posun na prvu cislicu
  }
}
0

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: Arduino program

Príspevok od používateľa balu » 22 Feb 2024, 19:21

jankrizan napísal:
22 Feb 2024, 11:00
...
Tým, že neovládam angličtinu, musím používať prekladač, ...
Pokud to s programováním a bastlením myslíš třeba i jen v rámci koníčka trošku vážně, tak se bez alespoň základu angličtiny stejně neobejdeš. Datasheety (i když je to pro většinu arduinistů sprosté slovo) obsahují velké množství užitečných informací, které Ti pomohou rozněhnout to či ono.
jankrizan napísal:
22 Feb 2024, 11:00
...
Ak môžem poprosiť, upravte mi niekto program aspoň v kúsku časti a ja si zbytok dorobím, jedna sa mi hlavne o pochopenie toho, o čom sa teraz bavíme.
Pokud nebudeš kód jen tupě kopírovat, ale myslíš tuhle větu vážně, pak jsi na správné cestě se něco naučit. :thumbup:
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2574
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Arduino program

Príspevok od používateľa maskrtnik01 » 22 Feb 2024, 20:13

Súhlasím. Keď to niekto s programovaním myslí vážne, angličtina je nutnosť, nedá sa spoliehať výlučne na cz/sk materiály.

Rovnako používaním Ctrl+C, Ctrl+V sa človek nič nenaučí. Aj tak som tu pre inšpiráciu napísal vlastný kód na multiplex. Mám za to, že je čitateľnejší. Hneď na začiatku vidno aká je aktívna/neaktívna úroveň pre číslice/segmenty, aký veľký je vlastne displej, kde je zapojený,... Aj pri funkcii pre znaky, look-up table je prehľadnejšia ako switch cez desiatky riadkov kódu.

A potom tísíckrát vysvetľované, prečo sa vyhýbať delay. Toto je ešte ten lepší prípad, za 3ms sa veľa nestane. Avšak veľa začiatočníkov-arduinistov používa delay na všetko, aj rádovo sekundy, a to už je potom pruser.
0

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: Arduino program

Príspevok od používateľa balu » 22 Feb 2024, 20:28

Ono taky hlavně obsluhovat displej ve smyčce hlavního programu se prostě nedělá. Tam se maximálně připraví data do "videopaměti". Multiplexovaný 7-segmentový displej se obsluhuje v přerušení, kdy vypnu aktuální 7-segmentovku, přepnu výstupy pro segmenty a zapnu následující 7-segmentovku. Tím to končí.

Já to navíc dělám tak, že v přerušení TOV podle flagu na požadovanou 7-segmentovku nastavím výstupy pro segmenty a zapnu jí. V přerušení OCRx pak aktuální 7-segmentovku zhasínám a nastavuju flag na následující 7-segmentovku. Hodnotu OCR a tím i jas displeje pak řídím pomocí AD převodníku (snímáním okolního osvětlení, ručně trimrem) nebo nastavuju pomocí SW. Jednoduché a s minimálním nárokem na procesorový čas. Ale to lze až tehdy, kdy člověk zvládne obsluhu přerušení. Jenže myslím, že obsluha přerušení je pro arduinisty oblast sci-fi...
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2574
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Arduino program

Príspevok od používateľa maskrtnik01 » 22 Feb 2024, 20:40

Dobre napísané. Aj ja by som to dal do periodic interrupt, ale to je oproti arduino skutočne low-level.

Ten trik s overflow aj output compare interruptom mi ani nenapadol (y)
0

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: Arduino program

Príspevok od používateľa balu » 22 Feb 2024, 21:01

Jen je potřeba dát pozor, aby obsluha TOV skončila vždy dřív, než nastane přerušení od OCRx a opačně, aby obsluha přerušení OCRx skončila dřív, než nastane TOV. Pokud máš prescaler 256 nebo 1024, tak není většinou problém. Potíže můžou nastat, pokud prescaler pro timer je 64 a méně. Pak je třeba zajistit, aby byl čas na obojí => omezit minimum a maximum. U maxima to není problém - omezit hodnotu OCRx třeba na 240 (místo 255). Pokud použiješ 16-bitový čítač, tak tam je to úplně v pohodě (například 65535 vs. 64400) - i kdyby běžel bez prescaleru. V obou případech už se mezi dvěma nejvyššími hodnotami jas viditelně neliší. Nejnižší jas je stejně vhodné omezit tak, aby byl displej i při minimu vidět.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok