Hallo allemaal,

Ik ben bezig met het progameren van een pic waarbij ik een menu heb. Nu zou ik graag met een drukknop de verschillende functies in dat menu willen selekteren.

Zoals: 1keer drukken= lampen uit, 2 keer drukken= motor sturing, enz.

Nu is mijn probleem dat als ik op de drukknop duw dat mijn menu gewoon doorloopt ipv functie per functie af te gaan als ik alle keren 1 keer op de drukknop duw.

Weet iemand hoe je zo iets het best aan pakt?

Alvast bedankt!

je maakt allemaal aparte functies en als je in het main menu zit duw je 1 maal en je gaat naar de eerste functie, nu zet je in die eerste functie terug de code van de schakelaar en dan goto 2de functie enzoverder, dan moet elke functie wel en loopje zijn.

bv
main:
do
als sw1 = 0
goto functie1
(programma)
loop

functie1:
do
als sw1 = 0
goto functie2
(programma)
loop

heb het heel simpel geschreven wel :)

Wel zo had ik het ook gedaan, maar het bleek niet te werken want als je de drukknop langer dan een halve seconde inhield sloeg hij verschillende functies over. Ik heb er nochtans een anti dender schakeling voor gemaakt.

Zou het niet beter zijn als ik zou werken op de stijgende flank?

Maar ja, hoe progammeer je dat in godsnaam in een pic dat ie alleen maar moet verder springen van functie als er een stijgende flank is.

PS: ik heb de anti dender schakeling gemaakt met een shmitt-trigger en ik progammeer in asm.

ja dat is normaal , als je een delayroutine van bv een halve seconde bij in de functie zet zal hij niet naar de volgende gaan. ( delayroutine voor " als sw1 = 0 goto volgende functie")

ja maar ik kan toch moeilijk steeds zitten werken met delay times. Want dan kan het zijn dat je te lang weer moet wachten of te kort. En ook dan heb je weer het gevaar dat als je te lang duwt op de knop dat ie weer verschillende functies gaat overslaan. Terwijl het moet dat: 1 keer drukken = 1 functie verspringen ongeacht hoe lang je er op duwt.

Ik heb al een beetje gezocht hoe ik dat zou kunnen kunnen progameren om te werken op de stijgende flank. Maar tot nu toe heb ik nog niets gevonden!

Op 23 maart 2008 10:19:37 schreef on:

Maar ja, hoe progammeer je dat in godsnaam in een pic dat ie alleen maar moet verder springen van functie als er een stijgende flank is.

in_oud = in
in = lees ingang
als (in en niet(in_oud)) dan spring functie

Ik zou een teller bouwen die optelt tot waarde X.
Dat geheel gaat via een loopje. Met daarin eens stukje anti-dender etc.
Wanneer er na de "indruksessie" een tijd langer dan bv 200ms niets ingedrukt wordt, gaat het programma kijken wat de waarde van X is.
Die waarde correspondeert weer met de funkties die je wilt uitvoeren.

Op 23 maart 2008 10:33:22 schreef on: Terwijl het moet dat: 1 keer drukken = 1 functie verspringen ongeacht hoe lang je er op duwt.

Een While wend loopje die de boel vastzet in het programma zolang de knop is ingedrukt.
Laat je de knop los, zal de teller van 200mS weer gaan lopen.
Wordt binnen die tijd weer de knop ingedrukt, wordt X 1 hoger en reset de tijd weer.
Is de 200mS overschreden, volgt hij de regel die gekoppeld is aan waarde X.

[Bericht gewijzigd door Fantomaz op (44%)]

Beetje pseudo geneuzel:


menuvariabele = 0
maxWachten = 750 ms

loopje:
	<wacht op toetsindruk>
	<ontdender>
loslaten:	
	<wacht op loslaten toets>
	<ontdender>
		
	tellertje = 0
	zolang tellertje < maxWachten
		<wacht 1 ms>
		als toets ingedrukt
			tellertje = maxWachten
			menuVariabele = menuVariabele + 1
		einde als
	einde zolang
	
	als toets ingedrukt ga naar loslaten
			
	test menuvariabele:
		1: <gosub menu1 acties>
		2: <gosub menu2 acties>
		etc...
		
	menuvariabele = 0
		
<ga terug naar begin loopje>


menu1 acties:
	<do stuff>
	return

	
menu2 acties>
	<do stuff>
	return

Juist Picsel..
Dat had ik ook in de pijplijn zitten.

@Fantomaz: het is ook zo'n beetje de pseudocode van wat jij ervoor in tekst had uitgeschreven :-)