I did something similar for a chicken coop door and originally had problems with the ldr as well.
I countered this and shadows etc by flipping a counter. Single microswitch and a small 12v model motor.
This code worked well.
Code:
'###############################################
'# #
'# Automatic chicken coop sliding door. #
'# #
'# 12 Volt Battery powered. #
'# Open when light, close when dark. #
'# Sleep 4 hours between to conserve power #
'# and to prevent retriggering. #
'# #
'# Uses single microswitch as feed back. #
'# #
'# Pic 16f818 --- Rob Lane - Dec 2011 #
'# #
'###############################################
OSCCON=$60 'set 4mhz internal oscillator
'(Set INT_OSC in programmer fuses)
' Define ADCIN parameters
Define ADC_BITS 10 'Set number of bits in result
Define ADC_SAMPLEUS 50 'Set sampling time in uS
Photo var word 'Create 'photo' to store result of ldr input
Counter1 var byte 'flip flop counter variable
'PIN ASSIGNMENTS
LDR var porta.0
MotorUp var portb.4
MotorDown var portb.5
Switch var portb.6
Counter1=1 'Set counter for power up, door must
'be closed in daylight for startup.
pause 5000
TRISA=%00000001 ' Set PORTA
TRISB=%01000000 ' Set PORTB
input switch
'#########################################################
Main:
ADCIN ldr, photo 'read ldr adc value
IF Photo <15000 Then checkup 'daylight
IF Photo >30000 Then checkdown 'darkness
'sleep 300 'about 5 minutes low power
goto Main
'##########################################################
checkup:
if counter1=1 then up
goto main
up:
High MotorUp 'start motor up
pause 1000 'wait 1 sec so micro switch opens
stopup:
if switch = 1 then pressedup 'check microswitch state
goto stopup 'check again till true
pressedup:
low motorup 'stop motor
Counter1=2 'flip flop counter for up/down of door
sleep 150
'sleep 14400 'sleep 4 hours
goto main
'##########################################################
checkdown:
if counter1=2 then down
goto main
down:
high MotorDown 'start motor down
pause 1000
stopdown:
if switch = 1 then presseddown 'check again
goto stopdown
presseddown:
low MotorDown
Counter1=1
sleep 150
'sleep 14400
goto main
end
Bookmarks