وعليكم السلام ورحمة الله و بركاته . اخي العزيز ليس الموضوع بشكله بالضبط . بل هو مثال لتقريب الفكرة .
والموضوع الاساسي التحكم بسرعة و اتجاه محرك عبر الكمبيوتر من خلال uart او بلوتوث او موديولات اللاسلكي التي تستعمل uart .
او ارسال قيم انالوج لاسلكيا.
وجزيل الشكر لاهتمامك ..
ابحث عن طريقة لارسال الانالوج لاسلكيا مثلا موديولfr.
بوركت اخي
|
السلام عليكم ورحمه الله وبركاته ..
أخى الكريم لقد كتبت لك برنامج ..أعتقد انه يفيدك فى المشروع ..
وربما هذا البرنامج الذى تبحث عنه .. حاولت على قد ما فهمت من حضرتك طلبك ..
اليك صورة للدائرة ..
اليك الكود..
اولا دة كود المتحكم المربوط مع حساس الحرارة .. وهنسميه " كود المرسل "
كود:
//ENG/ ABDALLA HYGAZY //
// DATDA/ 2016 / 11 /25 ////
// COED //
char receive;
unsigned int adc_rd=0;
void show_adc() {
adc_rd = ADC_Read(0);
receive = (long)adc_rd * 5000;
receive = receive / 1023;
}
void main() {
TRISA=255;
ADC_Init();
UART1_Init(9600);
while(1){
show_adc();
if(adc_rd==5){ UART1_Write( 'a' ); }
if(adc_rd==10){ UART1_Write( 'b' ); }
if(adc_rd==15){ UART1_Write( 'c' ); }
if(adc_rd==20){ UART1_Write( 'd' ); }
if(adc_rd==25){ UART1_Write( 'e' ); }
if(adc_rd==30){ UART1_Write( 'f' ); }
if(adc_rd==35){ UART1_Write( 'g' ); }
if(adc_rd==40){ UART1_Write( 'h' ); }
if(adc_rd==45){ UART1_Write( 'i' ); }
if(adc_rd==50){ UART1_Write( 'j' ); }
if(adc_rd==55){ UART1_Write( 'k' ); }
if(adc_rd==60){ UART1_Write( 'l' ); }
if(adc_rd==65){ UART1_Write( 'm' ); }
if(adc_rd==70){ UART1_Write( 'n' ); }
if(receive==75){ UART1_Write( 'o' ); }
if(adc_rd==80){ UART1_Write( 'p' ); }
if(adc_rd==85){ UART1_Write( 'q' ); }
if(adc_rd==90){ UART1_Write( 'r' ); }
if(adc_rd==95){ UART1_Write( 's' ); }
if(adc_rd==100){ UART1_Write( 't' ); }
if(adc_rd==110){ UART1_Write( 'u' ); }
if(adc_rd==120){ UART1_Write( 'v' ); }
if(receive==130){ UART1_Write( 'w' ); }
if(adc_rd==140){ UART1_Write( 'x' ); }
if(adc_rd==150){ UART1_Write( 'y' ); }
if(adc_rd==160){ UART1_Write( 'z' ); }
}
}
وايضااا دة كود " المستقبل " اللى بياخد درجة الحرارة وبتحكم فى تشغل محرك
كود:
// ENG / ABDALLA HYGAZY //
char receive; // stores the received data
char x;
void main() {
TRISB=0; PORTB=0;
// TRISC=0; PORTC=0;
UART1_Init(9600);
PWM1_Init(5000);
// UART1_Write('s');
// delay_ms(1000);
while(1){
PWM1_Start();
// If data is ready, read it:
if (UART1_Data_Ready() == 1) {
receive = UART1_Read();
}
switch (receive)// test received Data
{
case 'a':
portb=1;
PWM1_Set_Duty(20);
receive=0; // rest received variable
break;
case 'b':
PWM1_Set_Duty(30);
portb=1;
receive=0; // rest received variable
break;
case 'c':
PWM1_Set_Duty(40);
portb =2;
receive=0; // rest received variable
break;
case 'd':
PWM1_Set_Duty(50);
portb =4;
receive=0; // rest received variable
break;
case 'e':
PWM1_Set_Duty(60);
portb =8;
receive=0; // rest received variable
break;
case 'f':
PWM1_Set_Duty(70);
portb =16;
receive=0; // rest received variable
break;
case 'g':
PWM1_Set_Duty(80);
portb =32;
receive=0; // rest received variable
break;
case 'h':
PWM1_Set_Duty(90);
portb =64;
receive=0; // rest received variable
break;
case 'i':
PWM1_Set_Duty(100);
portb =128;
receive=0; // rest received variable
break;
case 'j':
PWM1_Set_Duty(110);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'k':
PWM1_Set_Duty(120);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'l':
PWM1_Set_Duty(130);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'm':
PWM1_Set_Duty(140);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'n':
PWM1_Set_Duty(150);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'p':
PWM1_Set_Duty(160);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'q':
PWM1_Set_Duty(170);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'r':
PWM1_Set_Duty(180);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'r':
PWM1_Set_Duty(190);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 's':
PWM1_Set_Duty(200);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 't':
PWM1_Set_Duty(210);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'y':
PWM1_Set_Duty(220);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
case 'z':
PWM1_Set_Duty(250);
portb.b7 =~portb.b7;
receive=0; // rest received variable
break;
}
} }
واليك المشروع للتحميل ..
https://drive.google.com/open?id=0Bx...kYyVU1jRVp3aWc
شرح سريع للكود ..
اولا البرنامج الأول يراقب درجه الحرارة من خلال الحساس " LM35 " وبعد قرأة درجة الحرارة تتم عليها بعض المعالجه الحسابية .. وبعد ندخل فى مجموعه من الشروط تختبر قيمه أو رقم قرأة درجه الحرارة وبنائااا علية يرسل حرف مقابل درجه الحرارة للمتحكم الثانى ..
والمتحكم الثانى يستقبل الحرف المبعوت له .. وليكن مثلا حرف " A " ويقارن أوامر الشرط وينائااا على أمر الشرط يبدأ فى تعديل عرض النبضه لكى يتحكم فى سرعة محرك ..
تحياتى لك .. وأرجو أن اكون توصلت لما تريدة " أو على الأقل قدمة المساعدة لك ..
بالتوفيق