بسسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اخواني لي يومين وانا احاول اصلاح الخل لكن لا أعلم اين عو بالضبط اتعبني والله
انا متأكد ان كتابتي للكود صحيحه ان شاء الله فراجعته اكثر من مره وقرئة الـhelp لكل أمر تقريباً لكني لا اعلم اين الخل بالضبط .
فكرة المشروع كالتالي :
لدي عربه مزوده بماطورين DC (لعبه) خصائصها "يمين - يسار - للأمام - للخلف"
قمت بعمل برنامج بسيط "مرفق لكم" يقوم بالتحكم بهذه الاتجاهات بناءً على المعطيات التي تأتيه من حساس الحركه ir SHARP
الكود
كود:
void main()
{
TRISA.F0 = 1 ; //PORT A0 INPUT (SENSOR A)
TRISA.F1 = 1 ; //PORT A1 INPUT (SENSOR B)
TRISA.F2 = 1 ; //PORT A2 INPUT (SENSOR C)
TRISA.F3 = 0 ; //PORT A3 OUTPUT (SOUND)
TRISB = 0 ; // ALL PORT B IS OUTPUT "FOR MOTERS CONTROL"
PORTA = 0;
PORTB = 0;
Delay_ms(1000);
while (1)
{
if (PORTA.F0==1 && PORTA.F1==1 && PORTA.F2==1) // IF ALL SENSORS GIVE ME HIGH
{
while(PORTA.F0==1 && PORTA.F1==1 && PORTA.F2==1)
{
PORTB = 0 ; PORTA.F3 = 1 ; Delay_ms(1000); // RUN PORT OF SOUND
}
}
else if(PORTA.F0==1 && PORTA.F1==1) // LOOB FOR GO BACK
{
while(PORTA.F0==1 && PORTA.F1==1)
{
PORTA.F3 = 0 ; PORTB=0B00000100 ; Delay_ms(1000);
}
}
else if(PORTA.F0==1) // PORT A0 INPUT (SENSOR A)
{
while(PORTA.F0==1) // LOOB FOR GO RIGHT
{
PORTA.F3 = 0 ; PORTB=0B00001010 ; Delay_ms(1000);
}
}
else if(PORTA.F1==1) // PORT A1 INPUT (SENSOR B)
{
while(PORTA.F1==1) // LOOB FOR GO LIFT
{
PORTA.F3 = 0 ; PORTB=0B00010010 ; Delay_ms(1000);
}
}
else if (PORTA.F0==0 && PORTA.F1==0 && PORTA.F2==0) //KEEP GOING
{
while (PORTA.F0==0 && PORTA.F1==0 && PORTA.F2==0)
{
PORTA.F3 = 0 ; PORTB=0B00000010 ; Delay_ms(1000);
}
}
}
}
كنت مستخدماً pic16F84A .
أيضاً هل الديلي 1 ثانيه يؤثر على التحكم في الماتور لني اريده ان يعمل دون توقف حتى يأتي له شرط الخروج من لووب WHILE
اعتذر على طول الكلام واتنمى ان ارى اجابه شافيه لما اريد .
شكراً لكم مقدماً يا أخوه