08M2 + IR
Re: 08M2 + IR
No to jsem si taky myslel, ale mate mne v tom programu co tam má právě to stisknout, což evokuje stisknutí tlačítka, ale na dalším řádku je spustit a tam ve vysvětlivkách je teprve uvedeno stisknutí tlačítka. Co se tím vlastně myslí?.
-
- Příspěvky: 85
- Registrován: 02 úno 2014, 02:12
Re: 08M2 + IR
V tomhle tvaru mi to nechce pobrat překladač.jova píše:
Třeba takto?Kód: Vybrat vše
if b0 = 18 then gosub plus ... plus: if b0=18 then goto plus end if ...
Jde to takhle, ale zacyklí se to v praxi i v simulaci...
Kód: Vybrat vše
plus:
if b0=18 then
goto plus
endif
Mně je v principu jedno, jestli to změní PWM a pak to bude čekat na konec stisku, nebo obráceně. Ale prostě to tam nedokážu dostat...
Re: 08M2 + IR
O to zacyklení právě jde. Běžně tak ošetřuji tlačítka:
S příkazem irin zkušenost nemám, možná by ho tam do toho cyklu chtělo vložit. Pak by to mělo fungovat tak, že pokud přijme 18, odskočí na podprogram plus, tam se zacyklí a teprve až tam ta 18 nebude, bude pokračovat dál.
Takže asi nějak takto:
Kód: Vybrat vše
...
if pinc.0=0 then goto menu ;při stisku tlačítka jdi na menu
...
menu:
if pinc.0=0 then goto menu ;při stále stisknutém tlačítku se to zacyklí a při uvolnění teprve pokračuje dál
...
Takže asi nějak takto:
Kód: Vybrat vše
start:
irin C.1,b0
if b0 = 18 then goto plus
goto start
plus:
irin C.1,b0
if b0=18 then goto plus
...
-
- Příspěvky: 85
- Registrován: 02 úno 2014, 02:12
Re: 08M2 + IR
To by mohlo bejt ono, akorát to vyzkouším až večer. Pokud v tom zacyklení ten "irin" není, tak se to nemá jak odcyklovat .
Zatím díky všem.
Zatím díky všem.
-
- Příspěvky: 85
- Registrován: 02 úno 2014, 02:12
Re: 08M2 + IR
Tak jsem to vyzkoušel se všema možnejma úpravama a nefunguje
Re: 08M2 + IR
Jseš si jistý, že to tlačítko na dálkovém ovladači má automatické opakování? Pokud by nemělo, tak nemáš žádnou šanci zjistit, jestli jsi to tlačítko už pustil. Pokud tam automatické opakování je, tak by to mělo jít programem zjistit. Zkus nejprve nějaký jednoduchý program na výpis přijatých kódů a podle toho poznáš, jestli tam to opakování je a jak je rychlé (samozřejmě to můžeš zjistit i přímo na ovladači, pokud má signalizaci LEDkou a ta rychle bliká).
např. (viz http://www.picaxe.com/BASIC-Commands/Di ... tput/irin/ ):
např. (viz http://www.picaxe.com/BASIC-Commands/Di ... tput/irin/ ):
Kód: Vybrat vše
#terminal 4800 ; Use the terminal for display
main:
irin C.3, b0 ; Read IR key press
sertxd( "Key code = ", #b0, cr, lf ) ; Report which key was pressed
goto main ; Repeat
-
- Příspěvky: 85
- Registrován: 02 úno 2014, 02:12
Re: 08M2 + IR
Opakování tam mám, ale kolik a jak je rychlý teď z hlavy nevím, ledka tam není. Vysílač je taky 08M2, takže to můžu upravit jakkoliv. Tohle tlačítko dává kód 018, takže V+, to by mělo bejt opakovací. Pokud to "přidávání rychlosti" udělám smyčkou, do který přičítám proměnnou, tak to funguje a přidává, dokud to mačkám.
Re: 08M2 + IR
V tom případě by mělo fungovat to, co napsal jova. Po úpravě a neúplně nějak takto:
Kód: Vybrat vše
start:
irin [200],C.3,b0
if b0 != 18 then goto start ; cekani na stisk tlacitka
; tady musi byt zvyseni rychlosti motoru (pokud neni na maximu)
cekej:
irin [200],C.3,b0 ; timeout by mel byt jen o malo delsi nez je perioda opakovani stisku tlacitka
if b0=18 then goto cekej ; cekani na uvolneni tlacitka
goto start
Re: 08M2 + IR
Tohle by snad fungovat mohlo:
Tlačítko s kódem 18 přičítá k proměnné test, kód 19 od ní odečítá. Vyzkoušel jsem to na 14M2, ale není žádný důvod, proč by to stejně nefungovalo i na 08M2.
Kód: Vybrat vše
#picaxe 14M2
#no_data
symbol infra_old = b0
symbol test = b1
infra_old = 0
infra = 0
do
irin C.3, infra
select infra
case 18
inc test
case 19
dec test
endselect
infra_old = infra
do
debug
infra = 0
irin [100], C.3, infra
if infra <> infra_old then exit
pause 45
infra = 0
loop
loop
jrt
Re: 08M2 + IR
Omlouvam se, jsem na dovolene a pripojeni tu spis neni nez jejova píše:No já to pochopil tak, že má program po stisknutí tlačítka někam skočit a čekat dokud se to tlačítko neuvolní.
Pak teprve pokračovat a provést příkaz.
Ale jak to Gilhad vážně myslel, ví asi jen on sám
mysleno to bylo tak, ze je nejaky subprogram nacti_signal_up, ktery se podiva, zda je prave v tento okamzik stisknuto tlacitko signal, pokud je stisknuto, nastavi stisknuto_up na 1, jinak ji nastavi na 0 a okamzite zase skonci. V podstate ekvivalent precteni aktualni hodnoty z pinu.
Nasledujici prostocvik s pustit_up zajisti debouncing bez velkeho blokovani
idea je stavovy automat, ktery prechazi mezi par zakladnimi stavy:
- na zacatku neni stisknuto nic
- pak prijde stisk tlacitka, chvilku se pocka nez prejdou zakmity, nastavi se vyssi rychlost (s omezenim maxima) a je treba vyckat pusteni tlacitka
- pak nekdo tlacitko pusti (chvilku se pocka nez prejdou zakmity) a prejde se do stavu cekani na dalsi stisk
Trik je v tom, ze se jen rychle podivam, zda je tlacitko stisknuto a necekam na ten stisk, ani na pusteni, misto toho prochazim smyskou, kde se daji delat i jine zajimave veci (blikat diodama, ptat se na jina tlacitka, sledovat senzory, planovat trasu ...) a obsluze tlacitka je vzdy vyhrazen jen maly kousek casu a jinak se dela "neco uzitecneho".
Proto tam jsou ty promenne dve - jedna indikuje stav tlacitka (stisknuto/pusteno), druha indikuje, zda jde o prvni pruchod smyckou o akci (cili se ma preradit), nebo zda se jen ceka na pomaleho cloveka, az to tlacitko zase pusti (z hlediska procesoru asi tak za jednu vecnost)