'
végállás-bemenetek
Fel_stop_opto_in1 Alias Pinx.y
Le_stop_opto_in2 Alias Pinx.y
Bal_stop_opto_in3 Alias Pinx.y
Jobb_stop_opto_in4 Alias Pinx.y
' motormeghajtás-kimenetek
Fel_forgatas_opto_ki1 Alias Portx.y
Le_forgatas_opto_ki2 Alias Portx.y
Bal_forgatas_opto_ki3 Alias Portx.y
Jobb_forgatas_opto_ki4 Alias Portx.y
Declare
Sub Fenymeres
Declare
Sub Motorstop
Dim Forgatas
As
Bit
Dim Led_felso
As
Word , Led_also
As
Word , Led_jobb
As
Word , Led_bal
As
Word
Dim Led_felho_min_ert
As
Byte , Led_felho_max_ert
As
Byte , Led_ejszaka_min_ert
As
Byte , Led_ejszaka_max_ert
As
Byte
Dim Fugg_elteres_fel
As
Byte , Fugg_elteres_le
As
Byte , Vizsz_elteres_jobb
As
Byte , Vizsz_elteres_bal
As
Byte
Dim Fugg_elteres_max
As
Byte , Vizsz_elteres_max
As
Byte
Config Adc = Single , Prescaler = Auto , Reference = Internal
Enable
Interrupts
Led_ejszaka_min_ert = 100 ' Éjszakai üzemmód
ki-...
Led_ejszaka_max_ert = 105 ' ...és
bekapcsolási értékei.
Led_felho_min_ert = 110 ' Forgatáshoz
szükséges fényerő ki-...
Led_felho_max_ert = 115 ' ...és
bekapcsolási értékei.
Fugg_elteres_max = 2 ' Fel és le érték
maximális különbségének értéke (ha nagyobb ->
szabályzás/újrapozicionálás).
Vizsz_elteres_max = 2 ' Jobb és bal érték
maximális különbségének értéke (ha nagyobb ->
szabályzás/újrapozicionálás).
Do
If Forgatas
= 0
Then
Call Fenymeres
If Led_jobb
>
Led_ejszaka_max_ert Then ' éjszakai kikapcsolásból felélesztés
Print "reggel/bekapcs"
End
If
If Led_jobb
>
Led_felho_max_ert Then ' borús idő elmúltával/adott fényerő felett
napkövetés bekapcsolása
Print "napsütes/melo"
Set Forgatas
End
If
End
If
If Forgatas
= 1
Then
Call Fenymeres
If Led_jobb
<
Led_ejszaka_min_ert Then ' ha jön az éjszaka, akkor...
Print "éjszaka-kikapcs"
Wait 1
Call Motorstop
Forgatas =
0
Print "hajnalvárás..."
While Jobb_stop_opto_in4
= 0
' ...végállásig jobbra/keletre
forgatás
Set
Jobb_forgatas_opto_ki4
Wend
Reset
Jobb_forgatas_opto_ki4
Wait 1
Else
If Led_jobb
<
Led_felho_min_ert Then ' borús idő/adott fényerő alatt esetén nincsen
napkövetés
Print "felhő - szünet"
Call Motorstop
Forgatas =
0
Wait 2
End
If
End
If
If Fugg_elteres_fel
>
Fugg_elteres_max Then ' ha függőleges eltérés nagyobb a maximum értéknél,
akkor...
If Fel_stop_opto_in1
= 1
Then ' ha a végállás engedi, akkor...
Set
Fel_forgatas_opto_ki1 ' felfelé forgatás
Reset
Le_forgatas_opto_ki2 ' biztonsági tiltás
Print "Fel..." ' üzenet...
Else
Print "Végállás - Fel"
' üzenet...
End
If
End
If
If Fugg_elteres_fel
<=
Fugg_elteres_max Then ' ha az eltérés a határ alatt van, akkor
Reset
Fel_forgatas_opto_ki1 ' felfelé forgatás megállítása
Print "Stop - fel"
' üzenet...
End
If
If Fugg_elteres_le
>
Fugg_elteres_max Then ' mint "Fel" esetben, csak "Le"
irányba...
If Le_stop_opto_in2
= 1
Then
Set
Le_forgatas_opto_ki2
Reset
Fel_forgatas_opto_ki1
Print "Le..."
Else
Print "Végállás - Le"
End
If
If Fugg_elteres_le
<=
Fugg_elteres_max Then
Reset
Le_forgatas_opto_ki2
Print "Stop - Le"
End
If
If Vizsz_elteres_bal
>
Vizsz_elteres_max Then ' mint "Fel" esetben, csak "Bal"
irányba...
If Bal_stop_opto_in3
= 1
Then
Set
Bal_forgatas_opto_ki3
Reset
Jobb_forgatas_opto_ki4
Print "Balra..."
Else
Print "Végállás - Bal"
End
If
If Vizsz_elteres_bal
<=
Vizsz_elteres_max Then
Reset
Bal_forgatas_opto_ki3
Print "Stop - Bal"
End
If
If Vizsz_elteres_jobb
>
Vizsz_elteres_max Then ' mint "Fel" esetben, csak "Jobb"
irányba...
If Jobb_stop_opto_in4
= 1
Then
Set
Jobb_forgatas_opto_ki4
Reset
Bal_forgatas_opto_ki3
Print "Jobbra..."
Else
Print "Végállás - Jobb"
End
If
If Vizsz_elteres_jobb
<=
Vizsz_elteres_max Then
Reset
Jobb_forgatas_opto_ki4
Print "Stop - Jobb"
End
If
Waitms 50
End
If
Loop
'******************
'* fényerő mérése *
'******************
Sub Fenymeres
' egyes ledek/ledcsoportok
megmérése/értékek kiszámolása
Start Adc
'a-d =
analog-to-digital portok
Led_felso = Getadc(a) / 4 ' word-ről ->
byte-ra
Led_also =
Getadc(b) / 4
Led_jobb =
Getadc(c) / 4
Led_bal =
Getadc(d) / 4
Stop Adc
If Led_felso
>
Led_also Then
Fugg_elteres_fel = Led_felso - Led_also
Fugg_elteres_le = 0
End
If
If Led_also
>
Led_felso Then
Fugg_elteres_le = Led_also - Led_felso
Fugg_elteres_fel = 0
End
If
If Led_also
= Led_felso
Then
Fugg_elteres_le = 0
Fugg_elteres_fel = 0
End
If
If Led_jobb
>
Led_bal Then
Vizsz_elteres_jobb = Led_jobb - Led_bal
Vizsz_elteres_bal = 0
End
If
If Led_bal
>
Led_jobb Then
Vizsz_elteres_bal = Led_bal - Led_jobb
Vizsz_elteres_jobb = 0
End
If
If Led_bal
= Led_jobb
Then
Vizsz_elteres_bal = 0
Vizsz_elteres_jobb = 0
End
If
End
Sub
Sub Motorstop
Reset
Fel_forgatas_opto_ki1
Reset
Le_forgatas_opto_ki2
Reset
Bal_forgatas_opto_ki3
Reset
Jobb_forgatas_opto_ki4
End
Sub
End
|