Button pause

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Xillez
    New Member
    • Jul 2013
    • 93

    Button pause

    Hey something else today!

    Any comments you dont understand is in norwegian... so just forget those

    I MINOR problem with my basic stamp 2.5 code. I'm trying to get a 8-bit counter so stop counting in its tracks by just pushing the buttonPin quickly once. if you press it again the counter should start to count normally from were it stopped. Now I have pretty much tried to rewrite and debug the code for over a week. It should work for me but it doesn't. The problem is with reading if buttonPin has been pressed.

    PLEASE HELP ME!!!!!!

    Code:
    ' {$STAMP BS2}
    ' {$PBASIC 2.5}
    
    ' ---[ Programbeskrivelse ]--------------------------------
    '
    ' Viser en 8-bits binærteller på LED koplet til P0 - P7.
    ' Dette programmet fungerer som en vanlig BS-2 teller men med et par ekstra funksjoner.
    ' Trykker du på Knapp 0 kan du pause og starte kretsen.
    ' Vrir du på potentiometeret kan du endre hastigheten telleren teller.
    
    ' ---[ I/O Definisjoner ]----------------------------------
    
    Pot              PIN 14                                                  ' definerer pinne 14 som Pot
    buttonPin        PIN 15                                                  ' definerer pinne 15 som buttonPin
    
    ' ---[ Konstanter ]----------------------------------------
    
    MinCount  CON  0                                                         ' tellers startverdi = 0
    MaxCount  CON  255                                                       ' tellers sluttverdi = 255
    
    ' ---[ Variabler ]-----------------------------------------
    
    cntr          VAR      Byte                                              ' variabel for 8-bits teller
    PotVal        VAR      Word                                              ' definerer variabelet PotVal som Word
    currentState  VAR      Bit                                               ' definerer et variabel som heter currentState
    LEDs          VAR      OUTL                                              ' LED-er på P0 - P7
    LEDsDirs      VAR      DIRL                                              ' DIRS kontroll for LEDs
    whileBreak    VAR      Bit                                               ' definerer et variabel som heter whileBreak
    
    ' ---[ Initialisering ]------------------------------------
    
    LEDsDirs = %11111111                                                     ' DIRS kontroll til LEDene
    LEDs = %11111111                                                         ' gjør LEDene til utganger
    currentState = 1                                                         ' setter currentState = 0 som er standar verdi
    whileBreak = 0                                                           ' setter whileBreak = 0 som er standar verdi
    
    ' ---[ Programkode ]---------------------------------------
    
    Main:                                                                    ' starter en hoved funksjon som heter: main
      FOR cntr = LEDs TO MaxCount                                            ' sløyfe gjennom alle verdiene
        GOSUB pauseButton                                                    ' Starter en "sub routine" some heter: pauseButton
        GOSUB Read_Pot                                                       ' Starter en "sub routine" some heter: Read_Pot
        DEBUG DEC ? PotVal                                                   ' Gjør om verdiene den får fra PotVal om til desimaltall som programmet kan bruke
        LEDs = cntr                                                          ' send count til LEDs
        PAUSE PotVal                                                         ' pauser programmet i PotVal mengde
      NEXT
      IF MaxCount THEN OUTL=0 ELSE GOTO Main                                 ' hvis cntr = MaxCount, avsluttes loopen og programmet går videre
      GOTO Main                                                              ' går til main
    
    Read_Pot:                                                                ' starter en "Sub Routine" som heter: Read_Pot
      HIGH Pot                                                               ' Sender en puls til kondensatoren slik at den lades opp
      PAUSE 1                                                                ' Pauser i 1 ms for å gi kondensatorenen til å lade seg litt ut
      RCTIME Pot, 1, PotVal                                                  ' Leser oppladnings/utladningds hastigheten på kondensatoren
    RETURN                                                                   ' hopper opp til neste linje i main funksjonen
    
    pauseButton:                                                             ' starter en ny under funksjon som heter pauseButton
        IF buttonPin = 0 & currentState = 1 THEN                             ' hvis buttonPin = 0 og currentState = 0, fortsett
          DEBUG DEC ? currentState, CR                                       ' konverterer og printer ut et desimaltall av currentState verdien
          currentState = 0                                                   ' redefinerer currentState = 0 slik at du kan pause kretsen
          GOSUB pauseSeq                                                     ' går til en "sub routine" som heter pauseSeq
        ENDIF                                                                ' ender if-statement
    RETURN                                                                   ' returnerer til der den var i main
    
    pauseSeq:                                                                ' starter en "sub routine" som heter pauseSeq
      DO WHILE whileBreak < 1                                                ' repeter mens whileBreak < 1
        PAUSE 1                                                              ' pauser programmet i 1 ms
        IF buttonPin = %0 & currentState = 0 THEN                            ' hvis buttonPin = 0 og currentState = 0, fortsett
          whileBreak = 5                                                     ' redefinerer whileBreak = 1
        ENDIF                                                                ' ender if-statement
        whileBreak = 0                                                       ' redefinerer whileBreak som 0 for å starter telling senere
      LOOP                                                                   ' looper tilbake til do
    RETURN                                                                   ' returnerer til pauseButton
    ' ----------------- Extra tileggs oppgaven er levert i et eget program ------
Working...