Téma: [vyřešeno] funkce sprintf >> lcd_echo

Zdravím,

nedaří se mi vypsat na LCD SDS Macro znaky, zadávané pomocí fce sprintf do pole text.
Protože se výpis neprovede ani po inicializaci programu, vypadá to na špatné pochopení fce z mé strany (i když vše ostatní - teploty, poruchy, žádost o reset, odřádkování - se na LCD zobrazuje řádně).

Z hlediska procedury vypis_lcd (viz níže) je tedy zobrazeno vše, až na ty text [0/5].
Zajímavé však je, že při testech v SDS-C Debbugeru je na záložce LCD (MACRO) vše vypisováno v pořádku (a to i při změně konkrétního stavu - (de)aktivaci konkrétního okruhu).

vypis_lcd
{
 if (_text==1) { lcd_clear(0); _text=0; };
 lcd_echo(1,100,1, 'Tep_Cerp ');
 lcd_echo(11,100,1, 'Solar       ');
 lcd_echo(1,200,0, ' Sani: ', _temp_vzduch_in);
 lcd_echo(11,200,0, 'Kolektor: ', _temp_kolektor);
 lcd_echo(1,300,0, 'Vyfuk: ', _temp_vzduch_out);
 lcd_echo(16,300,0, 'TUV: ', _temp_tuv);

 lcd_echo(1,400,0, ' Stav:', text[5]);
 lcd_echo(11,400,0, 'Cerpadlo:', text[0]);

 //Nove nastaveni intervalu pro vypis na LCD
 ram[20]+5;
}

-------
init
{
...
 sprintf(text[0],'VYP');     //Pocatecni hlaseni o stavu cerpadla solarniho okruhu
 sprintf(text[5],'ANO');    //Pocatecni hlaseni o stavu tepelneho cerpadla
 ...
}

main
{
...
vypis_lcd();
...
}

2

Re: [vyřešeno] funkce sprintf >> lcd_echo

Co má dělat tento řádek:

ram[20]+5;

?

Funkce sprintf by měla fungovat tak jak je popsáno na WiKi. Jestliže tomu tak není, tak je problém jinde - není text[] někde ještě jinde přepsán?
Chtělo by to ověřit, hned po zavolání sprintf(), pomocí funkce echo(text[0]);, zda-li to funguje jak má.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3

Re: [vyřešeno] funkce sprintf >> lcd_echo

adamn napsal:

Chtělo by to ověřit, hned po zavolání sprintf(), pomocí funkce echo(text[0]);, zda-li to funguje jak má.

Vyzkouším (test v Debuggeru je však OK - zápis do pole text[], i výpis LCD). Ta echa z kódu níže přepíši s použítím text[].

Není text[] někde ještě jinde přepsán?

Ano, při změně stavu relé:

//Procedura pro AKTIVACI cerpadla solarniho okruhu
cerpadlo_on
{
  if (sys[231]!=1) 
  { 
  sys[231]=1; 
  sys[232]=1; 
  sprintf(text[0], 'ZAP'); 
  sprintf(text[5], ' NE'); 
  echotime(); 
  echo('Cerpadlo solarniho okruhu ZAPNUTO'); 
  echo('Tep.cerpadlo ODSTAVENO');
  };
}
//Procedura pro DEAKTIVACI cerpadla solarniho okruhu
cerpadlo_off
{
  if (sys[231]!=0) 
  { 
  sys[231]=0; 
  sys[232]=0; 
  sprintf(text[0], 'VYP'); 
  sprintf(text[5], 'ANO'); 
  echotime(); 
  echo('Cerpadlo solarniho okruhu VYPNUTO'); 
  echo('Tep.cerpadlo UVOLNENO');
  };
}

Ad Vaše otázka - je možné pole text přepisovat pomocí sprintf() bez nějaké "okliky" (pomocná proměnná)? Jsem jen trochu poučený laik a o přepisu jsem na wiki nic nenašel.

Řádek <ram[20]+5> slouží k navýšení proměnné _lcd_timeout o dalších 5 sekund, abych měl na LCD pravidelné výpisy stavu a teplot (INIT: ram[20] = sys[4]; _lcd_timeout=ram[20]+5; PROCEDURA vypis_lcd = další navýšení: ram[20]+5).

4

Re: [vyřešeno] funkce sprintf >> lcd_echo

Do pole text[] lze zapisovat po jednotlivých místech (indexech), např.

 text[10] = 'a';
 text[11] = 'h';
 text[12] = 'o';
 text[13] = 'j';
 text[14] = 0;

Následující zápis:

 ram[5]+20;

neprovede to co by se od něj možná čekalo.
Spočte sice výsledek, ale neví už co s ním.
Správně to je takto:

 ram[5] = ram[5]+20;

Takto se spočte nová hodnota (ram[5]+20) a program také ví kam tuto novou hodnotu uložit (levá strana před = ).

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

5 Naposledy upravil: milan.simunek (2012-09-08 23:02:23)

Re: [vyřešeno] funkce sprintf >> lcd_echo

Zápis do pole text[] po jednotlivých indexech jsem na wiki četl, sprintf() mi však přišla vstřícnější.
Ad popletený zápis ram[] - v proceduře jsem to napsal blbě, přestože v initu jsem to napsal správně :-). Díky za korekci!

Co se týče volání echa() po inicializaci, na sds-c záložce na uživatelské stránce se echo() vypíše přesně tak, jak jsem jej dopsal do programu kvůli vyzkoušení, tedy: Cerpadlo solarniho okruhu:VYP, resp. Uvolneni tepelneho cerpadla:ANO

sprintf(text[0], 'VYP'); 
sprintf(text[5], 'ANO'); 
echotime(); 
echo('Cerpadlo solarniho okruhu:', text[0]);
echo('Uvolneni tepelneho cerpadla:', text[5]);

Vyzkoušel jsem tedy samostatný kus kódu bez procedur (níže), nicméně na LCD jsem zápis nedostal ani v tomto případě - výpis proveden pouze na 1. řádek (Pokus o vypis sprintf:), 2. řádek prázdný. Samotné echo() vypsáno v pořádku (VYP).

init
{
sprintf(text[0], 'VYP');
lcd_echo(1,1,1, 'Pokus o vypis sprintf:');
lcd_echo(1,2,1, text[0]);
echo(text[0]);
}

Můžete kdokoli ověřit tento kousek kódu na svém Macru (s lcd)?

EDIT(8/9/2012; 22:24):
- vyzkoušena samotná fce text[], ale lcd_echo() text rovněž nevypíše <text[0]='V'; text[1]=0x00; lcd_echo(text[0]);>
- následně přehrán březnový firmware na verzi z května; stav beze změn.

6

Re: [vyřešeno] funkce sprintf >> lcd_echo

Ok, to vypadá na něco ve firmware pro SDS MACRO - zkontroluji to a dám sem informace.
Pokud to bude oprava ve firmware, bude to nejprve přidáno do beta verze.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

7

Re: [vyřešeno] funkce sprintf >> lcd_echo

Rozumím.
Díky za Váš čas.

8

Re: [vyřešeno] funkce sprintf >> lcd_echo

Tento týden to vyřeším.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

9

Re: [vyřešeno] funkce sprintf >> lcd_echo

Protože neřeším žádnou komerční aplikaci za úplatu, ale jedná se o soukromo-pracovní seznamování se zařízeními SDS, nemusíte to nijak hrotit. Pokud na problém nikdo jiný nenarazil, nemusíte spěchat, není to urgentní. Jsem si jist, že se k tomu časem dostanete (priority na Vás). V každém případě platí - díky za stálou podporu fóra (umím si představit, kolik máte práce). Až bude nová beta verze, rád ji vyzkouším a výsledek sem napíši.

10

Re: [vyřešeno] funkce sprintf >> lcd_echo

Beta s doplněnou funkcí lcd_echo() je k dispozici.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

11

Re: [vyřešeno] funkce sprintf >> lcd_echo

TO adamn - vřelé díky za flexibilitu a rychlou spolupráci, vše funguje jak má
(na nic nekalého jsem nepřišel).
Téma výpisu pole text na LCD je zřejmě možné ukončit. MŠ