Stránka 2 z 2

Re: nefungující omezení proměnné

Napsal: 20 bře 2019, 22:37
od DavidO
Vítek píše: 20 bře 2019, 18:30 Děkuji všem za ochotu, toto již funguje jen jsem musel změnit pontb = 1 na pontb = 0, aby světlo úplně zhaslo.
což se ovšem netýká problému podtečení :) ale to neva, hlavně žes to zjistil.
Vítek píše: 20 bře 2019, 18:30 kdyby někoho zajímala celá současná verze programu zde je:
...
Pár připomínek:
1. Když něco voláš přes gosub, tak to něco musí končit returnem. Ty tam ale ve všech těch (barva)op máš skok zase na začátek toho podprogramu.
2. místo

Kód: Vybrat vše

start:
...
goto start
použij

Kód: Vybrat vše

DO
...
LOOP
3. modraop, zlutaop a lustrop se liší jen tím, kam se to nakonec pošle tím pwmduty. Čili správněji bys to měl mít jako podprogram, který určí hodnotu pontb a až se to vrátí, tak se pontb pošle kam má, asi takhle:
V rozhodování z ovladače:

Kód: Vybrat vše

case 6
gosub spocitej
pwmduty modra,pontb

case 7
gosub spocitej
pwmduty zluta,pontb

case 8
gosub spocitej
pwmduty lustr,pontb
a pak to spočítání:

Kód: Vybrat vše

spocitej:
irin [3000,ovladac],ir,irb
select case irb

case 17
IF pontb < 11 THEN let pontb=0 ENDIF
IF pontb > 10 THEN let pontb=pontb-10 ENDIF

case 16
let pontb=pontb+10 max 1023

case 73
pontb=1023

case 74
pontb=0

end select

let irb=0
return

Re: nefungující omezení proměnné

Napsal: 21 bře 2019, 22:20
od Vítek
Děkuji za opravení chyb, chyba s gosub a return vznikla postupnými změnami v programu, o možnosti použití do a loop jsem nevěděl. Třetí chybu jsem zatím neopravil, protože když jsem při použití správného programu chtěl stmívat led pásek, musel jsem pokaždé vybrat pásek, který chci stmívat potom snížit/zvednout hodnotu pontb o deset a opět volit led pásek. pokusil jsem se to opravit, ale nepodařilo se tak snad později.