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!!!!!!
Expand|Select|Wrap|Line Numbers
- ' {$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 ------