08M2 + IR

daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: 08M2 + IR

Příspěvek od daton »

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í?.
Pepa z depa
Příspěvky: 85
Registrován: 02 úno 2014, 02:12

Re: 08M2 + IR

Příspěvek od Pepa z depa »

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
...
V tomhle tvaru mi to nechce pobrat překladač.

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
A to co psal Gilhad jsem nepobral prozměnu já...

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...
jova
Příspěvky: 362
Registrován: 16 pro 2013, 11:40

Re: 08M2 + IR

Příspěvek od jova »

O to zacyklení právě jde. Běžně tak ošetřuji tlačítka:

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
...
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

start:
irin C.1,b0
if b0 = 18 then goto plus
goto start


plus:
irin C.1,b0
if b0=18 then goto plus 
...
Pepa z depa
Příspěvky: 85
Registrován: 02 úno 2014, 02:12

Re: 08M2 + IR

Příspěvek od Pepa z depa »

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.
Pepa z depa
Příspěvky: 85
Registrován: 02 úno 2014, 02:12

Re: 08M2 + IR

Příspěvek od Pepa z depa »

Tak jsem to vyzkoušel se všema možnejma úpravama a nefunguje :cry:
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: 08M2 + IR

Příspěvek od AlesH »

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/ ):

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
Pepa z depa
Příspěvky: 85
Registrován: 02 úno 2014, 02:12

Re: 08M2 + IR

Příspěvek od Pepa z depa »

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.
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: 08M2 + IR

Příspěvek od AlesH »

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
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: 08M2 + IR

Příspěvek od jrt »

Tohle by snad fungovat mohlo:

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
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.
jrt
Uživatelský avatar
gilhad
Příspěvky: 264
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: 08M2 + IR

Příspěvek od gilhad »

jova 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 :roll:
Omlouvam se, jsem na dovolene a pripojeni tu spis neni nez je :(

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)
Odpovědět