Re: Dotazy začátečníka 2
Napsal: 14 zář 2018, 13:59
Do kamene s tím!
Kód: Vybrat vše
rem RC ovladani autobusu picaxe 20M2
start:
for b2 = 0 to 30
pulsin C.7,w6 rem nacteni jizdy
pulsin C.6,w5 rem nacteni zataceni
pulsin C.5,w4 rem nacteni venkovni
pulsin C.4,w3 rem nacteni svetla sm.
if w6 <152 and w6> 148 then high B.3 high B.4 else low B.4 low B.3 endif rem brzdova svetla
if w6>152then goto jizda vpred
if w6<148 then goto jizda vzad
goto dal
jizda v pred:
low C.2 rem vypnuti zpetecky
let w2=w6 -150*15 rem uprava rozsahu
goto jizda
jizda vzad:
high C.2 rem zapnuti zpetecky
low w2=w6-150*-5 rem uprava rozsahu
jizda:
pwmout C.3,255,w0 rem nastaveni pulzu
dal: rem zapenana svetela
if w4 > 190 then b1=b1+1 endif
if w4 < 110 then b1=b1-1 endif
if b1 = 7 then b1=3
let b1=b1 min
if b1 > 0 then high B.0 high B.3 else low B.0 low B.3 endif rem parkovaci svetla
if b1 = 2 OR b1=3 then high B.7 else low B.7 endif rem vnitrni svetla
if b1 = 3 then high B.1 lov B.6 endif rem potkavaci svetla
if b1 = 4 then hiht B.6 lov B.5 endif rem zadní mlhová
if b1 = 5 then high B.5 else low B.2 endif rem dalkova
if b1 = 6 then high B.2 else low B.5 endif rem mlhova
if w3 > 160 and w3 <190 then b0=0 endif rem vypínaní směrovek
if w5 > 145 and w5 <155 then b0=0 endif
if w3 > 155 then b0=1 endif rem smerovky leva
if w3 < 190 then b0=2 endif rem smerovky prava
if w3 > 190 then b0=3 endif rem vystrazne smerovky
next b2
if b0 = 0 then low C.0 low C.1 endif
if b0 = 1 then toggle C.0 endif
if b0 = 2 then toggle C.1 endif
if b0 = 3 then toggle C.0 toggle C.1 endif
goto start
Kód: Vybrat vše
; RC ovladani autobusu picaxe 20M2
#picaxe 20M2
start:
for b2 = 0 to 30
pulsin C.6,1,w5
pulsin C.5,1,w4 ; nacteni venkovni
pulsin C.4,1,w3 ; nacteni svetla sm.
if w6 <152 and w6> 148 then high B.3 high B.4 else low B.4 low B.3 endif ; brzdova svetla
if w6>152 then goto jizda_vpred
if w6<148 then goto jizda_vzad
goto dal
jizda_vpred:
low C.2 ; vypnuti zpetecky
let w2=w6-150*15 ; uprava rozsahu
goto jizda
jizda_vzad:
high C.2 ; zapnuti zpetecky
let w2=w6-150*5 ; uprava rozsahu
jizda:
pwmout C.3,255,w0 ; nastaveni pulzu
dal: ; zapenana svetela
if w4 > 190 then
b1=b1+1 endif
if w4 < 110 then
b1=b1-1 endif
if b1 = 7 then
b1=3
endif
;let b1=b1 min
if b1 > 0 then high B.0 high B.3 else low B.0 low B.3 endif ; parkovaci svetla
if b1 = 2 OR b1=3 then high B.7 else low B.7 endif ; vnitrni svetla
if b1 = 3 then high B.1 low B.6 endif ; potkavaci svetla
if b1 = 4 then high B.6 low B.5 endif ; zadní mlhová
if b1 = 5 then high B.5 else low B.2 endif ; dalkova
if b1 = 6 then high B.2 else low B.5 endif ; mlhova
if w3 > 160 and w3 <190 then
b0=0 endif ; vypínaní směrovek
if w5 > 145 and w5 <155 then
b0=0 endif
if w3 > 155 then
b0=1 endif ; smerovky leva
if w3 < 190 then
b0=2 endif ; smerovky prava
if w3 > 190 then
b0=3 endif ; vystrazne smerovky
next b2
if b0 = 0 then low C.0 low C.1 endif
if b0 = 1 then toggle C.0 endif
if b0 = 2 then toggle C.1 endif
if b0 = 3 then toggle C.0 toggle C.1 endif
goto start
Jen doplnění - to vyplývá z toho, že ten podmíněný příkaz má více různých variant. Varianta na jednom řádku je určená pro skoky, neumožňuje
else
větev a nemá koncový endif
. Varianta na více řádkách umožňuje else
a vyžaduje endif
, ale skok se nedá zapsat jen tím názvem návěští. Editor v některých případech dokáže v jednořádkovém zápisu rozpoznat, že to je na jeden řádek napsaná ta varianta, co má být na víc řádkách, ale není geniální, aby to poznal správně všude (a navíc to i může být nejednoznačné).then
následuje skok (goto
, gosub
, exit
), pro goto
se smí napsat rovnou návěští a nemusí se tam to goto
psát. Tahle jednořádková varianta se neukončuje endif
a nemůže tam být else
ani nic jiného, než skok. if b0>1 then konec
je v pořádku.if b0>1 then konec else zacatek
chybně, protože jednořádkový if
nemůže mít else
(Error: Else without If)if b0>1 then goto konec else goto zacatek endif
chybně, protože jednořádkový if
nemůže mít else
(Error: Else without If)if b0>1 then b1=5
chybně, protože b1 je proměnná a ne návěští (Error: Expected a label not the variable B1)if b0>1 then let b1=5
chybně, protože to je přiřazení a tedy víceřádková varianta, která je zdrcnutá do jednoho řádku, ale chybí jí ukončení (Error: If without Endif)if b0>1 then b1=5 endif
chybně, protože b1 je proměnná a ne návěští (Error: Expected a label not the variable B1)if b0>1 then let b1=5 endif
projde, editor poznal, že za then
není skok ale přiřazení, takže to je víceřádková varianta zdrcnutá do jedné řádkyif b0>1 then b1=5 else b1=7 endif
chybně, protože b1 je proměnná a ne návěští (Error: Expected a label not the variable B1)if b0>1 then let b1=5 else let b1=7 endif
projde, poznalo se, že to je víceřádková varianta zdrcnutá do jedné řádkyif b0>1 then let b1=5 else b1=7 endif
taky projde, ale je to ještě ošklivější, než předchozí (let
je možné vynechat, akorát ne hned za then
protože tam to bez příkazu očekává návěští)a co má být výstupem resp. přiřazeno do w2? Když je w6= 80, tak co? Co pro 149, pro 150, pro 151, pro 220?