Jedna tipke dvije funkcije

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Jedna tipke dvije funkcije

Post by febo26 »

Neznam kako da napravim da mi jedna tipka radi dvije funkcije.
Treba mi da dok pritisnem tipku znaci jedan klik poveca vrijednost nekog broja za 10 to znam kako izvest ali neznam kako napraviti da ako tu istu tipku drzim 5 sekundi pritisnutu da mi promjeni stanje recimo na portu A.1.
Da li trebam imati neki timer koji ce mjeriti vrijeme koliko je tipka stisnuta ili ima neki drugi nacin.
nemam ideju kako to izvesti.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Jedna tipke dvije funkcije

Post by pedja089 »

Na neki nacin moras meriti vreme. Merenje pocinjes na opadajucoj ivici signala, a stopiras na rastucoj. Mozes tajmer, mozes i softverski odraditi...
Na picbasic.co.uk je bio kod koji detektuje kratak, dug, dupli klik tastera...
Pa ga potrazi, ili probaj sam napraviti nesto...
matejj
Posts: 6
Joined: 22-10-2012, 21:12

Re: Jedna tipke dvije funkcije

Post by matejj »

U mikroBasic-u bi to ovako trebalo ici, ali kad shvatis princip lako preoblikujes kod u bilo koji jezik.

Recimo da ti je na porta.0 spojena tipka.

If PORTA.0=1 Then
For x=1 to 10000 (stavis broj koji odgovara vremenskom razmaku od 5s, isprobavvaj razne vrijednsoti)
If PORTA.0=1 Then
ElseIf PORTA.0=0 Then
goto main (main sam stavio samo za primjer)
End If
End If
Next x
- tu stavis naredbu koju hoces da izvrsi nakon sto si drzao tipku 5 sekundi -
End If
User avatar
morski_pas
Odlično uznapredovao
Odlično uznapredovao
Posts: 639
Joined: 07-03-2011, 23:58
Location: Rijeka

Re: Jedna tipke dvije funkcije

Post by morski_pas »

pogledaj na ovoj stranici deveti post po redu imaš opis kako upotrijebiti jedan taster za više funkcija,

http://www.elektronika.ba/forum/viewtop ... &start=680
User avatar
MladaNada
Stariji član
Stariji član
Posts: 2529
Joined: 20-05-2006, 14:57
Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG

Re: Jedna tipke dvije funkcije

Post by MladaNada »

Matej, mislim da to rjesenje nije ispravno. Kod tog koda, 5 sekundi nakon pritiska drugmeta ne moze se pritisnuti opet.
Ispravno bi bilo da kroz svaku iteraciju ponovo provjerava da li je dugme jos pritisnuto, ako nije da ide iz pocetka. Nemam sad vremena da pisem kod, ali otprilike ovako ide algoritam:

- Postavi port na input
- redovno provjeravaj da li je doslo do promjene na portu, tj da li je visok ili nizak, zavisno kako postavis dugme
- Postoji promjena na portu, zovi funkciju btnClick() (ili peropetrovic() kako god je nazoves)

btnclick funkcija:

- Provjeri da li je dugme jos pritisnuto,
ako jeste:
- Provjeri da li je varijabla koja cuva vrijeme veca od 5 sekundi.
- Ako jeste, zove funkciju za vise od 5 sekundi, resetuje vremensku varijablu
- doda vremenskoj varijabli trajanje jednog ciklusa koda, proracunato na osnovu takta mikrokontrolera.
ako nije:
Provjeri da li je vremenska varijabla duza od 5 sekundi,
ako jeste: zove 5s kod, resetuje varijablu
ako nije, zove funkciju za kraci pritisak dugmeta, resetuje varijablu

Nemam nekog iskustva sa mikrokontrolerima, uglavnom radim web programiranje, ali principi su slicni, a i sad mi je stigao arduino pa moram obnoviti znanje. Mozda ima i jednostavniji nacin da se ovo odradi, a mozda sam i negdje pogrijesio, iako mi ovako djeluje ok.
Edit: Mislim da treba jos dorade, jer ovako kad bi neko drzao duze od 5 sekundi, odradio bi i jedan i drugi dio koda.
matejj
Posts: 6
Joined: 22-10-2012, 21:12

Re: Jedna tipke dvije funkcije

Post by matejj »

Matej, mislim da to rjesenje nije ispravno. Kod tog koda, 5 sekundi nakon pritiska drugmeta ne moze se pritisnuti opet.
Može se :)
FOR-NEXT petlja za svaku vrijednost X provjerava dali je tipka pritisnuta ili nije. Ako je tipka pritisnuta petlja normalno nastavlja, a ako očita da tipka nije pritisnuta (PORTA.0=0) tada prelazi na pocetak programa (ja sam u primjeru stavio main, u biti moze se staviti bilo koji dio programa). Znači, i da on drzi tipku pritisnuti recimo samo 2 sekunde, petlja ce automatski kada provjeri stanje tipke izbaciti program iz petlje tako da moze opet bez problema pritisnuti tipku.
User avatar
MladaNada
Stariji član
Stariji član
Posts: 2529
Joined: 20-05-2006, 14:57
Location: Banja Luka RS , Novi Sad RS , Herceg Novi CG

Re: Jedna tipke dvije funkcije

Post by MladaNada »

U pravu si.
Post Reply