Dotazy začátečníka 2
Re: Dotazy začátečníka 2
Děkuji moc za obšírnou odpověď. Tohle jsou základy které mi jako laikovy chybí. Na svou obhajobu musím říct, že samozřejmě gosub ve svém programu, o kterém mluvím, běžně používám, k elseif jsem zatím "programátorsky" nedozrál Ještě to nějak zkusím zjednodušit a učesat, ale mám obavy, že se tam bez těch příkazů goto neobejdu. Zřejmě budu muset upřednostnit délku před kvalitou
Re: Dotazy začátečníka 2
Jen bych k te delce podotknul, co uz jsem nekde psal u Arduina - pokud je oddelena programova a datova pamet, a program se mi do te programove vejde, tak me vlastne nezajima zda zabira 10% pameti, nebo zda zbyva jen posledni volny byte a netreba optimalizovat velikost. Az mi bude byt jeden byte chybet, tak samozrejme velikost mudu muset resit, ale do te doby me nezajima, kolik programove pameti lezi ladem nevyuzito. Do te doby je pro me dulezitejsi citelnost kodu, prehlednost, v kritickych pripadech mozna i rychlost, ale urcite ne delka.
(Ale ono se ucesanim kodu a jeho dobrou organizaci casto usetri spousta pameti jen tak mimochodem.) Predcasna optimalizace je korenem vseho zla
Osobne radim - sedni si na to "elseif" jeste dnes a dej tomu ten potrebny cas (ono to fakt neni slozite) a sam uvidis, ze je to zatracene uzitecna vec
(Ale ono se ucesanim kodu a jeho dobrou organizaci casto usetri spousta pameti jen tak mimochodem.) Predcasna optimalizace je korenem vseho zla
Osobne radim - sedni si na to "elseif" jeste dnes a dej tomu ten potrebny cas (ono to fakt neni slozite) a sam uvidis, ze je to zatracene uzitecna vec
Dotazy začátečníka 2
dobrý den,
poradil by mi někdo co je tam za chyby - nejspíše tam něco chybí
děkuji
poradil by mi někdo co je tam za chyby - nejspíše tam něco chybí
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
děkuji
Re: Dotazy začátečníka 2
Podle mě první chyba je, že jsi dotaz napsal do tohohle už tak zapleveleného vlákna s nicneříkajícím názvem, no ale budiž.
Zdá se mi, že tam především chybí čtení chybových hlášek kompilátoru!!! - tedy na straně uživatele. V tom kódu máš řadu syntaktických chyb, které kompilátor jasně označuje a vůbec by ses na ně nemusel tady ptát. Dokonce už v editoru jsou minimálně 4 chyby vidět, protože jsou jinak obarvené.
Také chybí říct nám, pro které Picaxe to je.
V kódu samotném chybí po syntaktické stránce mezera (a přitom několik dalších přebývá), několik odřádkování (nebo přiřazovacích příkazů) v podmíněných příkazech, ukončení podmíněného příkazu a v několika příkazech definovat požadovaný stav před měřením. Kromě toho tam jsou chyby ve výrazech v přiřazovacích příkazech a řada překlepů.
A nakonec z aplikačního pohledu nejspíš chybějí dvoje závorky a nějaký kód, který by využil proměnné, do kterých se něco přiřazuje (aniž by se s tím nyní dál pracovalo).
Zdá se mi, že tam především chybí čtení chybových hlášek kompilátoru!!! - tedy na straně uživatele. V tom kódu máš řadu syntaktických chyb, které kompilátor jasně označuje a vůbec by ses na ně nemusel tady ptát. Dokonce už v editoru jsou minimálně 4 chyby vidět, protože jsou jinak obarvené.
Také chybí říct nám, pro které Picaxe to je.
V kódu samotném chybí po syntaktické stránce mezera (a přitom několik dalších přebývá), několik odřádkování (nebo přiřazovacích příkazů) v podmíněných příkazech, ukončení podmíněného příkazu a v několika příkazech definovat požadovaný stav před měřením. Kromě toho tam jsou chyby ve výrazech v přiřazovacích příkazech a řada překlepů.
A nakonec z aplikačního pohledu nejspíš chybějí dvoje závorky a nějaký kód, který by využil proměnné, do kterých se něco přiřazuje (aniž by se s tím nyní dál pracovalo).
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Re: Dotazy začátečníka 2
Po opravě všech vašich překlepů a chybné syntaxe příkazů prošel program kontrolou bez chyb
Pouze řádek ;let b1=b1 min jsem musel z programu vyřadit (zaREMovat), protože u příkazu min vám chybí hodnota.
To ovšem nezaručuje, že program bude fungovat, jen to, že půjde nahrát do procesoru.
Porovnejte vaši i moji verzi programu, ať vidíte kde jste udělal chyby a kde se jednalo o pouhý překlep.
Zaměřte se taky na syntaxi příkazu if..then, někdy projde na jedné řádce, někdy je nutno řádek za then zalomit a pokračovat na novém.
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
To ovšem nezaručuje, že program bude fungovat, jen to, že půjde nahrát do procesoru.
Porovnejte vaši i moji verzi programu, ať vidíte kde jste udělal chyby a kde se jednalo o pouhý překlep.
Zaměřte se taky na syntaxi příkazu if..then, někdy projde na jedné řádce, někdy je nutno řádek za then zalomit a pokračovat na novém.
jrt
Re: Dotazy začátečníka 2
Děkuji,jsem spíše modelář a zatím jsem používal picaxe 08 s již předepsanými programy, teď si defakto skládám vlastní z toho co se kde dočtu a moc tomu zatím nerozumím,tudíž jsem o tzv zalomování řadku nevěděl
zdá si mi že i při kopírování se udělali chyby misto
rem RC ovladani autobusu
#picaxe 20M2
vzniklo
rem RC ovladani autobusu picaxe 20M2
stejne jako let b1=b1 min 0 max 6
v pulsin C.7,1,w6 jsem já vynechal 1, moje chyba
nevim zda uprava programu
jizda_vzad:
high C.2 ; zapnuti zpatecky ( relé+světla přes tranzistor)
let w2=w6-150*5 ; uprava rozsahu
proti puvodnímu left w2=w6-150*-5 kde je chyba let w2=w6-150*-5 ; uprava rozsahu ^
Syntax error on line 19 at/before position 22
Error: syntax error
w6 bude mít rozsah 80 - 220 kde střed 150, matematicky vychází při hodnotách pod 150 bude hodnota w2= -1,-2 .... s*-5 se hodnota - mela otočit na +
zdá si mi že i při kopírování se udělali chyby misto
rem RC ovladani autobusu
#picaxe 20M2
vzniklo
rem RC ovladani autobusu picaxe 20M2
stejne jako let b1=b1 min 0 max 6
v pulsin C.7,1,w6 jsem já vynechal 1, moje chyba
nevim zda uprava programu
jizda_vzad:
high C.2 ; zapnuti zpatecky ( relé+světla přes tranzistor)
let w2=w6-150*5 ; uprava rozsahu
proti puvodnímu left w2=w6-150*-5 kde je chyba let w2=w6-150*-5 ; uprava rozsahu ^
Syntax error on line 19 at/before position 22
Error: syntax error
w6 bude mít rozsah 80 - 220 kde střed 150, matematicky vychází při hodnotách pod 150 bude hodnota w2= -1,-2 .... s*-5 se hodnota - mela otočit na +
Re: Dotazy začátečníka 2
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é).Varianta na jednom řádku je určená výhradně pro skok, kdy za
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. Příklady:
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í)(pozorování: editor nejspíš zkoumá, jestli za then je nějaký příkaz jiný než goto. Pokud ne, tak to je jednořádkový skok. Možná v něm bude vynechané goto, ale to je už pak nepodstatné.)
Dokumentace jasně uvádí 4 jednořádkové možnosti (všechny pouze pro skok) anebo víceřádkovou variantu, kde je blok kódu, ve kterém může být cokoli. Ale neuvádí jednořádkovou variantu, kde by bylo cokoli jiného, než skok. To, že občas projde jednořádková varianta s něčím jiným než skokem, není vlastně dobře.
Doporučuji tedy v případě ne-skoků psát zásadně variantu víceřádkovou.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Re: Dotazy začátečníka 2
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?
Picaxe nezná záporná čísla (v dokumentaci: The microcontroller does not support fractions or negative numbers.). Občas se někam dá napsat mínus, ale je to v doplňku, tj. -1 je v proměnných bněco totéž co 255 a ve wněco 65535.
(Takže v béčkách je -128 = 128 a ve wéčkách -32768 = 32768 jo a taky neuznává priority operátorů, podle něj je 2+3*4 dvacet )
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Re: Dotazy začátečníka 2
5 pulsin C.7,1,w6;nacteni jizdy signál z RC v rozsahu 80-220
15 let w2=w6-150*15 max 1023 ;uprava rozsahu při w6=150=) w2 =0(středová poloha jízda/motor stop) -jizda vpřed w6=151-150=1 *15 =) w2=15
19 let w2=w6-150*8 max 600 ;uprava rozsahu - jízda vzad(přepíná relé) w6=149-150*8 =)w2= 8 (jsem pochopil teď, že - ve výsledku je +)
21 pwmout C.3,255,w2
nikde jsem nevyděl takže jsem nevěděl -) " Takže v béčkách je -128 = 128 "
děkuji za informaci, je to v podstatě moje druhé programovaní ( to první bylo před 28 roky v basicu pro 8b počítače na střední)
Asi jsem rapl když jsem se do toho pustil po přečtení pár článku od ing Černého, připadlo mi to jednoduché.
15 let w2=w6-150*15 max 1023 ;uprava rozsahu při w6=150=) w2 =0(středová poloha jízda/motor stop) -jizda vpřed w6=151-150=1 *15 =) w2=15
19 let w2=w6-150*8 max 600 ;uprava rozsahu - jízda vzad(přepíná relé) w6=149-150*8 =)w2= 8 (jsem pochopil teď, že - ve výsledku je +)
21 pwmout C.3,255,w2
nikde jsem nevyděl takže jsem nevěděl -) " Takže v béčkách je -128 = 128 "
děkuji za informaci, je to v podstatě moje druhé programovaní ( to první bylo před 28 roky v basicu pro 8b počítače na střední)
Asi jsem rapl když jsem se do toho pustil po přečtení pár článku od ing Černého, připadlo mi to jednoduché.