SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 19
19 gasten
0 leden:
Forum > Digitaal > Toets Probleem.
pascalbianca
Lid
Berichten: 1394
Gepost op zaterdag 15 Mei 2010 09:15:03 QuoteWijzig

Ik zit met de volgende vraag.
Ik heb de volgende code:

Code
If keypad_program = 1 And Drukbit7 = 0 Then 
    Drukbit7 = 1
  EndIf 
If keypad_program = 0 Then 
    Drukbit7 = 0
    GoTo Menu_aanroep 
EndIf 


De knoppen zitten op PortB en de Pullups staan aan.
Dit gaat bij de eerste keer drukken goed.
Maar als ik dit stukje opnieuw ergens anders in een sub gebruik reageerd hij veel anders en dan moet ik bv die goto aanroep in het gedeelte zetten dat die Drukbit7 = 0 dus:

Code
If keypad_program = 1 And Drukbit7 = 0 Then 
    Drukbit7 = 1
    GoTo Menu_aanroep 
EndIf 
If keypad_program = 0 Then 
    Drukbit7 = 0
    
EndIf 


wat is hiervan de oorzaak?
Kan het zijn doordat die Drukbit7 = 1 niet in het tweede stukje staat?
Dus:

Code
If keypad_program = 1 And Drukbit7 = 0 Then 
    Drukbit7 = 1
   EndIf 
If keypad_program = 0  and Drukbit7 = 1 Then 
    Drukbit7 = 0
    GoTo Menu_aanroep 
EndIf 



Als ik een voorbeeld geef wat ik precies bedoel, zoiets als de code hieronder:

Code
If keypad_boven = 1 And Drukbit1 = 0 Then 
    Inc minuten 
    Drukbit1 = 1 
EndIf 
If keypad_boven = 0 Then
    Drukbit1 = 0 
EndIf 

If keypad_onder = 1 And Drukbit2 = 0 Then 
    Dec minuten 
    Drukbit2 = 1 
EndIf 
If keypad_onder = 0 Then 
    Drukbit2 = 0 
EndIf  

If keypad_jog = 1 And Drukbit5 = 0 Then 
    Drukbit5 = 1
EndIf 
If keypad_jog = 0 And Drukbit5 = 1 Then 
    Drukbit5 = 0 
     GoTo Hoofdprogramma
EndIf 


Dit werkt , maar ik zie de logica er niet in.
Bij het eerste stukje
Code
If keypad_boven = 1 And Drukbit1 = 0 Then 
    Inc minuten 
    Drukbit1 = 1 
EndIf 
If keypad_boven = 0 Then
    Drukbit1 = 0 
EndIf


Druk ik de toets in dan gaat de tijd met 1 minuut steeds naar boven zoals het moet.
Maar dan zou ik het ook moeten zeggen van dit stukje:

Code

If keypad_jog = 1 And Drukbit5 = 0 Then
     Drukbit5 = 1
GoTo Hoofdprogramma
EndIf 
If keypad_jog = 0 And Drukbit5 = 1 Then 
    Drukbit5 = 0 
EndIf


Maar daar werkt hij niet, daar moet ik het zo zetten:

Code

If keypad_jog = 1 And Drukbit5 = 0 Then
    Drukbit5 = 1
EndIf 
If keypad_jog = 0 And Drukbit5 = 1 Then
      Drukbit5 = 0 
GoTo Hoofdprogramma
EndIf



 
[Bericht gewijzigd door pascalbianca op Zaterdag 15 Mei 2010 09:33:17]

http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op zaterdag 15 Mei 2010 11:15:25 QuoteWijzig


Quote
Maar als ik dit stukje opnieuw ergens anders in een sub gebruik reageerd hij veel anders en dan moet ik bv die goto aanroep in het gedeelte zetten dat die Drukbit7 = 0 dus:


Zit dat stukje code in een sub? Haal dan die goto weg. Je substack heeft maar een beperkt aantal plaatsen en zit zo vol als je dat doet.

verder kan contactdender ook rare dingen geven. Zet eens een 100nF condensator parallel over je schakelaar.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
reddevil
Lid
Berichten: 1221
Gepost op zaterdag 15 Mei 2010 11:42:31 QuoteWijzig

In een subroutine mag geen goto zitten die gaat buiten dat sub menu. Anders moet je met return werken.
vb uit pic basic van Frits

Code
DEVICE 16F628A                ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal

;Logische constanten
SYMBOL AAN          = 0       ;Geinverteerd AAN
SYMBOL UIT          = 1       ;Geinverteerd UIT

;Algemene constante
SYMBOL AntiDender   = 10      ;(mSec): Tijd voor ontdendering van de toets

;Poortnamen
SYMBOL Toets        = PORTB.0 ;Pulstoets zit op PORTB.0 aangesloten

PORTB_PULLUPS ON              ;On chip pull-up weerstanden actief
CLEAR                         ;Wis alle RAM geheugen
DELAYMS 500                   ;LCD stabilisering

GOTO HoofdProgramma           ;Spring over de subroutine


;Subroutine
WachtOpToets:                 ;Label van subroutine met de naam 'WachtOpToets'
 DELAYMS AntiDender           ;Tegen contactdender bij het indrukken van de toets
 WHILE Toets = AAN : WEND     ;Wacht tot toets wordt losgelaten
 DELAYMS AntiDender           ;Tegen contactdender bij het loslaten van de toets
 WHILE Toets = UIT : WEND     ;Wacht op een toetsindruk
 CLS                          ;Wis scherm van het display
RETURN                        ;Ga terug naar waar je vandaan kwam


HoofdProgramma:               ;Label van het hoofdprogramma met de naam 'HoofdProgramma' 
CLS                           ;Wis scherm van het display
PRINT "Druk op toets"         ;Begintekst er neer zetten

WHILE 1 = 1                   ;Oneindige lus
  GOSUB WachtOpToets          ;Ga even langs het programma in de subroutine
  PRINT "Met GOSUB is er"     ;Plaats tekst op het display

  GOSUB WachtOpToets          ;Ga even langs het programma in de subroutine
  PRINT "meer structuur"      ;Plaats andere tekst op het display

  GOSUB WachtOpToets          ;...enzovoort
  PRINT "in het"

  GOSUB WachtOpToets
  PRINT "Basic programma"

  GOSUB WachtOpToets
  PRINT "te krijgen."

  GOSUB WachtOpToets
  PRINT "Zie je wel?"

WEND


Bekijk deel 6 van de cursus nog eens, staan veel antwoorden van je vragen in.http://www.picbasic.nl/


Veel te weinig tijd voor mijn projecten of heb ik er soms te veel?
pascalbianca
Lid
Berichten: 1394
Gepost op zaterdag 15 Mei 2010 12:38:51 QuoteWijzig

Dus als ik het goed begrijp kan ik het beste alle toetsen die ingedrukt worden , in de wachtoptoets defineren.
Of moet ik voor iedere sub een apparte wachtoptoets aanmaken, wat is beter?
 
[Bericht gewijzigd door pascalbianca op Zaterdag 15 Mei 2010 12:44:06]


http://pascalbianca.blogspot.nl/
pascalbianca
Lid
Berichten: 1394
Gepost op maandag 17 Mei 2010 18:02:55 QuoteWijzig

Ik heb vanalles geprobeerd maar ik hou het probleem bij de 1 toets tenminste als ik hem wil verwijzen naar een nieuw gedeelte:

Code
If keypad_boven = 1  Then 
   EndIf 
If keypad_boven = 0 Then
   keypad_boven = 1
     minuten = minuten + 1 
    DelayMS 200
EndIf 

If keypad_onder = 1 Then 
   
    EndIf 
  
If keypad_onder = 0 Then 
    keypad_onder = 1
  minuten = minuten - 1 
   DelayMS 200
    EndIf

If keypad_jog = 1 Then 
   
    EndIf 
If keypad_jog = 0 Then 
    keypad_jog = 1
  GoTo TijdUurInstellen
   DelayMS 200
    EndIf        



Als ik het stukje van de keypad_jog neem, dan gaat hij gelijk naar TijdUurInstellen, maar zou ik daarvoor in de plaats bv zetten zoals bij de toets omlaag, minuten = minuten - 1, dan wacht hij netjes.
Dit zelfde probleem heb ik ook als ik de code gebruik in het voorbeeld van Reddevil.
Hoe kan ik ervoor zorgen dat hij pas doorgaat als ik die Keypad_jog toets indruk?

Ik heb het iets omslachtiger gedaan, maar ja het werkt nu wel
 
[Bericht gewijzigd door pascalbianca op Maandag 17 Mei 2010 21:25:17]


http://pascalbianca.blogspot.nl/

Active Topics

» Subaru Outback 2016
» Stofafzuiging
» Aanpassingen aanbouwde...
» Audi
» Show je mini projecten
» Puls schkelaar
» Draadknipper
» Intercom
» buske (Peugeot Boxer 2...
» Voeding 24V 3A Stynus

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2019 SchemaTheek
Laadtijd: 0.0499 sec.