This is the first Program I've written without copping anything, it's for a greenhouse - open and close the vent according to temperature, and water when soil gets to dry. I know it's probably a real mess, but is there any parts that could do with a tidy up, or rearrange? because it's a bit unreliable, like it will suddenly trigger and open the vent for no apparent reason, and some times it all freezes and needs a reset. I have diodes on all relays and a cap in the regulated power supply.
Any hints or tips greatly appreciated!
Any hints or tips greatly appreciated!
'Aaron's Green House Controller 18x
symbol Menu = pin0 'Bottom Left
symbol switch1 = pin7 'Top Right
symbol switch2 = pin6 'Bottom Right
symbol Water = 0
symbol ventup = 6
symbol ventdown = 5
symbol psu = 4
symbol green = 2
symbol red = 1
symbol temp = b2
symbol opentemp = b3
symbol wateron = b0
symbol wetness = b1
symbol ask = b4
symbol waterdisp = b5
symbol waterontime = b10
symbol ask1 = b7
symbol watercount = w4
Init:
high 7
pause 500
wateron = 50
opentemp = 30
waterontime = 90
low 0,1,2,3,4,5,6
serout 7,T2400,(254,1)
pause 30
serout 7,T2400,(254,128,"Initializing")
pause 1000
Systemrunning:
serout 7,T2400,(254,1)
pause 30
serout 7,T2400,(254,128,"System Running ")
b6 = 0
low red
high green
pause 1000
Charlie:
serout 7,T2400,(254,192,"Menu ",#temp,"C ")
button 0,1,100,100,b6,1,showoffdemo
gosub checkinputs
pause 1182 'calibrated so loop repeats every 2000ms
goto Charlie
Showoffdemo:
b6 = 0
low green
high red
serout 7,T2400,(254,1) 'clear lcd
pause 30
serout 7,T2400,(254,128,"Show Off Demo!")
serout 7,T2400,(254,192,"Menu Start")
pause 1000
cont:
button 0,1,4,5,b6,1,tempadjust
button 6,1,100,100,b6,1,Demorunning
pause 50
Goto Cont
Tempadjust:
b6 = 0
serout 7,T2400,(254,1) 'clear lcd
pause 30
serout 7,T2400,(254,128,"Temp Adjust ",#temp,"C") ' with actual temp on same line
serout 7,T2400,(254,192,"Menu Change")
pause 1000
cont2:
button 0,1,100,100,b6,1,wateradjust
button 6,1,100,100,b6,1,Openingtemp
pause 50
Goto Cont2
Openingtemp:
serout 7,T2400,(254,1) 'clear lcd
pause 30
serout 7,T2400,(254,128,"Opening Temp +")
serout 7,T2400,(254,192,"Save -")
serout 7,T2400,(254,198,#temp,"C ",#opentemp,"C ")
pause 1000
cont3:
pause 50
button 0,1,100,100,b6,1,tempadjust
button 7,1,4,5,b6,1,hotter
button 6,1,4,5,b6,1,cooler
goto cont3
Wateradjust:
serout 7,T2400,(254,1) 'clear lcd
pause 30
serout 7,T2400,(254,128,"Water Adjust")
serout 7,T2400,(254,192,"Menu Change")
pause 1000
cont4:
pause 50
button 0,1,100,100,b6,1,wateringontime
button 6,1,100,100,b6,1,wetness1
goto cont4
Wetness1:
serout 7,T2400,(254,1) 'clear lcd
pause 30
serout 7,T2400,(254,128,"Water On +")
serout 7,T2400,(254,192,"Save -") 'b0
serout 7,T2400,(254,199,#wetness,"~",#wateron)
pause 1000
cont5:
pause 50
button 0,1,100,100,b6,1,wateradjust
button 7,1,4,5,b6,1,wetter
button 6,1,4,5,b6,1,drier
goto cont5
WateringonTime:
serout 7,T2400,(254,1) 'clear lcd
pause 30
serout 7,T2400,(254,128,"Water On Time")
serout 7,T2400,(254,192,"Menu Change")
pause 1000
cont6:
pause 50
button 0,1,100,100,b6,1,systemrunning
button 6,1,100,100,b6,1,wateringontime1
goto cont6
WateringonTime1:
serout 7,T2400,(254,1) 'clear lcd
pause 30
serout 7,T2400,(254,128,"Water Duration +")
serout 7,T2400,(254,192,"Save -") 'b0
serout 7,T2400,(254,198,#Waterontime,"Mins ")
pause 1000
cont7:
pause 50
button 7,1,5,3,b6,1,watercountup
button 6,1,5,5,b6,1,watercountdown
button 0,1,100,100,b6,1,wateringontime
Goto cont7
Checkinputs:
readadc 2,wetness 'b1
if wateron => wetness then gosub waterons
if ask1 = 1 then gosub timer1
readtemp 1,temp 'b2
if temp => opentemp then goto open
if temp < opentemp then goto close
pause 100
return
Timer1:
watercount = watercount + 2
w6 = waterontime * 60
if watercount => w6 then
ask1 = 0
watercount = 0
pwmout 3,0,0
endif
return
Waterons:
if wetness =< wateron and ask1 = 0 then
pwmout 3,99,400
ask1 = 1
endif
return
Watercountup:
waterontime = waterontime + 1
serout 7,T2400,(254,198,#waterontime,"Mins ")
goto cont7
watercountdown:
waterontime = waterontime - 1
serout 7,T2400,(254,198,#Waterontime,"Mins ")
goto cont7
Hotter:
opentemp = opentemp + 1
serout 7,T2400,(254,198,#temp,"C ",#opentemp,"C ")
goto cont3
Cooler:
opentemp = opentemp - 1
serout 7,T2400,(254,198,#temp,"C ",#opentemp,"C ")
goto cont3
Drier:
wateron = wateron - 2
serout 7,T2400,(254,199,#wetness,"~",#wateron," ")
goto cont5
Wetter:
wateron = wateron + 2
serout 7,T2400,(254,199,#wetness,"~",#wateron," ")
goto cont5
Open:
if ask = 2 then return
endif
high psu
pause 1000
high ventup
serout 7,T2400,(254,128,"Opening Vent... ")
serout 7,T2400,(254,192,"Temp Over ",#opentemp,"C ")
pause 10000 ' what ever it takes
low ventup
pause 300
low psu
ask = 2
serout 7,T2400,(254,1)
serout 7,T2400,(254,128,"System Running ")
return
Close:
if ask = 1 then return
endif
high psu
pause 1000
high ventdown
serout 7,T2400,(254,128,"Closing Vent... ")
serout 7,T2400,(254,192,"Temp Under ",#opentemp,"C ")
pause 10000 ' what ever it takes
low ventdown
pause 300
low psu
ask = 1
serout 7,T2400,(254,1)
serout 7,T2400,(254,128,"System Running ")
return
Demorunning:
serout 7,T2400,(254,1) 'clear lcd
pause 30
serout 7,T2400,(254,1)
serout 7,T2400,(254,128,"Demo Running...")
high psu
pause 1000
high ventup
serout 7,T2400,(254,192,"Opening Vent... ")
pause 10000 ' plus abit more
low ventup
pause 1000
high ventdown
serout 7,T2400,(254,192,"Closing Vent... ")
pause 10000
low ventdown
pause 1000
low psu
pause 1000
pwmout 3,99,400
serout 7,T2400,(254,192,"Start Watering..")
pause 5000
pwmout 3,0,0
serout 7,T2400,(254,192,"Stop Watering...")
pause 1000
goto showoffdemo
Attachments
-
80 KB Views: 43