السلام عليكم
موضوع رائع استاذي العزيز
لقد بحت عن هذا الامر لكن لم اوفق في استعماله
هل يمكنك ان تشرحه لنا اكثر
اتمنى لك التوفيق
|
سلام عليكم
اخي كريم اذا كان لديك مجموعة من رسائل ولكن تريده ان ترسلها مرة واحدة ايضا لابد من خزنها في مصفوفه واحدة وبعدها ترسل الرسالة
الان كيف اجمع كل رسائل في رساله واحدة ؟
اثناء قرائتي للكود gsm خاص بشركة مايكروشيب وجدتهم استخدمو كود اعلاة
ولكن مارايك ان اعرض لك كود المستخدم في موضوع أخر ونشرحة وكود مستخدم لارسال لعلنا نصل الى نتيجة مرضية ومجربة عمليا
كود:
// Compose Status SMS
unsigned ComposeMessage(char* Message){
unsigned adc_value1, adc_value2;
char temp_txt[15];
char PORTB_temp, i, PORTD_temp;
RC1IE_bit = 0; // Disable Rx1 intterupts
Message[0] = '\0';
// SMS header
strcat(Message, "INFO:");
strcat(Message, "\r\n"); // Add new line (CR + LF)
//
temp_txt[0] = 0;
strcat(temp_txt, "PORTB ");
PORTB_temp = Digital_INPUT;
// Add the status of Digital Inputs to the SMS Message
for (i = 0; i < 8; i ++){
temp_txt[13 - i] = (PORTB_temp % 2) + 48;
PORTB_temp = PORTB_temp / 2;
}
temp_txt[14] = 0;
strcat(Message, temp_txt);
strcat(Message, "\r\n"); // Add new line (CR + LF)*/
//
temp_txt[0] = 0;
strcat(temp_txt, "PORTD ");
PORTD_temp = Digital_O;
// Add the status of Digital Inputs to the SMS Message
for (i = 0; i < 8; i ++){
temp_txt[13 - i] = (PORTD_temp % 2) + 48;
PORTD_temp = PORTD_temp / 2;
}
temp_txt[14] = 0;
strcat(Message, temp_txt);
strcat(Message, "\r\n"); // Add new line (CR + LF)*/
//
// Adding ADC values to the SMS
adc_value1 = ADC_Get_Sample(0); // RA0
WordToStr(adc_value1, ADC1_data);
strcat(Message, "AN0 - "); // AN1
strcat(Message, ADC1_data); // Add ADC1 data
strcat(Message, "\r\n"); // Add new line (CR + LF)
//
// SMS footer
strcat(Message, "End.");
strcat(Message, "\r\n"); // Add new line (CR + LF)
//
RC1IE_bit = 1; // Enable Rx1 intterupts
return strlen(Message);
}
الان نشرح الكود
عرف داله ترجع متغير اسماها ComposeMessage تاخذ متغير من نوع POINTER يعني مصفوفه
الان اريد اجمع كل معلومات في رسالة واحدة وهي message
كود:
strcat(Message, "INFO:");
هنا تم اضافه INFO: الى Message عن طريق الامر strcat
******************************************
ماهو الامر strcat صيغة العامة
كود:
char *strcat(char *to, char *from);
مثال توضيحي
كود:
char txt[] = "mikroElektronika";
char *res;
res = strcat(txt, "_test");
في مثال تم خزن رساله في txt وتم تعريف pointer اسمة res
بعدها وضعنا الامر( "res = strcat(txt, "_test
ماهي النتيجة mikroElektronika_test
*************************************************
نرجع للموضوع
بعدها تم اضافة
كود:
strcat(Message, "\r\n");
ماذا تعني ذلك
تم الحاق هذه رسالة الى مصفوفة Message ويتم خزنها في اخر حرف وصلت اليها ولكن مهلا ماذا تعني هذه رسالة
الرمز \ يحول بعض حروف الى الاسكي كود يعني اذا كتبr \ معناها enter بدلا من ان ترسل رمز الاسكي كود 13 يعني انتر يمكن كتابه هذا الامر r\
n\ يعني خط جديد يعني بدلا من ارسل اسكي كود 10 اكتب هذا الامر
"\ هذا يعني ارسل علامة الاقتباس " بدلا من ارسال كود 0x22
ولمزيد من معلومات انظر الى هذه صوره ماخوذة من مايكروسي من help
على فكرة هذه رموز مهمة حتى نتمكن من تجميعها في رسالة واحدة بدلا من استخدام اوامر الارسال uart_write
************************************
بعدها ماذا فعل اضاف كل البيانات الى مصفوفة temp_txt
بعد ان اتنهى من ذلك اضافة بيانات هذه المصفوفة الى الى message
كود:
strcat(Message, temp_txt);
بعد ذلك اضاف الامر انتر وامر يكتب من سطر جديد
كود:
strcat(Message, "\r\n");
وهكذا
الى ان يصل الى
كود:
// Adding ADC values to the SMS
adc_value1 = ADC_Get_Sample(0); // RA0
WordToStr(adc_value1, ADC1_data);
strcat(Message, "AN0 - "); // AN1
strcat(Message, ADC1_data); // Add ADC1 data
strcat(Message, "\r\n"); // Add new line (CR + LF)
//
حيث يعرض محتويات AN0
وبعدها الحقها بمصفوفة message
وبعدها
كود:
// SMS footer
strcat(Message, "End.");
strcat(Message, "\r\n"); // Add new line (CR + LF)
//
اضاقة كلمة End الى الرسالة message
يعني خله كل البيانات التي تريده ارسالها في مصفوفة messge كانما كتبت انت رسالة في موبايل وتريد ارسالها هنا جمعنا كل البيانات حتى يستعد مايكرو لارسالها
للموضوع بقية ان شالله