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.
Jedna tipke dvije funkcije
Moderators: pedja089, stojke369, [eDo], trax
Re: Jedna tipke dvije funkcije
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...
Na picbasic.co.uk je bio kod koji detektuje kratak, dug, dupli klik tastera...
Pa ga potrazi, ili probaj sam napraviti nesto...
Re: Jedna tipke dvije funkcije
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
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
- morski_pas
- Odlično uznapredovao
- Posts: 639
- Joined: 07-03-2011, 23:58
- Location: Rijeka
Re: Jedna tipke dvije funkcije
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
http://www.elektronika.ba/forum/viewtop ... &start=680
- MladaNada
- 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
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.
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.
Re: Jedna tipke dvije funkcije
Može seMatej, mislim da to rjesenje nije ispravno. Kod tog koda, 5 sekundi nakon pritiska drugmeta ne moze se pritisnuti opet.
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.
- MladaNada
- 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
U pravu si.