سلام دوستان. الان یه مشکل دارم که داره کلافم میکنه :angry: 
من یه برنامه برای ربات نوریاب نوشتم اما پورتهای مورد نظرم بصورت چشمکزن(0 1 0 1) میشن و بصورت کامل 0 یا 1 نمیشن.البته فکرکنم مربوط به do و loop ها باشه اما نتونستم پیداشون کنم. اینم برنامه (به ساب straight توجه شود بقیه ساب ها کامل نیست):'************************************** ****************************************'
'*Project: Light follower with Atmega32 *'
'*Authour:Alireza Rezayi. *'
'*Sensor Type:4 LDR with 4 different position *'
'*Motor
C with L298 Driver *'
'******************************************** **********************************'
$regfile = "m32def.dat"
$crystal = 4000000
'**********************************config**** **********************************'
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Portb.0 = Output
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Config Lcd = 16 * 2
'**********************************Define**** **********************************'
Dim Sf As Word
Dim Sb As Word
Dim Sl As Word
Dim Sr As Word
M1p Alias Pinb.0
M1n Alias Pinb.1
M2p Alias Pinb.2
M2n Alias Pinb.3
Ledf Alias Pinb.4
Ledb Alias Pinb.5
Ledl Alias Pinb.6
Ledr Alias Pinb.7
Declare Sub Main
Declare Sub Straight
Declare Sub Backward
Declare Sub Turnl
Declare Sub Turnr
'***********************************Main***** **********************************'
Sub Main
Start Adc
Do
Sf = Getadc(0)
Sb = Getadc(1)
Sl = Getadc(2)
Sr = Getadc(3)
If Sf > 500 And Sb > 500 Then
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sr > 500 And Sl > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sf > 500 And Sl > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sf > 500 And Sr > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sb > 500 And Sl > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sb > 500 And Sr > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sf > 500 Then
Lcd "Straight"
Waitms 250
Cls
Call Straight
End If
If Sb > 500 Then
Call Backward
Lcd "Backward"
Waitms 250
Cls
End If
If Sl > 500 Then
Call Turnl
Lcd "Turn Left"
Waitms 250
Cls
End If
If Sr > 500 Then
Call Turnr
Lcd "Straight"
Waitms 250
Cls
End If
Loop
End Sub
'***********************************Straight* **********************************'
Sub Straight
Do
If Sb > 500 Then Call Main
If Sl > 500 Then Call Main
If Sr > 500 Then Call Main
If Sf > 500 Then
M1p = 1
M1n = 0
M2p = 1
M2n = 0
Ledf = 1
Ledb = 0
Ledl = 0
Ledr = 0
Return
End If
Loop
End Sub
'**********************************Backward** **********************************'
Sub Backward
If Sf > 500 Then Call Main
If Sl > 500 Then Call Main
If Sr > 500 Then Call Main
M1p = 0
M1n = 1
M2p = 0
M2n = 1
Ledf = 0
Ledb = 1
Ledl = 0
Ledr = 0
Lcd "Backward"
Waitms 250
Cls
Return
End Sub
'*********************************Turn Left************************************'
Sub Turnl
If Sf > 500 Then Call Main
If Sb > 500 Then Call Main
If Sr > 500 Then Call Main
M1p = 1
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 1
Ledr = 0
Lcd "Turn Left"
Waitms 250
Cls
Return
End Sub
'********************************Turn Right************************************'
Sub Turnr
If Sf > 500 Then Call Main
If Sb > 500 Then Call Main
If Sl > 500 Then Call Main
M1p = 0
M1n = 0
M2p = 1
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 1
Lcd "Turn Right"
Waitms 250
Cls
Return
End Sub
'******************************************** **********************************'
End

من یه برنامه برای ربات نوریاب نوشتم اما پورتهای مورد نظرم بصورت چشمکزن(0 1 0 1) میشن و بصورت کامل 0 یا 1 نمیشن.البته فکرکنم مربوط به do و loop ها باشه اما نتونستم پیداشون کنم. اینم برنامه (به ساب straight توجه شود بقیه ساب ها کامل نیست):'************************************** ****************************************'
'*Project: Light follower with Atmega32 *'
'*Authour:Alireza Rezayi. *'
'*Sensor Type:4 LDR with 4 different position *'
'*Motor

'******************************************** **********************************'
$regfile = "m32def.dat"
$crystal = 4000000
'**********************************config**** **********************************'
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Portb.0 = Output
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Config Lcd = 16 * 2
'**********************************Define**** **********************************'
Dim Sf As Word
Dim Sb As Word
Dim Sl As Word
Dim Sr As Word
M1p Alias Pinb.0
M1n Alias Pinb.1
M2p Alias Pinb.2
M2n Alias Pinb.3
Ledf Alias Pinb.4
Ledb Alias Pinb.5
Ledl Alias Pinb.6
Ledr Alias Pinb.7
Declare Sub Main
Declare Sub Straight
Declare Sub Backward
Declare Sub Turnl
Declare Sub Turnr
'***********************************Main***** **********************************'
Sub Main
Start Adc
Do
Sf = Getadc(0)
Sb = Getadc(1)
Sl = Getadc(2)
Sr = Getadc(3)
If Sf > 500 And Sb > 500 Then
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sr > 500 And Sl > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sf > 500 And Sl > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sf > 500 And Sr > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sb > 500 And Sl > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sb > 500 And Sr > 500 Then
M1p = 0
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 0
Cursor Off
Lcd "Error"
Waitms 250
Cls
End If
If Sf > 500 Then
Lcd "Straight"
Waitms 250
Cls
Call Straight
End If
If Sb > 500 Then
Call Backward
Lcd "Backward"
Waitms 250
Cls
End If
If Sl > 500 Then
Call Turnl
Lcd "Turn Left"
Waitms 250
Cls
End If
If Sr > 500 Then
Call Turnr
Lcd "Straight"
Waitms 250
Cls
End If
Loop
End Sub
'***********************************Straight* **********************************'
Sub Straight
Do
If Sb > 500 Then Call Main
If Sl > 500 Then Call Main
If Sr > 500 Then Call Main
If Sf > 500 Then
M1p = 1
M1n = 0
M2p = 1
M2n = 0
Ledf = 1
Ledb = 0
Ledl = 0
Ledr = 0
Return
End If
Loop
End Sub
'**********************************Backward** **********************************'
Sub Backward
If Sf > 500 Then Call Main
If Sl > 500 Then Call Main
If Sr > 500 Then Call Main
M1p = 0
M1n = 1
M2p = 0
M2n = 1
Ledf = 0
Ledb = 1
Ledl = 0
Ledr = 0
Lcd "Backward"
Waitms 250
Cls
Return
End Sub
'*********************************Turn Left************************************'
Sub Turnl
If Sf > 500 Then Call Main
If Sb > 500 Then Call Main
If Sr > 500 Then Call Main
M1p = 1
M1n = 0
M2p = 0
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 1
Ledr = 0
Lcd "Turn Left"
Waitms 250
Cls
Return
End Sub
'********************************Turn Right************************************'
Sub Turnr
If Sf > 500 Then Call Main
If Sb > 500 Then Call Main
If Sl > 500 Then Call Main
M1p = 0
M1n = 0
M2p = 1
M2n = 0
Ledf = 0
Ledb = 0
Ledl = 0
Ledr = 1
Lcd "Turn Right"
Waitms 250
Cls
Return
End Sub
'******************************************** **********************************'
End
دیدگاه