Stránka 1 z 1

Pevná pozice dlouhého čísla

Napsal: 04 bře 2023, 16:18
od Ludek
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

Re: Pevná pozice dlouhého čísla

Napsal: 04 bře 2023, 16:25
od Ludek
Pardon, zapomněl jsem, že se jedná o LCD display.

Re: Pevná pozice dlouhého čísla

Napsal: 04 bře 2023, 18:08
od ondraN
Převeď si číslo na textový řetězec a pak si to múžeš zarovnávat po libosti.

Re: Pevná pozice dlouhého čísla

Napsal: 04 bře 2023, 18:39
od Ludek
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ří :-(

Re: Pevná pozice dlouhého čísla

Napsal: 04 bře 2023, 23:12
od Caster
Objednal jsem si 6-Digit 7 Segment LCD Display Module HT1621. Už se těším, až ho vyzkouším 8-) .

Re: Pevná pozice dlouhého čísla

Napsal: 05 bře 2023, 02:16
od gilhad
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)

Re: Pevná pozice dlouhého čísla

Napsal: 05 bře 2023, 07:53
od Ludek
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");
 }
 

Re: Pevná pozice dlouhého čísla

Napsal: 05 bře 2023, 09:27
od AstroMiK
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.

Re: Pevná pozice dlouhého čísla

Napsal: 05 bře 2023, 13:06
od AstroMiK
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

Re: Pevná pozice dlouhého čísla

Napsal: 06 bře 2023, 08:17
od Ludek
To se mi líbí :-) díky...