Proměnné a řetězce v příkazu serout

Odpovědět
smekac
Příspěvky: 25
Registrován: 13 úno 2016, 15:48

Proměnné a řetězce v příkazu serout

Příspěvek od smekac »

Zdravím,
potřebuji poradit správný zápis - jak složit řetězec který bude obsahovat určitý text a hodnotu z proměnné a celé to odeslat příkazem "serout". Pořád mi editor hází syntaktickou chybu.

Tedy pro představu... posílám z picaxe příkaz "tlacitkoA0" a "tlacitkoA1" program v PC identifikuje že má buď tlačítko "A" sepnout nebo rozepnout podle přijaté hodnoty na konci řetězce. Ale problém nastává tehdy když hodnota není konstanta ale proměnná načtená "readadc" a uložená do b0 tedy 0-255 potřebuju tedy z řetezce "tlacitko" a hodnoty v b0 sestavit řetezec a odeslat ho příkazem "serout". Jedno nebo druhé poslat umím, ale spojit dohromady obě je pro mě oříšek :-D

Máte nějaké tipy? Díky za rady :-)
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Proměnné a řetězce v příkazu serout

Příspěvek od AlesH »

Ahoj. Příkaz "serout" můžeš zapsat několikrát za sebou, nebo všechno potřebné spojit pomocí řady parametrů, oddělených čárkami.

Dva serouty za sebou:

Kód: Vybrat vše

  serout 7,N9600_32,("tlacitkoA")
  serout 7,N9600_32,(#b0)
Parametry oddělené čárkou:

Kód: Vybrat vše

  serout 7,N9600_32,("tlacitkoA",#b0)
smekac
Příspěvky: 25
Registrován: 13 úno 2016, 15:48

Re: Proměnné a řetězce v příkazu serout

Příspěvek od smekac »

Ach jo, jak jednoduché .... díky za nakopnutí :D
Pivrnec78
Příspěvky: 73
Registrován: 30 dub 2017, 15:25

Re: Proměnné a řetězce v příkazu serout

Příspěvek od Pivrnec78 »

Zdravíčko,
když chci při různé hodnotě proměnné např. "b27" posílat pokaždé jiný text na displej, musím před každým poslaným textem adresovat umístění?

Kód: Vybrat vše

if pos_do_kus = 1 then
  serout C.2,N2400,(254,192)		; přesunout na začátek 2 řádku
  serout C.2,N2400,("      S1        ")
  endif
if pos_do_kus = 2 then
  serout C.2,N2400,(254,192)		; přesunout na začátek 2 řádku
  serout C.2,N2400,("      S2        ")
  endif
if pos_do_kus = 3 then
  serout C.2,N2400,(254,192)		; přesunout na začátek 2 řádku
  serout C.2,N2400,("      S3        ")
  endif
if pos_do_kus = 4 then
  serout C.2,N2400,(254,192)		; přesunout na začátek 2 řádku
  serout C.2,N2400,("      S4b       ")
  endif
if pos_do_kus = 5 then
  serout C.2,N2400,(254,192)		; přesunout na začátek 2 řádku
  serout C.2,N2400,(" Krok zpet      ")
    if enter = 1 then goto stan_kusa 
Nebo mohu toto adresování vynechat? ... zabírá to hodně místa ...
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Proměnné a řetězce v příkazu serout

Příspěvek od jova »

Podle mě ne. Třeba takhle řeším výpis dne v týdnu:

Kód: Vybrat vše

symbol baud=N2400
symbol day = b3
....
serout C.1, baud, (254,139);den v týdnu
if day = 0 then serout C.1, baud, ("Po")endif
if day = 1 then serout C.1, baud, ("Ut")endif
if day = 2 then serout C.1, baud, ("St")endif
if day = 3 then serout C.1, baud, ("Ct")endif
if day = 4 then serout C.1, baud, ("Pa")endif
if day = 5 then serout C.1, baud, ("So")endif
if day = 6 then serout C.1, baud, ("Ne")endif
Obdobně to řeším když vypisuji číslo menší než 10 a větší než 10:

Kód: Vybrat vše

symbol baud=N2400
symbol date = b4	    ;den RTC 
symbol month = b5	    ;měsíc RTC
...
serout C.1, baud, (254,128);den
if date<10 then serout C.1, baud, ("0",#date,".")else serout C.1, baud, (#date,".")endif 
serout C.1, baud, (254,131);měsic
if month<10 then serout C.1, baud, ("0",#month,".")else serout C.1, baud, (#month,".")endif
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Proměnné a řetězce v příkazu serout

Příspěvek od jova »

Ještě jedna rada. Ty mezery ti zbytečně ubírají místo z paměti. Je výhodnější to nejdříve smáznout jako celek jednou mezerami celé a pak už jen vypisovat na patřičné místo S1, S2...
Já byl dokonce nedostatkem paměti přinucen všechen text menu nahrát do procesoru LCD a posílám tam už jen číselný odkaz jaký text má kam vypsat. Takže ten zápis pak vypadá takto:

Kód: Vybrat vše

if vyber=10 then serout C.1,baud,(253,128,8)else serout C.1,baud,(253,128,7)endif; zobrazí se text konec nebo KONEC
if vyber=9 then serout C.1,baud,(253,192,10)else serout C.1,baud,(253,192,9)endif;nastav cas datum/NASTAV CAS DATUM
if vyber=8 then serout C.1,baud,(253,148,12)else serout C.1,baud,(253,148,11)endif;nastav cas raficek/NASTAV CAS RAFICEK
if vyber=7 then serout C.1,baud,(253,212,14)else serout C.1,baud,(253,212,13)endif;srovnani rafik/SROVNANI RAFIK
Pivrnec78
Příspěvky: 73
Registrován: 30 dub 2017, 15:25

Re: Proměnné a řetězce v příkazu serout

Příspěvek od Pivrnec78 »

Takže nemusím při listování menu pokaždé určovat, že se jedná o druhý řádek? ... a taky asi budu muset zjistit číslo pozice znaku nař. č.4 na dolním řádku a ty mezery na začátku tam nemít ...
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Proměnné a řetězce v příkazu serout

Příspěvek od jova »

Pivrnec78 píše: 04 úno 2018, 14:51 Takže nemusím při listování menu pokaždé určovat, že se jedná o druhý řádek?
Já to nedělám. Prostě napíšu před výběrem kam se budou znaky zapisovat a pak už záleží co se vybere podle podmínky. Ono teoreticky nemusíš ani ty původní znaky mazat. Musíš je ale přepisovat na stejných pozicích. Pokud je nový text kratší nebo delší, musí se ty původní znaky odstranit, (buď smazáním LCD, řádku, vyplněním mezerami...) záleží podle toho co je výhodnější.
Pivrnec78 píše: 04 úno 2018, 14:51 a taky asi budu muset zjistit číslo pozice znaku nař. č.4 na dolním řádku a ty mezery na začátku tam nemít ...
Ano ten první znak textu adresuješ přímo na to místo kde chceš aby začal text. Stačí si na to udělat takovouto tabulku podle tvého LCD:
Obrázek
Pivrnec78
Příspěvky: 73
Registrován: 30 dub 2017, 15:25

Re: Proměnné a řetězce v příkazu serout

Příspěvek od Pivrnec78 »

A jak je to s displejem 20/4ř.? Jen tak ze zvědavosti ...
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Proměnné a řetězce v příkazu serout

Příspěvek od jova »

Použiji tabulku pro něj:
tab2.jpg
Netuším, ale jak je to u jiných řadičů. Ten můj je z těhle stránek:
http://electromag1.wifeo.com/fabriquer- ... icaxe-.php
Upravil jsem si i program pro ten 20M2 a nahrávám si právě do její paměti všechna menu, abych tím zbytečně neubíral kapacitu v hlavním programu.
Posílám tam pak jen souřadnice prvního znaku a číselný odkaz. Na patřičné místo se mi pak vygeneruje dané menu.
Odpovědět