ik ben nog maar pas bezig pet pic's en heb de taal toch al iets onder de knie maar nie wil ik 4 effecten aansturen door 1 drukknop dus bv
1 druk op schakelaar 1 = effect1
2x druk op schakelaar 1 = effect2
3x druk op schakelaar 1 = effect3
4x druk op schakelaar 1 = effect4
ik gebruikt proton ide lite voor het schijven
dus liefst in basic taal uitgelegt
grt skywalker
Ik weet niet of picbasic dezelfde commando's heeft als visual basic maar daar zou ik het zo doen:
Je zult een counter moeten hebben, die van o tot 3 telt.
Ik weet niet hoe je de knoppen uitleest maar ik noem ze maar even knop+ en knop-.
knop+:
counter = counter + 1
if counter => 3 then counter = 0
end sub
knop-:
counter = counter - 1
if counter =< 0 then counter = 3
end sub
Main-programma
if counter = 0 then effect1
if counter = 1 then effect2
if counter = 2 then effect3
if counter = 3 then effect4
hij wil het met een knop dus het vlg. moet al voldoende zijn:
knop:
counter = counter + 1
if counter =>3 then counter = 0
end sub
Main-programma
if counter = 0 then effect1
if counter = 1 then effect2
if counter = 2 then effect3
if counter = 3 then effect4
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Ik zou het zo doen:
TrisA %11111111 'porta zijn ingangen
TrisB %00000000 'portb zijn uitgangen
symbol knop=portb.1 'uitgang portb.1 heet
voortaan "knop"
symbol actie1= porta.0 'alle acties hun eigen poort
symbol actie2= porta.1
symbol actie3= porta.2
symbol actie4= porta.3
dim teller as byte 'variabele "teller" is gemaakt
teller = 0 'variabele "teller" op nul gezet
Loop:
If knop = 1 then inc teller 'als knop is ingedrukt...
'teller met 1 verhogen
While knop = 1 'om verder te gaan moet knop eerst losgelaten worden
wend
if teller = 1 then actie1 = 1 else actie1 = 0
if teller = 2 then actie2 = 1 else actie2 = 0
if teller = 3 then actie3 = 1 else actie3 = 0
if teller = 4 then actie4 = 1 else actie4 = 0
if teller = 5 then teller = 0
goto Loop
end
Het kan ongetwijfeld nog simpeler, maar dit is het eerste wat in me opkomt, Sky
De eerste regeltjes als Device, Clock, etc. ken je wel toch?
Even een paar aanpassingen gemaakt.
Leering getrokken: "Probeer nooit wijs te doen als je moe bent" 
[Bericht gewijzigd door Fantomaz op ]
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Doe het meer zo:
'Op portb.1 is een knop aangesloten, ontendert, met een pulldown weerstand (actief = 1)
Symbol knop = PORTB.1 'uitgang portb.1 heet voortaan "knop"
Symbol timeout = 1000 'in ms, de timeout tijd geven
Symbol options = 4 'Aantal opties, optienummer staat bij aankomst bij actie in "teller"
Input knop
Dim teller As Byte 'variabele "teller" is gemaakt
Dim x As Word 'Timeout variabele, wanneer tot actie overgaan
teller = 0 'variabele "teller" op nul gezet
While knop = 0 'Wacht tot de knop ingedrukt wordt
Wend
For teller = 1 To options
x = 0
While knop = 0 'Wacht tot de knop wordt ingedrukt of dat de timeouttijd verstrijkt
If x > timeout Then GoTo actie
DelayMS 1
Wend
DelayMS 10 'Wacht op de ontdendering
While knop = 1
Wend
DelayMS 10 'Wacht op ontdendering
Next
GoTo actie
actie:
'Actienummer staat in variabele "teller"
Voordelen:
- Je mag langer dan de tijd die een pic nodig heeft voor het doorlopen van een cycle de knop ingedrukt houden
- Kleinere code
- Makkelijk uitbreidbaar
Nadelen:
- Misschien lastiger te begrijpen.
Als je nu de knop ingedrukt hebt, wacht hij een seconde en gaat dan over naar actie. Als je binnen die seconde nog een keer de knop indrukt gaat ie de teller opvoeren en nog een keer een seconde proberen te wachten.
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
'Op portb.1 is een knop aangesloten, ontendert, met een pulldown weerstand (actief = 1)
Symbol knop = PORTB.1 'uitgang portb.1 heet voortaan "knop"
Symbol timeout = 1000 'in ms, de timeout tijd geven
Symbol options = 4 'Aantal opties, optienummer staat bij aankomst bij actie in "teller"
Input knop
Dim teller As Byte 'variabele "teller" is gemaakt
Dim x As Byte 'Timeout variabele, wanneer tot actie overgaan
teller = 0 'variabele "teller" op nul gezet
While knop = 0 'Wacht tot de knop ingedrukt wordt
Wend
For teller = 1 To options
x = 0
While knop = 0 'Wacht tot de knop wordt ingedrukt of dat de timeouttijd verstrijkt
If x > timeout Then GoTo actie
DelayMS 1
Wend
Volgens mij moet je hier nog een INC (increase) commando toevoegen anders kom je nooit op de 1000
Maar als ik het goed begrijp blijft de While/wend lus actief zolang hij ingedrukt blijft en tot dit 1 seconde duurt, waarna hij naar "actie" gaat.
DelayMS 10 'Wacht op de ontdendering
While knop = 1
Wend
DelayMS 10 'Wacht op ontdendering
Dit begrijp ik niet. Als je de knop binnen de seconde (1000mS)loslaat, heeft deze While/wend geen zin omdat de lus hier wacht tot je hem loslaat...
Next
GoTo actie
Als ik dit goed heb, zal deze opzet je 4x de kans geven om een knop binnen een seconde in te drukken om bij "actie" te komen. (Na die seconde kom je daar alsnog) Na die 4 kansen (let wel dat dit retesnel gebeurd) kom je ook bij die "actie"
Dus ik begrijp de opzet niet helemaal meer...
actie:
'Actienummer staat in variabele "teller"
Voordelen:
- Je mag langer dan de tijd die een pic nodig heeft voor het doorlopen van een cycle de knop ingedrukt houden
- Kleinere code
- Makkelijk uitbreidbaar
Nadelen:
- Misschien lastiger te begrijpen.
Als je nu de knop ingedrukt hebt, wacht hij een seconde en gaat dan over naar actie. Als je binnen die seconde nog een keer de knop indrukt gaat ie de teller opvoeren en nog een keer een seconde proberen te wachten.[/quote]
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
While knop = 0 'Wacht tot de knop ingedrukt wordt
Wend
For teller = 1 To options
x = 0
While knop = 0 'Wacht tot de knop wordt ingedrukt of dat de timeouttijd verstrijkt
Die knop is al ingedrukt dus zal hij hieraan voorbij gaan
If x > timeout Then GoTo actie
DelayMS 1
Wend
DelayMS 10 'Wacht op de ontdendering
While knop = 1
Wend
DelayMS 10 'Wacht op ontdendering
Next
GoTo actie
Volgens mij ga je rechtstreeks naar het punt waar je de knop weer los moet laten. Doe je dat, kom je bij Actie uit...
nu zit ik met het volgende probleem
ik krijg foutmeldingen als ik het HEX bestand in de pIC wil loaden het heeft altijd gewerkt went ben er gisteren de hele
dag met bezig geweest. ik dacht dat de pic stuks was dus ik stak er een nieuwe in maar niks , hij blijft die foutmelding maar geven ook bij heel simpele dingetjes
http://skywalker0001.myphotoalbum.com/view_photo.php?full=1&set_al…
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Op 29 augustus 2005 21:04:30 schreef Fantomaz:
'Op portb.1 is een knop aangesloten, ontendert, met een pulldown weerstand (actief = 1) Symbol knop = PORTB.1 'uitgang portb.1 heet voortaan "knop" Symbol timeout = 1000 'in ms, de timeout tijd geven Symbol options = 4 'Aantal opties, optienummer staat bij aankomst bij actie in "teller" Input knop Dim teller As Byte 'variabele "teller" is gemaakt Dim x As Byte 'Timeout variabele, wanneer tot actie overgaan teller = 0 'variabele "teller" op nul gezet While knop = 0 'Wacht tot de knop ingedrukt wordt Wend For teller = 1 To options x = 0 While knop = 0 'Wacht tot de knop wordt ingedrukt of dat de timeouttijd verstrijkt If x > timeout Then GoTo actie DelayMS 1 WendVolgens mij moet je hier nog een INC (increase) commando toevoegen anders kom je nooit op de 1000
Gelijk heb je 
Maar als ik het goed begrijp blijft de While/wend lus actief zolang hij ingedrukt blijft en tot dit 1 seconde duurt, waarna hij naar "actie" gaat.
Nee, andersom. De while/wend lus blijft actief zolang de knop losgelaten is. Dus dan loopt de timeout timer.
DelayMS 10 'Wacht op de ontdendering While knop = 1 Wend DelayMS 10 'Wacht op ontdenderingDit begrijp ik niet. Als je de knop binnen de seconde (1000mS)loslaat, heeft deze While/wend geen zin omdat de lus hier wacht tot je hem loslaat...
Voor de wat tragere gebruikers onder ons:
Hij begint pas te tellen als de knop weer losgelaten is. Vooral wat oudere mensen help je daarmee. Knop mag dus max 1 sec niet ingedrukt worden.
Next GoTo actieAls ik dit goed heb, zal deze opzet je 4x de kans geven om een knop binnen een seconde in te drukken om bij "actie" te komen. (Na die seconde kom je daar alsnog) Na die 4 kansen (let wel dat dit retesnel gebeurd) kom je ook bij die "actie"
Dus ik begrijp de opzet niet helemaal meer...
Dat is een vangrailtje. Als de timeout overgelopen is, gaat ie zoiezo ook naar actie. Maar als je vaker drukt dan er opties zijn, binnen de timeout periodes, verlaat dit apparaat de for/next lus. En gaat hij dus vrolijk verder in het programma, mocht het subje "actie:" er niet direct achter staan.
actie:
'Actienummer staat in variabele "teller"
Voordelen:
- Je mag langer dan de tijd die een pic nodig heeft voor het doorlopen van een cycle de knop ingedrukt houden
- Kleinere code
- Makkelijk uitbreidbaar
Nadelen:
- Misschien lastiger te begrijpen.
Als je nu de knop ingedrukt hebt, wacht hij een seconde en gaat dan over naar actie. Als je binnen die seconde nog een keer de knop indrukt gaat ie de teller opvoeren en nog een keer een seconde proberen te wachten.[/quote]
[/quote]
Snappie?
--
Nog een foutje:
x kan maar 255 worden! dus:
dim x as word
Fantomaz
Ik moet hier weer vaker komen... Wat kun je zo'n forum als deze gaan missen. :-)
Op 29 augustus 2005 23:04:02 schreef skywalker1:
nu zit ik met het volgende probleem
ik krijg foutmeldingen als ik het HEX bestand in de pIC wil loaden het heeft altijd gewerkt went ben er gisteren de hele
dag met bezig geweest. ik dacht dat de pic stuks was dus ik stak er een nieuwe in maar niks , hij blijft die foutmelding maar geven ook bij heel simpele dingetjes
http://skywalker0001.myphotoalbum.com/view_photo.php?full=1&set_al…
Een heel veel voorkomende algemene fout.
Ik weet niet hoe het komt of hoe je er vanaf komt...
ondertussen werk alles terug normaal
geen fouten meer. is raar soms fouten geeft
en als ik de volgende dag de zelfde HEX file her in wil loaden dan geeft de geen enkele error