Merijn
Waar ben ik aan begonnen!
ben dus bezig met een UV lichtbak
heb hiervoor een programma geschreven ne vraag me af of ik zo een beetje goed zit.
ben net een maand of 2 bezig met pics maar heb wel de picbasic.nl helemaal gevolgd.
zit een beetje met die subroutines
ts de bedoeling dat ik eerst in een menu de minuten en seconden instel met 2 potmeters.
als ik dan op "start" druk gaat hij tellen en stuurt de solidstate aan waar de uv weer aanhangt
als hij klaar is met de countdown gaat er een pieper en geeft het lcd de melding "print uit nemen"
dan moet ik de toets "terug" indrukken om vervolgend weer naar de instellingen te gaan.
hier het progje
moet schaal nog bepalen trouwends
Device 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL true
;logische constanten
Symbol AAN = 0 ;Geinverteerd AAN voor uitgang (zoemer en solidstate)
Symbol OFF = 0 ;UIT voor ingang (minstel en secstel)
Symbol On = 1 ;AAN voor ingang (minstel en secstel)
Symbol UIT = 1 ;Geinverteerd UIT voor uitgang (zoemer en solid state)
;algemene constanten
Symbol Schaal = ??? ;<<<<< DE WAARDE VAN Schaal VOOR DE POT FUNCTIE HIER INVULLEN
Symbol Schaal = ??? ;<<<<< DE WAARDE VAN Schaal VOOR DE POT FUNCTIE HIER INVULLEN
Symbol tijdschaal = 1000 ; tijdschaal is 1 seconde
Symbol Dender = 10 ;(mSec): Tijd voor ontdendering van de toets
;poortnamen
Symbol start = PORTB.0 ;start countdown
Symbol terug = PORTB.1 ;terug naar instellen tijd
Symbol solidstate = PORTA.3 ;uitgang naar solid state relais
Symbol zoemer = PORTA.2 ; uitgang naar zoemer
Symbol minstel = PORTA.0 ;potmeter voor instellen minuten
Symbol secstel = PORTA.1 ;potmeter voor instellen seconden
;Variabele declareren
Dim minuten As Byte ;Deze variabele bevat straks de stand van potmeter minstel
Dim seconden As Byte ;Deze variabele bevat straks de stand van potmeter secstel
Dim countdown As Byte ;Deze variabele bevat straks de totale teruglooptijd
PORTB_PULLUPS On ;On-chip pull-up weerstanden actief voor schakelaars
Clear ;Wis alle RAM geheugen
; 76543210
PORTA = %00000000
PORTB = %00000000
TRISA = %11111111
TRISB = %11110011
DelayMS 500 ;LCD stabilisering
GoTo Instellen ;Spring over de subroutine
Belichten: ;label subroutine
For countdown = minuten To 0 Step DelayMS tijdschaal ;Tel van ingestelde minuten naar 0 met stappen van 1 sec
Cls ;Wis display
Print @countdown ;Zet de waarde van 'countdown' op het display (tellerstand)
DelayMS 1000 ;Een seconde wachten, anders gaat alles zo snel
If coundown > 0 Then solidstate = AAN
Next ;'Teller' verhogen en dan terug naar FOR
Cls
zoemer = AAN
DelayMS 2000
zoemer = UIT
While zoemer = UIT
Print At 1, 1, "print uitnemen!"
If terug = On Then Break
Wend
Return
Instellen: ;label hoofdprogramma
Cls ;Wis de tekst van het instellen op het LCD
While 1 = 1 ;Programma continu uitvoeren
minuten = Pot minstel, ??? ;Geef nieuw gemeten waarde aan 'minuten'
Print At 1, 1,"minuten ", Dec minuten, " " ;Zet actuele stand van 'minuten' op lcd
minuten = Pot secstel, ??? ;Geef nieuw gemeten waarde aan 'seconden'
Print At 2, 1,"seconden ", Dec seconden, " " ;Zet actuele stand van 'seconden' op lcd
If start = On Then Return ;Als start hoog is dan naar subroutine belichten
DelayMS 1000 ;Een seconde wachten, anders gaat alles zo snel
Wend
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Als je toch al een display hebt zou ik eerder druktoetsen nemen i.p.v. potmeters om de tijd in te stellen.
Na elke toetsindruk op bijvoorbeeld 'Minuut' verhoogt de 'Minuut' teller op het display (idem voor seconden).
Je gaat met een goto naar instellen en wil vervolgens terug komen met de return in de sub instellen, hiervoor moet je gosub gebruiken ipv goto.
GoTo Instellen ;Spring over de subroutine
gosub Instellen ;Spring over de subroutine
Dan ga je belichten, hier tel je minuten af maar geen seconden. Je kunt dit bv zo oplossen:
dim belichtingstijd as word
belichtingstijd = minuten * 60 + seconden
solidstate = AAN
for countdown = belichtingstijd to 0 step -1
cls
print at 1,1, dec belichtingstijd, " seconden"
delayms tijdschaal
next
solidstate = uit
In je code wordt de solidstate niet uitgezet.
Na het drukken op de terug knop gebruik je een return, er is alleen geen plaats om terug te gaan.
Merijn
Waar ben ik aan begonnen!
Op 15 maart 2007 20:15:25 schreef Frits Kieftenbelt:
Als je toch al een display hebt zou ik eerder druktoetsen nemen i.p.v. potmeters om de tijd in te stellen.
Na elke toetsindruk op bijvoorbeeld 'Minuut' verhoogt de 'Minuut' teller op het display (idem voor seconden).
vind het wel leuk met potmeters eigenlijk.
lekker retro
@tjenoe
ja inderdaad beter zo
ik moet dus de return weghalen?
zo:
if terug = on then break
wend
Merijn
Waar ben ik aan begonnen!
Op 16 maart 2007 00:03:25 schreef alex278:
Tip voor de volgende keer: rotary encoder gebruiken.
had ik inderdaad wel eerder aan mogen denken ja
Merijn
Waar ben ik aan begonnen!
nou
het word nix zo
ga het toch maar met druktoetsjes doen.
en de countdown loopt ook niet.
effe alles opnieuw
Merijn
Waar ben ik aan begonnen!
zo moet het dus beter zijn:
Device 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL true
;logische constanten
Symbol AAN = 0 ;Geinverteerd AAN voor uitgang (zoemer en solidstate)
Symbol OFF = 0 ;UIT voor ingang (minstel en secstel)
Symbol On = 1 ;AAN voor ingang (minstel en secstel)
Symbol UIT = 1 ;Geinverteerd UIT voor uitgang (zoemer en solid state)
;algemene constanten
Symbol tijdschaal = 1000 ; tijdschaal is 1 seconde
Symbol DENDER = 10
;poortnamen
Symbol start = PORTB.0 ;start countdown
Symbol terug = PORTB.1 ;terug naar instellen tijd
Symbol solidstate = PORTA.3 ;uitgang naar solid state relais
Symbol zoemer = PORTA.2 ; uitgang naar zoemer
Symbol minstel = PORTA.0 ;druktoets voor instellen minuten
Symbol secstel = PORTA.1 ;druktoets voor instellen seconden
;Variabele declareren
Dim minuten As Byte ;Deze variabele bevat straks de stand van potmeter minstel
Dim seconden As Byte ;Deze variabele bevat straks de stand van potmeter secstel
Dim countdown As Byte ;Deze variabele bevat straks de totale teruglooptijd
PORTB_PULLUPS On ;On-chip pull-up weerstanden actief voor schakelaars
Clear ;Wis alle RAM geheugen
; 76543210
PORTA = %00000000
PORTB = %00000000
TRISA = %11111111
TRISB = %11110011
DelayMS 500 ;LCD stabilisering
GoTo Instellen ;Spring over de subroutine
Belichten: ;label subroutine
Dim belichtingstijd As Word
belichtingstijd = minuten * 60 + seconden
solidstate = AAN
For countdown = belichtingstijd To 0 Step -1
Cls
Print At 1,1, Dec belichtingstijd, " seconden"
DelayMS tijdschaal
Next
solidstate = UIT
;'Teller' verhogen en dan terug naar FOR
Cls
zoemer = AAN
DelayMS 2000
zoemer = UIT
While zoemer = UIT
Print At 1, 1, "print uitnemen!"
If terug = On Then GoTo Instellen
Wend
Instellen: ;label hoofdprogramma
Cls ;Wis de tekst van het instellen op het LCD
While 1 = 1
Print At 1, 1, "MINUTEN " Dec minuten, " "
Print At 2, 1, "SECONDEN " Dec seconden, " "
If S1 = On Then Inc minuten
DelayMS DENDER
If S2 = On Then Inc seconden
DelayMS DENDER
If start = On Then GoTo Belichten
Wend
Met 'goto' ga je naar een ander gedeelte in het programma zonder te onhouden waar je vandaan kwam (plaats waar de goto staat). Met 'gosub' wordt dit wel onthouden, met 'return' ga je terug naar de plek waar je vandaan kwam.
probeer het zo eens:
Device 16F628A
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL true
;logische constanten
Symbol AAN = 0 ;Geinverteerd AAN voor uitgang (zoemer en solidstate)
Symbol OFF = 0 ;UIT voor ingang (minstel en secstel)
Symbol On = 1 ;AAN voor ingang (minstel en secstel)
Symbol UIT = 1 ;Geinverteerd UIT voor uitgang (zoemer en solid state)
;algemene constanten
Symbol tijdschaal = 1000 ; tijdschaal is 1 seconde
Symbol DENDER = 10
;poortnamen
Symbol start = PORTB.0 ;start countdown
Symbol terug = PORTB.1 ;terug naar instellen tijd
Symbol solidstate = PORTA.3 ;uitgang naar solid state relais
Symbol zoemer = PORTA.2 ; uitgang naar zoemer
Symbol S1 = PORTA.0 ;druktoets voor instellen minuten
Symbol S2 = PORTA.1 ;druktoets voor instellen seconden
;Variabele declareren
Dim minuten As Byte ;Deze variabele bevat straks de stand van potmeter minstel
Dim seconden As Byte ;Deze variabele bevat straks de stand van potmeter secstel
Dim countdown As Byte ;Deze variabele bevat straks de totale teruglooptijd
Dim BelichtingsTijd As Word ;Deze variabele bevat straks de belichtingstijd in seconden
PORTB_PULLUPS On ;On-chip pull-up weerstanden actief voor schakelaars
Clear ;Wis alle RAM geheugen
; 76543210
PORTA = %00000000
PORTB = %00000000
TRISA = %11111111
TRISB = %11110011
DelayMS 500 ;LCD stabilisering
While 1 = 1
Print At 1, 1, "MINUTEN " , Dec minuten , " "
Print At 2, 1, "SECONDEN " , Dec seconden , " "
If S1 = On Then Inc minuten
DelayMS DENDER
If S2 = On Then Dec seconden
DelayMS DENDER
If start = On Then GoSub Belichten
Wend
Belichten: ;label subroutine
BelichtingsTijd = minuten * 60 + seconden ; Belichtingstijd berekenen
solidstate = AAN ; Solidstate aanzetten
For countdown = BelichtingsTijd To 0 Step -1 ; Lus, Belichtingstijd naar nul, verminderen met 1
Cls
Print At 1,1, Dec BelichtingsTijd, " seconden" ; Actuele belichtingstijd weergeven
DelayMS tijdschaal ; Delay tijd ingesteld in constante 'tijdschaal' (1 sec)
Next ; Einde lus
solidstate = UIT ; Solidstate uitschakelen
zoemer = AAN ; 2 Sec zoem signaal
DelayMS 2000
zoemer = UIT
Cls
While zoemer = UIT ; Lus, wacht op input 'terug'
Print At 1, 1, "print uitnemen!"
If terug = On Then Return
Wend
Merijn
Waar ben ik aan begonnen!
Ik heb het voor elkaar!!!
mijn timer werkt en de UV bak ook.
mooier kan niet hehe.
bedankt voor de hulp hoor.
zal morgen effe wat fototjes posten.
Merijn
Waar ben ik aan begonnen!
Nou hier is tie dan hoor
en mijn etsbak
Die mooi schoon blijft dankzij het ozo fijne ammoniumpersulphaat (of hoe je het ook schrijft
)
zal ook schelen dat ie nieuw is haha
sorry voor de wazige fotoos maar mijn telefoon is een oud kreng.
dat rode knopje is de noodstop en brand alleen tijdens het belichten. vond ik wel leuk staan.
mooi gedaan! Ik heb mijn lichtbak ook bijna af (alleen nog de afwerking, en een klein genoeg voedingkje vinden..), alleen dan op basis van een AVR.
Vergeet hem niet op www.showyourprojects.com te zetten he!
PaWoN