Stránka 1 z 1

Teploměr správné zobrazení nad 100°C

Napsal: 24 zář 2018, 10:38
od karel
Ahoj, dodělávám teploměr s MAX7219 s měřením teploty do cca 115°C. Mám problém jak ošetřit program při zobrazení - měření nad 100°C. Jedná se o 3 segmenty MAX7219. Do 99°C není problém, aby každý segment ukazoval svůj řád, ale jak nad 100°C?

......
segment1 = teplota / 10; //
segment2 = teplota - (segment1*10); //
segment3 = teplota / 100; //
......

Dík za radu

Re: Teploměr správné zobrazení nad 100°C

Napsal: 24 zář 2018, 17:59
od rejze69
Trochu to upřesni.Do proměnné segment se ukládá celý výsledný číslo k zobrazení? Vzhledem k tomu,že na levé pozici se bude yobrazovat jedině jednička,tak by mělo stačit segment2+100 ne?

Re: Teploměr správné zobrazení nad 100°C

Napsal: 24 zář 2018, 18:19
od pavel1tu
Pokud to chápu, s tím MAX.... komunikuješ tak, že mu řekneš od které pozice má co vypsat ? nebo přímo na který segment má co vypsat ?

beru zpět podle příkladu v knikovně se zapisuje každý digit zvlášť - tak to máš vymyšlené dobře, ne ?
Jen bych přidal podmínku aby se SEGMENT desítek nevypisoval pod 10st.C (byla by tam nula) a to samé stovky ....

Re: Teploměr správné zobrazení nad 100°C

Napsal: 25 zář 2018, 15:52
od karel
Je to tam trošku přehozené, ale
seg1 - ukazuje desítky
seg2 - jednotky
seg3 - stovky °C

při stoupající teplotě nad 99°C dělal zobrazovač problém, že nespočital jedno číslo seg1. (110°C -->11)

Ošetřil jsem to takto
-------------
if (teplota > 99) segment2 = 0;
if (teplota > 109) segment2 = 1;
if (teplota > 119) segment2 = 2;
--------------
asi by to šlo jinak a lépe, ale takto to funguje dobře, aspoň myslím

Re: Teploměr správné zobrazení nad 100°C

Napsal: 25 zář 2018, 18:58
od AstroMiK
A nebylo to přehlednější takhle?
(segmenty jsem přejmenoval tak, aby bylo na první pohled vidět, ke kterému řádu patří)

Kód: Vybrat vše

    byte segment_1    =  teplota % 10;
    byte segment_10   = (teplota % 100)  /  10;
    byte segment_100  =  teplota / 100;

Pro více segmentů by to šlo rozšířit takhle:

Kód: Vybrat vše

    byte segment_1     =  teplota % 10;
    byte segment_10    = (teplota % 100)   /   10;
    byte segment_100   = (teplota % 1000)  /  100;
    byte segment_1000  = (teplota % 10000) / 1000;
    byte segment_10000 =  teplota / 10000;

(Funguje to jen pro kladné teploty. U záporných se musí hodnota převést na kladnou a na displeji rozsvítit mínus.)