 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Pon Apr 24, 2006 11:05 pm Naslov sporočila: Tipka |
|
|
Sem začetnik pri programiranju in sicer 2051 v Bascom-u.
Problem je, da nevem kako z eno tipko kontrolirati več funkcij.
Drugače povedano imam tipko s katero bi spreminjal satnje spremenljivke. |
|
Nazaj na vrh |
|
 |
Domenius Član



Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.02 Kraj: Medvode
|
Objavljeno: Pon Apr 24, 2006 11:39 pm Naslov sporočila: |
|
|
Če bi rad spremenil spremenljivko a za 1+, se mora ob pritisku tipke izvršiti ukaz a = a + 1. Če ne želiš, da je a > 10, to preveri z if stavkom - če je resničen, postavi a na 0 - recimo, in potem se zgodba ponovi - tukaj v bistvu ne rabiš dveh tipk, ene za zmanjševanje, druge pa za povečevanje. Če pa bi rad ob različnih vrednostih a-ja dostopal do različnih funkciji oz. podprogramov pa uporabi Select Case - o tem ukazu si malo preberi Bascom Help - imaš tudi podkrepljeno s primerom. _________________ It's electric! |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Apr 25, 2006 8:55 am Naslov sporočila: |
|
|
Verjetno potrebuješ nekakšen menu. Ena moznost je LCD display, druga možnost je nekaj LED diod. Ko sveti neka dioda, se ob pritisku na tipko izvede določena procedura ali funkcija....
Jur |
|
Nazaj na vrh |
|
 |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Tor Apr 25, 2006 9:30 am Naslov sporočila: |
|
|
V mislih imam nastavitve utripanja in izbiro moči za kolesarsko luč. Problem je v tem da nevem kako šteti pritiske. Če je tipka vezana na eno funkcijo to ni problem samo če imam eno tipko in eno ali več funkcij nastane problem. |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Apr 25, 2006 9:52 am Naslov sporočila: |
|
|
V principu je preprosto. Ko prižgeš napravo, ima nek števec vrednost nič.
Potrebuješ zanko, kjer preverjaš tipko. Če je tipka pritisnjena, povečaš stevec za eno. V zanki tudi preverjaš koliko je števec in odvisno od tega ukrepaš. Po nekaj pritiskih je potrebno resetirati števec, da se meni razsvetljave ponavlja. Primer z besedami kako bi to šlo:
Jur
začetek:
števectipke=0 //ob vklopu luč sveti minimalno
loop:
ali je kdo pritisnil na tipko? če je, povečamo stevectipke za eno //preverjanje tipke in debounce
če je stevectipke 0 , luč(25%) //regulacija luči na minimumu
če je stevectipke 1 , luč(50%) //regulacija luči na polovici
če je stevectipke 2 , luč(75%) //regulacija luči na pol
če je stevectipke 3 , luč(100%) //regulacija luči na polno
če je stevectipke 4 , luč(25%) //regulacija luči na minimum
Če je števectipke enak štiri, ga damo na nulo //ponavljanje menuja
goto loop //ponavljamo dokler je naprava vključena
end |
|
Nazaj na vrh |
|
 |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Tor Apr 25, 2006 8:30 pm Naslov sporočila: |
|
|
Sem našel neki primer samo ne dela.
Koda: |
Dim P16 As Bit , P15 As Bit , Mod1 As Byte , Mux As Byte , T3 As Bit
T3 = P1.1
P16 = 1
P15 = 0
Mod1 = 2
Do
If Mod1 = 1 Then
P1.6 = P15
End If
If Mod1 = 2 Then
P1.6 = P16
End If
If Mod1 = 3 Then
P1.6 = 0
End If
Gosub Tipke
Loop
Tipke:
If Mux > 2 Then
Debounce T3 , 0 , Mod2 , Sub
End If
Return
Mod2:
Incr Mod1
If Mod1 > 3 Then
Mod1 = 1
End If
Return
|
|
|
Nazaj na vrh |
|
 |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Tor Apr 25, 2006 9:26 pm Naslov sporočila: |
|
|
Zdej (vsaj v simulatorju) del... Ampak samo za eno tipko. Kako nastaviti še en dodten števec?
To pa je trentuna koda:
Koda: |
Dim A As Byte , D As Byte
Reset P1.2
Reset P1.3
Reset P1.4
Reset P1.6
Config Timer0 = Counter , Mode = 1 , Gate = Internal
Counter0 = 0
Do
D = Counter0
A = D + 1
If P1.6 = 1 Then
Counter0 = A
End If
Gosub Mod1
If D = 3 Then
Counter0 = 0
Else
End If
Loop
Mod1:
If D = 1 Then
Gosub H
Else
If D = 2 Then
Gosub J
Else
If D = 3 Then
Gosub K
Else
End If
End If
End If
Return
H:
Set P1.2
Return
J:
Set P1.3
Return
K:
Set P1.4
Return
|
|
|
Nazaj na vrh |
|
 |
Domenius Član



Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.02 Kraj: Medvode
|
Objavljeno: Tor Apr 25, 2006 11:26 pm Naslov sporočila: |
|
|
Malo sem preuredil tvoj program in dodal še eno spremenljivko - tipko, (B). Mogoče so kje kakšne napake, ker sem ga na pamet napisal direktno v sporočilo. Ker si začetnik v programiranju ti svetujem, da pri programih, ki jih napišeš spremljaš spremenljivke v simulatorju - s tem se boš dosti naučil.
Koda: |
Dim A As Bit, B As Bit
Reset P1.2
Reset P1.3
Reset P1.4
Reset P1.6
Reset P1.5
A = 0
B = 0
Do
Debounce P1.6 , 1 , A_podprogram , Sub
Debounce P1.5 , 1 , B_podprogram , Sub
Loop
A_podprogram:
A = A + 1
Select Case A
Case A = 1: Gosub H
Case A = 2: Gosub J
Case A = 3: Gosub K
Case Else : A = 0
End Select
Return
B_podprogram:
B = B +1
Return
H:
Set P1.2
Return
J:
Set P1.3
Return
K:
Set P1.4
Return
|
_________________ It's electric! |
|
Nazaj na vrh |
|
 |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Sre Apr 26, 2006 4:38 pm Naslov sporočila: |
|
|
Ta operacija in tista B = B +1 napiše:
Citiram: |
illegal mathematical operation |
Vseeno hvala za odgovor sem to napako odpravil.[/b] |
|
Nazaj na vrh |
|
 |
Domenius Član



Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.02 Kraj: Medvode
|
Objavljeno: Sre Apr 26, 2006 5:45 pm Naslov sporočila: |
|
|
Ups, na začetku bi moral definirati A in B kot bajt - Dim A As Byte, B As Byte. _________________ It's electric! |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
Objavljeno: Čet Apr 27, 2006 7:31 am Naslov sporočila: |
|
|
Sam imam prav tako eno tipko ki ima več funkcij..
Naredil sem interupt, ki zazna kdaj je tipka pritisnjena in potem šteje čas dokler se tipka ne sprosti. Ko se tipka sprosti javi v eni(int) sprejemljivki čas v 1/200sekunde, drug bit pa da znak, da je bila tipka prebrana.
Nato v main programu čekiram tale bit in ko je dvignjen vem, da je bila tipka pritsinjena in spuščena in v main-u obdelam čas tipke.
- Če je čas tipke < neke vrednosti gre verjetno za napako branja
- Če je čas tipke manjši od t1 in večji od t2 potem naredim eno funkcijo
- Če je čas tipke manjši od t3 in večji od t4 potem naredim eno funkcijo
- in tako naprej...
Je pa problem ker z eno tipko težko realiziraš toliko funkcij..
Sicer pa si kot odličen primer lahko pogledaš ročno uro..
Z istim interuptnim programom lahko tako kontroliraš več tipk in seveda izključiš "debounche" torej že v interuptu lahko filtiraš pritiske tipke kjer je čas manjši od nekega..
Tako nekako.. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 491 dni
Powered by phpBB © 2001, 2005 phpBB Group
|