بسم الله الرحمن الرحيم
مهم جدا يجب فهم هذه البداية
لانه من هذا الكود سنعمل باقي المشاريع
سنأتي اليوم الى شرح الكود و سنحاول تطويره ليصبح سهل الفهم
ناتي الى التحكم بالموتورات الموتور اليمين يمشي الى الامام اذا Portb.f0=1 و يمشي الى الخلف اذا Portb.f1=1
الموتور اليسار يمشي الى الامام اذا Portb.f2=1 و يمشي الى الخلف اذا Portb.f3=1
و الان ناتي الى اهم شئ في الكود لاننا سنتعمله في كل المشاريع القادمة
كما راينا سابقا الروبوت يمشي الى الامام اذا الموتورين يمشون للامام
لذا يجب ان يكون الموتور اليمن يمشي الى الامام و الموتور الايسر يمشي الى الامام
اي ان Portb.f0=1 && Portb.f2=1 لذلك Portb=0b00000101
كود:
void goStraight()
{
Portb=0b00000101;
}
يمشي الى الخلف اذا الموتورين يمشون للخلف
لذا يجب ان يكون الموتور اليمن الى الخلف و الموتور الايسر يمشي الى الخلف
كود:
void goBach()
{
Portb=0b00001010;
}
الروبوت يلف الى اليمين اذا الموتور الايسر يمشي الى الامام و الموتور اليمن يمشي الى الخلف
كود:
void goRight()
{
Portb=0b00000110;
}
الروبوت يلف الى اليسار اذا الموتور الايسر يمشي الى الخلف و الموتور اليمن يمشي الى الامام
كود:
void goLeft()
{
Portb=0b00001001;
}
و الان يجب ان نعرف السنسور على انهم short اي 1 او 0
و الان اذا اردنا الروبوت ان يتوقف نوقف الموتورين بعدم اعطائهم Signal
كود:
void stop()
{
Portb=0;
}
و الان بعد ان عرفنا تحركات الروبوت التي سنستعملها نبدا بالجالة الاساسية
و بعد ذلك نعرف Portb على انه مخرج و نصفره في البداية
و الان نعرف ال Porta على انه مدخل لان الحساسات ستوضع على Porta ومن ثم نعرفهم
كود:
TRISA=255;
leftSensor=Porta.f0;
rightSensor=Porta.f1
و الان نعمل حلقة لا نهائية لكي يعمل الروبوت بدون توقف
والان ناتي الى المهم
اذا ال leftSensor امامه عائق و rightSensor لا يوجد امامه عائق فان الروبوت سيرجع الى الوراء قليلا ثم يدور الى اليمين
كود:
if((leftSensor==1)&&(rightSensor==0)) {
goBack();
delay_ms(500);
goRight();
delay_ms(500);
stop();}
اذا ال rightSensor امامه عائق و leftSensor لا يوجد امامه عائق فان الروبوت سيرجع الى الوراء قليلا ثم يدور الى اليسار
كود:
if((leftSensor==0)&&(rightSensor==1)) {
goBack();
delay_ms(500);
goLeft();
delay_ms(500);
stop();}
اذا ال rightSensor امامه عائق و leftSensor امامه عائق فان الروبوت سيرجع الى الوراء ثم يدور كثيرا الى اي اتجاه فلنختر مثلا اليمين
كود:
if((leftSensor==1)&&(rightSensor==1)) {
goBack();
delay_ms(1000);
goRight();
delay_ms(1500);
stop();}
اذا لم يتحقق اي شرط من هذا فان الروبوت سيمشي على طول
يعني الروبوت سيشيك باستمرار على الحساسات و مادام لم يجد اي عائق سيمشي على طول
انتهى الكود لذلك يجم ان نغلق اقواس الmain و الwhile
و هذا هو الكود كاملا
كود:
void goStraight()
{
Portb=0b00000101;
}
void goBack()
{
Portb=0b00001010;
}
void goRight()
{
Portb=0b00000110;
}
void goLeft()
{
Portb=0b00001001;
}
void stop()
{
Portb=0;
}
unsigned short leftSensor,rightSensor;
void main()
{
TRISB=0;
Portb=0;
TRISA=255;
leftSensor=Porta.f0;
rightSensor=Porta.f1;
while(1) {
if((leftSensor==1)&&(rightSensor==0))
{
goBack();
delay_ms(500);
goRight();
delay_ms(500);
stop();
}
if((leftSensor==0)&&(rightSensor==1))
{
goBack();
delay_ms(500);
goLeft();
delay_ms(500);
stop();
}
if((leftSensor==1)&&(rightSensor==1))
{
goBack();
delay_ms(1000);
goRight();
delay_ms(1500);
stop();
}
else goStraight();
}
}
تم بحمد الله
يتبع