سلام به همه من یه مشکلی با ربات تعقیب خطی که ساختم دارم اینه که خط 1.5 سانتی که تو مسابقه ای قراره توش شرکت کنم اندازه همین اندازه است اصلا خوب کار نمی کنه ! همش سر پیچ ها رد می کنه ولی خط راست رو تقریبا خوب می ره ! با وجود اینکه برنامه ریزیش رو خوب انجام دادم و سرعتای مختلف رو تقریبا 60 بار امتحان کردم ! سنسورام هم 8 تاست که 7 تاشو هشتی گذاشتم و یکی هم پشت سنسور اولی به فاصله 5 سانت واسه تشخیص 4 راهی !
مهندس می شه برنامه تو بذاری !
مطمئنی همه سنسورها درستن !
فاصله سنسورهای کنار از هم چقدره !
بعد ربات شما چجوری می چرخه !
آیا یه چرخ رو قفل و چرخ دیگه می چرخه !
ایا یه چرخ معکوس و دیگری معمولی می چرخه ! ( این پشنهاد می شه )
آیا یه چرخ فقط می چرخه و چرخ دیگه ول هستش ! ( اصلا پیشنهاد نمی شه )
بعد از این قضایا دستور چرخش شما چجوریه !
بهتر بگم : گفتین چقدر بچرخه !
معمولا اینطوری می گن : اگهس سنسور سمت راست یک بود و وسط و سمت چپ صفر بود بچرخ به راست تا زمانی که سنسور وسط یک بشه !
یکم مهندس بیشتر رو کارهایی که کردی توضیح بده !
فاصله سه سنسور وسط 1.1 و بقیه 1.5 خودم الان فکر می کنم زیاده !
سرعتشونم اینجوریه نوشتم
کد php:
If A = &B00010000 Or A = &B00010001 Then
Compare1a = 255
Compare1b = 255
Reset Portd.2
Set Portd.3
Reset Portd.0
Set Portd.1
End If
'****************
If A = &B00001000 Or A = &B00001001 Then
Compare1a = 220
Compare1b = 255
Reset Portd.2
Set Portd.3
Reset Portd.0
Set Portd.1
End If
'****************
If A = &B00000100 Or A = &B00000101 Then
Compare1a = 160
Compare1b = 255
Reset Portd.2
Set Portd.3
Reset Portd.0
Set Portd.1
End If
'****************
If A = &B10000000 Or A = &B10000001 Then
Compare1a = 255
Compare1b = 200
Set Portd.2
Reset Portd.3
Reset Portd.0
Set Portd.1
End If
بعدش سنسورام رو هم به 7 تاشو به صورت 8 تی گذاشتم ! یکی هم پشت اولی به فاصله 5 سانت البته اگه سرعتش کم باشه رد نمی کنه ! ولی اگه یکم سرعتش زیاد شه چپ می کنه ! سنسورام رو هم ه این صورت نهادم
| - - - - - - - | یعنی به جز 2 تای اخر همشون افقی هستن ! اگه می شه آی دی تون رو هم بزارید من باتون چت کنم مشکلم شاید حل بشه ! ممنونم بای
مهندس اسم تایپیکو عوض کردم تا بیشتر به موضوع بخوره !
ببخشین که پست شما رو هم ویرایش کردم تا مرتب تر بشه برنامه رو نگاه کرد !
ID من رو هم تو مشخصاتم نگاه کنین نوشته !
بعد مشخصه که شما این قضیه رو تو برنامه لحاظ نکردین :
فکر کنم این قضیه رو تو برنامه بذارین مشکلتون حل بشه !
نقل قول: بهتر بگم : گفتین چقدر بچرخه !
معمولا اینطوری می گن : اگه سنسور سمت راست یک بود و وسط و سمت چپ صفر بود بچرخ به راست تا زمانی که سنسور وسط یک بشه !
و یه چیز دیگه :
اگر وضعیت سنسورها تو حالات شما نبود برنامه چی کار می کنه !
نکنه گفتین مستقیم برو ! ( که اشتباه ترین کار ممکن هستش )
چون ربات در این حالت نباید کاری انجام بده و باید آخرین وضعیتی رو که داشته حفظ کنه ! ( مثل اگه داشته می پیچیده هنوزم بپیچه )
مهندس یه برنامه نمونه از من : ( البته خیلی خلاصه کردم تا مفهوم رو برسونه )
کد php:
Rp Alias Portd.6 ' + MOTOR RIGHT
Rn Alias Portd.7 ' - MOTOR RIGHT
Lp Alias Portd.3 ' + MOTOR LEFT
Ln Alias Portd.2 ' - MOTOR LEFT
Pwml Alias Pwm1b ' PWM LEFT MOTOR
Pwmr Alias Pwm1a ' PWM RIGHT MOTOR
Dip_speed Alias Pinc.2 '= 1 = SLOW
Num_sir_int(1) = 59
Num_sir_int(2) = 59
Num_sir_int(3) = 59
Num_sir_int(4) = 59
Num_sir_int(5) = 59
Num_sir_int(6) = 59
Num_sir_int(7) = 59
Num_sir_int(8) = 59
Num_sir_int(9) = 59
Num_sir_int(10) = 59
Num_sir_int(11) = 59
Num_sir_int(12) = 59
Num_sir_int(13) = 59
Num_sir_int(14) = 59
Num_sir_int(15) = 59
Star:
Do
If Sir.3 = Sir.4 And Sir.6 = Sir.11 And Sir.7 = Sir.12 And Sir.8 = Sir.13 And Sir.9 = Sir.14 Then :
If Sir.0 = 1 And Sir.1 = 1 And Sir.2 = 1 And Sir.5 = 0 And Sir.10 = 0 Then Goto Mostaghim3
If Sir.0 = 1 And Sir.1 = 0 And Sir.2 = 1 And Sir.5 = 0 And Sir.10 = 0 Then Goto Rast1
If Sir.0 = 0 And Sir.1 = 1 And Sir.2 = 1 And Sir.5 = 0 And Sir.10 = 0 Then Goto Chap1
If Sir.0 = 1 And Sir.1 = 1 And Sir.2 = 0 And Sir.5 = 0 And Sir.10 = 0 Then Goto Mostaghim2
If Sir.0 = 1 And Sir.1 = 0 And Sir.2 = 0 And Sir.5 = 0 And Sir.10 = 0 Then Goto Rast1
If Sir.0 = 0 And Sir.1 = 1 And Sir.2 = 0 And Sir.5 = 0 And Sir.10 = 0 Then Goto Chap1
If Sir.0 = 0 And Sir.1 = 0 And Sir.2 = 1 And Sir.5 = 0 And Sir.10 = 0 Then Goto Mostaghim2
If Sir.0 = 0 And Sir.1 = 1 And Sir.5 = 0 And Sir.10 = 1 Then Goto Rast1
If Sir.0 = 1 And Sir.1 = 0 And Sir.5 = 1 And Sir.10 = 0 Then Goto Chap1
End If
'=============================================================================== ~~\__@__ /~/ nim dayereh & < 90
If Sir.6 = 1 Or Sir.7 = 1 Or Sir.8 = 1 Or Sir.9 = 1 Then :
If Sir.4 = 0 And Sir.10 = 0 And Sir.11 = 0 And Sir.12 = 0 And Sir.13 = 0 And Sir.14 = 0 Then :
If Sir.0 = 1 And Sir.1 = 1 And Sir.2 = 1 Then Goto Mostaghim3
If Sir.0 = 1 And Sir.1 = 0 And Sir.2 = 1 Then Goto Rast1
If Sir.0 = 0 And Sir.1 = 1 And Sir.2 = 1 Then Goto Chap1
If Sir.0 = 1 And Sir.1 = 1 And Sir.2 = 0 Then Goto Mostaghim2
If Sir.0 = 0 And Sir.1 = 0 And Sir.2 = 1 And Sir.3 = 0 Then Goto Rast3
If Sir.0 = 0 And Sir.1 = 0 Then Goto Rast3
End If
End If
If Sir.11 = 1 Or Sir.12 = 1 Or Sir.13 = 1 Or Sir.14 = 1 Then :
If Sir.3 = 0 And Sir.5 = 0 And Sir.6 = 0 And Sir.7 = 0 And Sir.8 = 0 And Sir.9 = 0 Then :
If Sir.0 = 1 And Sir.1 = 1 And Sir.2 = 1 Then Goto Mostaghim3
If Sir.0 = 1 And Sir.1 = 0 And Sir.2 = 1 Then Goto Rast1
If Sir.0 = 0 And Sir.1 = 1 And Sir.2 = 1 Then Goto Chap1
If Sir.0 = 1 And Sir.1 = 1 And Sir.2 = 0 Then Goto Mostaghim2
If Sir.0 = 0 And Sir.1 = 0 And Sir.2 = 1 And Sir.4 = 0 Then Goto Chap3
If Sir.0 = 0 And Sir.1 = 0 Then Goto Chap3
End If
End If
Loop
'===============================================================================
Mostaghim2:
Set Rp : Set Lp : Reset Rn : Reset Ln
If Dip_speed = 1 Then : Pwml = 150 : Pwmr = 150
Else : : Pwml = 200 : Pwmr = 200
End If
Goto Star
'===============================================================================
Mostaghim3:
Set Rp : Set Lp : Reset Rn : Reset Ln
If Dip_speed = 1 Then : Pwml = 200 : Pwmr = 200
Else : : Pwml = 250 : Pwmr = 250
End If
Goto Star
'###############################################################################
Rast1: 'kami enheref be rast
Set Rp : Set Lp : Reset Rn : Reset Ln
If Dip_speed = 1 Then : Pwml = 150 : Pwmr = 120
Else : : Pwml = 200 : Pwmr = 160
End If
Goto Star
'===============================================================================
Rast2: 'be rast ba motor khamosh ta zamani ke sir.0=1 or SIR.1=1
Reset Rp : Set Lp : Set Rn : Reset Ln
If Dip_speed = 1 Then : Pwml = 140 : Pwmr = 50
Else : : Pwml = 180 : Pwmr = 180
End If
Do
Gosub Get_sir
If Sir.0 = 1 Or Sir.1 = 1 Then Exit Do
Loop
Set Rp : Set Lp : Reset Rn : Reset Ln : Pwml = 140 : Pwmr = 140 : Waitms 50
Goto Star
'===============================================================================
Rast3: 'be rast ta zamani ke sir.0=1 or SIR.1=1
Reset Rp : Set Lp : Set Rn : Reset Ln
If Dip_speed = 1 Then : Pwml = 140 : Pwmr = 140
Else : : Pwml = 180 : Pwmr = 180
End If
Do
Gosub Get_sir
If Sir.0 = 1 Or Sir.1 = 1 Then Exit Do
Loop
Set Rp : Set Lp : Reset Rn : Reset Ln : Pwml = 140 : Pwmr = 140 : Waitms 50
Goto Star
'###############################################################################
Chap1: 'kami enheref be chap
Set Rp : Set Lp : Reset Rn : Reset Ln
If Dip_speed = 1 Then : Pwmr = 150 : Pwml = 120
Else : : Pwmr = 200 : Pwml = 160
End If
Goto Star
'===============================================================================
Chap2: 'be chap ba motor khamosh ta zamani ke sir.0=1 or SIR.1=1
Set Rp : Reset Lp : Reset Rn : Set Ln
If Dip_speed = 1 Then : Pwml = 50 : Pwmr = 140
Else : : Pwml = 180 : Pwmr = 180
End If
Do
Gosub Get_sir
If Sir.0 = 1 Or Sir.1 = 1 Then Exit Do
Loop
Set Rp : Set Lp : Reset Rn : Reset Ln : Pwml = 140 : Pwmr = 140 : Waitms 50
Goto Star
'===============================================================================
Chap3: 'be chap ta zamani ke sir.0=1 or SIR.1=1
Set Rp : Reset Lp : Reset Rn : Set Ln
If Dip_speed = 1 Then : Pwml = 140 : Pwmr = 140
Else : : Pwml = 180 : Pwmr = 180
End If
Do
Gosub Get_sir
If Sir.0 = 1 Or Sir.1 = 1 Then Exit Do
Loop
Set Rp : Set Lp : Reset Rn : Reset Ln : Pwml = 140 : Pwmr = 140 : Waitms 50
Goto Star
'###############################################################################
Get_sir:
Gosub Read_sir
Sir = 0
For B = 0 To 15
If Get_sir(b + 1) > Num_sir_int(b + 1) Then Set Sir.b
Next
Return
'===============================================================================
Read_sir:
Start Adc
Reset Portc.5 : Reset Portc.6 : Reset Portc.7 : Waitus 1 '0
Get_sir(11) = Getadc(0)
Get_sir(13) = Getadc(7)
Set Portc.5 : Reset Portc.6 : Reset Portc.7 : Waitus 1 '1
Get_sir(5) = Getadc(1)
Get_sir(14) = Getadc(7)
Reset Portc.5 : Set Portc.6 : Reset Portc.7 : Waitus 1 '2
Get_sir(2) = Getadc(2)
Get_sir(15) = Getadc(7)
Set Portc.5 : Set Portc.6 : Reset Portc.7 : Waitus 1 '3
Get_sir(1) = Getadc(3)
Get_sir(12) = Getadc(7)
Reset Portc.5 : Reset Portc.6 : Set Portc.7 : Waitus 1 '4
Get_sir(4) = Getadc(4)
Get_sir(3) = Getadc(7)
Set Portc.5 : Reset Portc.6 : Set Portc.7 : Waitus 1 '5
Get_sir(6) = Getadc(5)
Get_sir(8) = Getadc(7)
Reset Portc.5 : Set Portc.6 : Set Portc.7 : Waitus 1 '6
Get_sir(7) = Getadc(6)
Get_sir(10) = Getadc(7)
Set Portc.5 : Set Portc.6 : Set Portc.7 : Waitus 5 '7
Get_sir(9) = Getadc(7)
Stop Adc
Return
اینم ارزش گذاری سنسورهام !
این یه خلاصه ای از برنامه بودش و برنامه خیلی سنگین تر و بزرگ تر بودش که قسمت های بی ربطش رو نگذاشتم !
در ضمن این چیندمان سنسور مربوط به این ربات می شه :
http://forum.iranled.com/showthread.php?...8#pid97658
جواب سوالهارو میشه بدین ( ممنون)!!!!!!!!!!!!!!
سلام
مدیرکل کجایی؟ چرا جواب سوالها رو نمیییییدی؟
سلام
داشتم Plants vs. Zombies بازی می کردم !!
عجب بازی جالبیه !
کدوم سوال ها رو جواب ندادم ؟
اگه سوال های محسن جون رو می گی ( jadopcb ) رو که خوب فکر می کنم سوال هاش از fayez هستش !!!
این jadopcb ربات منو از خود من بیشتر میشناسه و می دونه چجوریه !!!!!!