08M2 + IR

Pepa z depa
Příspěvky: 85
Registrován: 02 úno 2014, 02:12

08M2 + IR

Příspěvek od Pepa z depa »

Zdarvím všechny picaxáře.
Hledal jsem, ale nenašel.
Mám vysílač 08M2 se čtyřmi tlačítky.
Přijímač je taky 08M2 + TSOP34838. Výstup je FET tranzistor na který je připojen ss motor. Je tam i relé pro revers - nechtěl jsem používat H-most - to ale není součástí mého dotazu.
Potřebuju funkci, aby se po stisknutí tlačítka motor rozjel, ale bude mít víc rychlostí - takže aby se rozjel na "jedničku". A až dalším stiskem tlačítka "zařadil za 2"...
Jinými slovy potřebuju pro IR vstup fci obdobnou jako tahle:

Kód: Vybrat vše

do
		pause 50		
		if tlON = 1 then exit ; cekani na konec stisku tl ON
		pause 50
	loop 
Začal jsem takhle, ale nějak nevím jak tam to čekání na konec stisku zařadit

Kód: Vybrat vše

smycka:
 
irin [1000,smycka],C.3,b0 ; cekani na signal

if b0 = 18 then
gosub plus
endif

goto smycka ; skok na začátek smycky
Poradí někdo jak to tam dostat? Díky za odpovědi
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: 08M2 + IR

Příspěvek od jrt »

Nějak mi nekorespondují ty kódy s popisem funkce.

Chceš:
Stiskem tlačítka spustit motor na "1", dalším stiskem zařadit "2", atd.

Nebo chceš držet tlačítko, rychlosti se budou řadit samy v určitém časovém intervalu a až pustíš tlačítko, tak se motor bude otáčet poslední zvolenou rychlostí?

Nebo se motor má po uvolnění tlačítka zastavit?
jrt
Pepa z depa
Příspěvky: 85
Registrován: 02 úno 2014, 02:12

Re: 08M2 + IR

Příspěvek od Pepa z depa »

Za A je správně. Prostě při zmačknutí na libovolnou dobu to "přeřadí" (asi bych spíš měl psát "zrychlí") o jeden stupeň (změní PWMduty) a program bude čekat na puštění tlačítka, (samozřejmě počítám s tím, že pokud se vysílač ve chvíli řazení "odkloní" mimo vyzařovací úhel a pak se zase vrátí tak to bude jako kdyby se tlačítko zmačklo 2x). Po puštění tlačítka motor pojede dál zvolenou rychlostí.
Aby to řadilo "samo" nahoru, nebo dolů bych řešil časovou smyčkou s přičítáním nebo odečítáním do proměnné, ale to nechci. Na zastavení bude samostatné tlačítko.
Uživatelský avatar
gilhad
Příspěvky: 262
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: 08M2 + IR

Příspěvek od gilhad »

Ja bych na to sel nejak takhle (pocitam, ze casem bude signalu vic (zrychleni, zpomaleni, zastaveni, nejaka funkce...)) ale picaxe neumim, tak jen pseudokod:

Kód: Vybrat vše

rychlost=0; na zacatku stojim
max_rychlost = 12 ; napriklad, podle toho, kolik mam stupnu
stisknuto_up=0; na zacatku neni
pustit_up=0; na zacatku neni stisknuto, necekam na pusteni

velkasmycka:
...
gosub nacti_signal_up ; vrati aktualni stav v promenne stisknuto_up
if stisknuto_up = 1 then
    if pustit_up = 0 then ; jde o zacatek stisku
        pustit_up = 1 ; od ted cekam na pusteni tlacitka
        gosub wait_a_moment ; chvilku pockam kvuli zakmitum
        if rychlost < max_rychlost then
            rychlost = rychlost + 1 ; pridam
        else
            rychlost = max_rychlost ; srovna i pripadna prekroceni
        endif ; rychlost
    else; pustit_up uz je 1, nedelam nic
    endif
else ; stisknuto_up je 0
    if pustit_up =1 then ; uz nemusim cekat na pusteni
      pustit_up = 0
      gosub wait_a_moment ; chvilku pockam kvuli zakmitum
   else ; nic se nedeje, nic nedelam
   endif ; pustit_up
endif ; stisknuto_up
......
goto velkasmycka
Takhle ti kazdy pruchod smyskou zabere jen nacteni tlacitka (a pripadne osetreni zakmitu pi zmene) a tehle bloku za sebe muzes dat po libosti
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: 08M2 + IR

Příspěvek od daton »

Ahoj
koukám na ten kod a mám trochu zmatek v proměnné stisknout a pustit. Stisknout se načte jak 1 proč bych potom měl řešit proměnou pustit jako stisknout? Tady jsem trochu improvizoval ale jen nástřel

Kód: Vybrat vše

 A = 0; pomocná proměnná
 
 
 
 
gosub nacti_signal_up ; vrati aktualni stav v promenne stisknuto_up
if (stisknuto_up = 1 and A = 0) then
    if rychlost < max_rychlost then
        rychlost = rychlost + 1; zařadím rychlost 
       A=1; nastavím příznak proti zákmitům
        gosub wait_a_moment ; chvilku pockam kvuli zakmitum
        endif;
    else
     wait;  chvilka pro ustálení stavu
     A=0;
     endif;
             
        
        
Pepa z depa
Příspěvky: 85
Registrován: 02 úno 2014, 02:12

Re: 08M2 + IR

Příspěvek od Pepa z depa »

Příznak stisknutí, nebo uvolnění tlačítka je mi poměrně jasnej. Není mi ale furt jasný jak to provést v případě IR vstupu.
Prostě když mám :

Kód: Vybrat vše

if b0 = 18 then
gosub plus
...
=Při příchodu kódu 18 jdi na podprogram plus.
Ale jak mám udělat to čekání na konec stisku tlačítka? Pokud dám if b0=0..., tak to čeká na kód 0. Já ale potřebuju aby to čekalo na "žádnej kód"...
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: 08M2 + IR

Příspěvek od fulda »

Pepa z depa píše:Za A je správně. Prostě při zmačknutí na libovolnou dobu to "přeřadí" (asi bych spíš měl psát "zrychlí") o jeden stupeň (změní PWMduty) a program bude čekat na puštění tlačítka, (samozřejmě počítám s tím, že pokud se vysílač ve chvíli řazení "odkloní" mimo vyzařovací úhel a pak se zase vrátí tak to bude jako kdyby se tlačítko zmačklo 2x). Po puštění tlačítka motor pojede dál zvolenou rychlostí.
Aby to řadilo "samo" nahoru, nebo dolů bych řešil časovou smyčkou s přičítáním nebo odečítáním do proměnné, ale to nechci. Na zastavení bude samostatné tlačítko.
Jenom tak pro informaci - dálkové ovladače používají takovou malou fintu: máme tlačítka, která se neopakují - třeba tlačítka pro přepínání programů a tlačítka, která se opakují - třeba tlačítka pro hlasitost (čím déle držím, tím více to řve)
Ovladače mají na konci kódu vyhrazeny dva bity - první je příznak pro opakování (pokud je zde 1, pak při každém přijetí kódu inkrementuj hlasitost bez ohledu na to co bylo předtím), druhý je debouncer nebo jak to nazvat. Při prvním stisku je v něm 0 a při druhém stisku je v něm 1. Informace se udržuje ve statické paměti často držené kondenzátorem jen krátkou dobu. V praxi to znamená že se přijímač podívá, jestli stejný kód přijal i předtím a pokud ano, tak kód ignoruje, jinak jej použije. Po nějakém timeoutu kdy přijímač nepřijal žádný kód, tak smaže registr předchozího přijatého znaku.
Tím se tak jako samo od sebe vyřeší to odklonění a přiklonění ovladače.

... ale vyžaduje to, aby vysílač měl k dispozici nějakou paměť, která přežije alespoň pár sekund bez napájení. Možná jestli picaxe v deep sleep módu??
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: 08M2 + IR

Příspěvek od jova »

Pepa z depa píše:Při příchodu kódu 18 jdi na podprogram plus.
Ale jak mám udělat to čekání na konec stisku tlačítka? Pokud dám if b0=0..., tak to čeká na kód 0. Já ale potřebuju aby to čekalo na "žádnej kód"...
Třeba takto?

Kód: Vybrat vše

if b0 = 18 then gosub plus
...
plus:
if b0=18 then goto plus end if
...
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: 08M2 + IR

Příspěvek od daton »

A mohl by někdo mě vysvětlit jak to Gilhad myslel s tím stisknout a spustit? Co je tedy stisknutí tlačítka a k čemu je to druhé?
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: 08M2 + IR

Příspěvek od jova »

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