Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'Fishometer
- 'Adam Robbins 2010
- Initialise:
- 'blank display
- pause 10
- serout 5,T2400,(254,1)
- serout 5,T2400,(254,1)
- pause 50
- ' set up variable titles
- SYMBOL asciib = b0
- SYMBOL Minutes = b1
- SYMBOL Hours = b2
- SYMBOL Day = b3
- SYMBOL addmin = b4
- SYMBOL addhour = b5
- SYMBOL asciia = b6
- SYMBOL Control = b7
- SYMBOL Temp = b8
- SYMBOL Neg = b9
- SYMBOL Fahrenheit = b10
- SYMBOL FeedFish = b11
- SYMBOL Batt = b12
- SYMBOL DayChange = b13
- ' initialise variables
- let asciib = 0
- let Minutes = 0
- let Hours = 0
- let Day = 0
- let addmin = 0
- let addhour = 0
- let asciia = 0
- let Control = 0
- let DayChange = 0
- let temp = 0
- let neg = 0
- let Fahrenheit = 0
- let FeedFish = 0
- let Batt = 0
- Main:
- ' start off by setting the right time
- if pin2=1 then gosub timeset
- ' now the welcome message
- gosub welcome
- gosub flashlights
- ' set interrupt on button 0 being pressed
- setint %00000000,%00000001
- ' the main program, in a loop for ever
- Mainloop:
- gosub Tempp
- gosub time
- gosub Tempp
- gosub time
- gosub Tempp
- gosub name
- goto mainloop
- ' infinite loop above , should never get to here.
- serout 5,T2400,(254,1)
- pause 500
- serout 5,T2400,(254,12)
- serout 5,T2400,(254,128,"ERROR (1)")
- high 7
- high 3
- high 6
- wait 60
- end
- ' subroutines
- Tempp:
- ' Tempp - read the temprature, display it and set status ligths
- Readtemp 1,temp
- serout 5,T2400,(254,1)
- pause 50
- neg = 0
- ' test for negative temp
- if temp>127 then
- {
- ' show -ve numbers
- let neg = temp - 128
- let Fahrenheit = neg *9/5
- ' assumption - will never go below 0 Fahrenheit
- let Fahrenheit = 32 - Fahrenheit
- serout 5,T2400,(254,128,"Temperature: -")
- serout 5,T2400,(#neg)
- serout 5,T2400,(254,192,"Fahrenheit: ")
- serout 5,T2400,(#Fahrenheit)
- } else {
- ' show +ve numbers
- let Fahrenheit = temp *9/5
- let Fahrenheit = Fahrenheit + 32
- serout 5,T2400,(254,128,"Temperature: ")
- serout 5,T2400,(#temp)
- serout 5,T2400,(254,192,"Fahrenheit: ")
- serout 5,T2400,(#Fahrenheit)
- } endif
- ' now set the status lights
- gosub clear
- if neg>0 then {
- gosub flashlights
- gosub red
- }
- elseif temp<16 OR temp>25 then {
- gosub red
- }
- elseif temp>=21 AND temp<=24 then {
- gosub green
- }
- else
- gosub orange
- }
- endif
- pause 4000
- return
- Time:
- ' Time - show the current time, and do time based functions
- ' turn light on / off depending on time of day
- ' set feed fish light, based on day of the week
- i2cslave %11010000, i2cslow, i2cbyte
- readi2c 0, (b0,b1,b2,b3,b4,b5,b6,b7)
- serout 5,T2400,(254,1)
- pause 50
- ' calculate & print hour
- bcdtoascii b2,b0,b6
- serout 5,T2400,(254,128,b0,b6)
- ' calculate & print minute
- bcdtoascii b1,b0,b6
- serout 5,T2400,(":",b0,b6)
- ' manage fishtank light
- if b2 >=7 AND b2<32 then { ' 32 == BCD for 20 = 8pm
- ' daytime -> turn light on
- high 3
- } else
- ' turn light off
- low 3
- } endif
- ' workout if the fish have been fed yet today
- if daychange=0 or daychange!= day then
- {
- daychange = day
- if day=1 or day=4 then let Feedfish = 1 ' feed on Sunday & Wednesday
- endif
- }
- endif
- if day=1 then serout 5,T2400,(254,192," Sunday")
- elseif day=2 then serout 5,T2400,(254,192," Monday")
- elseif day=3 then serout 5,T2400,(254,192," Tuesday")
- elseif day=4 then serout 5,T2400,(254,192," Wednesday")
- elseif day=5 then serout 5,T2400,(254,192," Thursday")
- elseif day=6 then serout 5,T2400,(254,192," Friday")
- elseif day=7 then serout 5,T2400,(254,192," Saturday")
- endif
- if FeedFish = 1 then
- {
- ' fish need feeding so set light on.
- ' will be turned off by interrupt if switch pressed.
- high 0
- serout 5,T2400,(254,192," Feed Fish Today")
- }
- endif
- pause 4000
- return
- ' Subroutines to control lights
- Red:
- high 7
- return
- Orange:
- high 6,7
- return
- Green:
- high 6
- return
- Clear:
- low 6
- low 7
- low 2
- return
- Flashlights:
- for b5 = 0 to 3 ' b5 not in use at this point
- high 7
- pause 200
- low 7
- high 6,7
- pause 200
- low 6,7
- high 6
- pause 200
- low 6
- next b5
- return
- Welcome:
- ' Display welcome banner
- pause 100
- serout 5,T2400,(254,1)
- serout 5,T2400,(254,1)
- pause 500
- serout 5,T2400,(254,12)
- serout 5,T2400,(254,128,"Welcome to:")
- pause 1000
- serout 5,T2400,(254,192," Fishometer")
- return
- Name:
- ' show project creator
- serout 5,T2400,(254,1)
- pause 50
- serout 5,T2400,(254,128," Adam Robbins")
- serout 5,T2400,(254,192," DT GCSE 2009")
- pause 3000
- return
- Interrupt:
- ' interrupt handling code
- serout 5,T2400,(254,1)
- pause 50
- if FeedFish = 1 then
- {
- serout 5,T2400,(254,128," Lid Opened")
- serout 5,T2400,(254,192," Fish Fed")
- let FeedFish = 0
- low 0
- } else
- serout 5,T2400,(254,128," Lid Opened")
- serout 5,T2400,(254,192," Fish Overfed")
- endif
- pause 1000
- intloop:
- if pin0 = 0 then intloop ' wait until button released
- setint %00000000,%00000001 ' reset interrupt
- return
- timeset:
- serout 5,T2400,(254,128,"Set Time:")
- intloop1:
- ' wait until button released
- if pin2 = 1 then intloop1
- pause 500
- ' set Day - $b3
- serout 5,T2400,(254,192,"Sunday ")
- pause 750
- if pin2 = 1 then
- { b3 = 1
- goto doneday
- } endif
- serout 5,T2400,(254,192,"Monday ")
- pause 750
- if pin2 = 1 then
- { b3 = 2
- goto doneday
- } endif
- serout 5,T2400,(254,192,"Tuesday ")
- pause 750
- if pin2 = 1 then
- { b3 = 3
- goto doneday
- } endif
- serout 5,T2400,(254,192,"Wednesday ")
- pause 750
- if pin2 = 1 then
- { b3 = 4
- goto doneday
- } endif
- serout 5,T2400,(254,192,"Thursday ")
- pause 750
- if pin2 = 1 then
- { b3 = 5
- goto doneday
- } endif
- serout 5,T2400,(254,192,"Friday ")
- pause 750
- if pin2 = 1 then
- { b3 = 6
- goto doneday
- } endif
- serout 5,T2400,(254,192,"Saturday ")
- pause 750
- if pin2 = 1 then
- { b3 = 7
- goto doneday
- } endif
- goto intloop1
- doneday:
- ' set hour - $b2
- ' wait until button released
- if pin2 = 1 then doneday
- serout 5,T2400,(254,1)
- pause 100
- nexthour:
- serout 5,T2400,(254,192,"Hour: ", #b2, " ")
- pause 750
- if pin2 = 0 then
- { b2 = b2 + 1
- if b2 > 23 then let b2 = 0
- endif
- goto nexthour
- } endif
- ' convert to BCD
- if b2>=20 then {
- b4 = b2 - 20
- b5 = 32 + b4
- } elseif b2>=10 then {
- b4 = b2 - 10
- b5 = 16 + b4
- } endif
- ' set Minute - $b1
- donehour:
- ' set hour - $b2
- ' wait until button released
- if pin2 = 1 then donehour
- serout 5,T2400,(254,1)
- pause 100
- nextmin:
- serout 5,T2400,(254,192,"Minute: ", #b1, " ")
- pause 750
- if pin2 = 0 then
- { b1 = b1 + 1
- if b1 > 59 then let b1 = 0
- endif
- goto nextmin
- } endif
- ' convert to BCD
- if b1 >= 50 then {
- b4 = b1 - 50
- b6 = 64 + 16 + b4
- } elseif b1>=40 then {
- b4 = b1 - 40
- b6 = 64 + b4
- } elseif b1>=30 then {
- b4 = b1 - 30
- b6 = 32 + 16 + b4
- } elseif b1>=20 then {
- b4 = b1 - 20
- b6 = 32 + b4
- } elseif b1>=10 then {
- b4 = b1 - 10
- b6 = 16 + b4
- } endif
- serout 5,T2400,(254,192,"T: ",#b2,":",#b1," D: ",#b3)
- pause 5000
- ' if time is wrong, try again
- if pin2 = 1 then timeset
- ' now set the time
- i2cslave %11010000, i2cslow, i2cbyte
- writei2c 0, ($00, b6, b5, b3, $00, $00, $00, $80)
- return
- ' end of subroutines, should never get to here.
- serout 5,T2400,(254,1)
- pause 500
- serout 5,T2400,(254,12)
- serout 5,T2400,(254,128,"ERROR (2)")
- high 7
- high 4
- high 6
- wait 60
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement