Pevná pozice dlouhého čísla

Odpovědět
Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Pevná pozice dlouhého čísla

Příspěvek od Ludek » 04 bře 2023, 16:18

Zdravám,
poraďte mi, jak mohu zobrazite číslo (např. frekvenci) tak, aby se zarovnala zprava.
To znamená, že potřebuju zobrazit třeba 50 Hz a nebo 5600000 Hz, ale tak,
že to Hz musí být na stejném místě a čísla se posunují vlevo. Prázdné nuly vlevo nejsou.
díky

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Pevná pozice dlouhého čísla

Příspěvek od Ludek » 04 bře 2023, 16:25

Pardon, zapomněl jsem, že se jedná o LCD display.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Pevná pozice dlouhého čísla

Příspěvek od ondraN » 04 bře 2023, 18:08

Převeď si číslo na textový řetězec a pak si to múžeš zarovnávat po libosti.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Pevná pozice dlouhého čísla

Příspěvek od Ludek » 04 bře 2023, 18:39

No to právě se mi zdá, že to je stejné...
na Display LCD 4x16 posílám nejprve pozici a pak číslo... tak nevím :-(
Nevím, jak couvat anebo jak tam poslat třeba 8 čísel na místo, kam patří :-(

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: Pevná pozice dlouhého čísla

Příspěvek od Caster » 04 bře 2023, 23:12

Objednal jsem si 6-Digit 7 Segment LCD Display Module HT1621. Už se těším, až ho vyzkouším 8-) .

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Pevná pozice dlouhého čísla

Příspěvek od gilhad » 05 bře 2023, 02:16

Tak sem zkus dát nějaký, co nejjednodušší, příklad, jak to u sebe děláš (s tím, že víme, že se ti to neukáže tak, jak chceš) - a zkusíme ho tu upravit tak, aby to chodilo.

(Použij tag code - to tlačítko </> a dej sem kód, kterým píšeš nějaké číslo na nějakou pozici)

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Pevná pozice dlouhého čísla

Příspěvek od Ludek » 05 bře 2023, 07:53

No... už jsem to nějak trapně vyřešil...
z nějakého programu na webu.
f je frakvence a fq je pořadí čísla.

Kód: Vybrat vše

unsigned long f;
byte fq[8];

void loop() { 
  lcdPosition(0,0);    LCD.print("Input: ");
  fq[6]= f/1000000%10; LCD.print(fq[6]);
  LCD.print(" ");
  fq[5]= f/100000%10;  LCD.print(fq[5]);
  fq[4]= f/10000%10;   LCD.print(fq[4]);
  fq[3]= f/1000%10;    LCD.print(fq[3]);
  LCD.print(" ");
  fq[2]= f/100%10;     LCD.print(fq[2]);
  fq[1]= f/10%10;      LCD.print(fq[1]);
  fq[0]= f%10%10;      LCD.print(fq[0]);
  lcdPosition(0,17);   LCD.print("Hz");
 }
 

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Pevná pozice dlouhého čísla

Příspěvek od AstroMiK » 05 bře 2023, 09:27

Nešlo by to třeba takhle jednoduše:

Kód: Vybrat vše

unsigned long frekvence = 12345;

lcdPosition(0,0);                              // pozice jednotek MHz

if (frekvence < 1000000UL) lcd.print(' ');
// lcd.print(' ');                             // pripadny oddelovac MHz a stovek kHz
if (frekvence <  100000UL) lcd.print(' ');
if (frekvence <   10000UL) lcd.print(' ');
if (frekvence <    1000UL) lcd.print(' ');
// lcd.print(' ');                             // pripadny oddelovac kHz a stovek Hz
if (frekvence <     100UL) lcd.print(' ');
if (frekvence <      10UL) lcd.print(' ');

lcd.print(frekvence);


A nebo použití funkce sprintf(), ale ta zabírá moc paměti.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Pevná pozice dlouhého čísla

Příspěvek od AstroMiK » 05 bře 2023, 13:06

Omlouvám se, až teď jsem si to vyzkoušel.
Ty oddělovací mezery samozřejmě v tom mém příkladu fungovat nemůžou.
Ten příklad jen doplňuje mezery před číslo na správný počet míst.
Celé číslo se pak printuje najednou bez oddělovačů tím posledním příkazem.

Tady je upravený příklad s tou funkcí sprintf().
Testoval jsem to jen v sériovém terminálu, ale na dispelji by to mělo fungovat taky.

Kód: Vybrat vše

unsigned long frekvence;
char vystupni_retezec[10];

void setup(void)
  {
    Serial.begin(9600);
  }

void loop(void)
  {
    if (Serial.available())
      {
        frekvence = Serial.parseInt();
        Serial.print("Frekvence=");

        sprintf(vystupni_retezec, "%7lu", frekvence);   // maximalne 7 mist (9 999 999 Hz)
                                                        // lu = unsigned long
                                                        
        // rozlozeni na trojice cisel s oddelovacimi mezerami
        Serial.print(vystupni_retezec[0]);
        Serial.print(' ');
        Serial.print(vystupni_retezec[1]);
        Serial.print(vystupni_retezec[2]);
        Serial.print(vystupni_retezec[3]);
        Serial.print(' ');
        Serial.print(vystupni_retezec[4]);
        Serial.print(vystupni_retezec[5]);
        Serial.println(vystupni_retezec[6]); 
      }
  }

Výstup při zadávání různých čísel:

Kód: Vybrat vše

Frekvence=        0
Frekvence=        8
Frekvence=       12
Frekvence=      123
Frekvence=    1 234
Frekvence=   12 345
Frekvence=  123 456
Frekvence=1 234 567
Frekvence=9 999 999

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Pevná pozice dlouhého čísla

Příspěvek od Ludek » 06 bře 2023, 08:17

To se mi líbí :-) díky...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů