إن تطوير مشروع Arduino Mega Server على قدم وساق وفي عملية العمل هناك عقبات غير متوقعة يجب التغلب عليها بشكل بطولي. سأخبركم عن بعض منهم اليوم ، وربما سيوفر لك هذا القليل من وقتك وأعصابك.النكتة الأولى: والمرأة العجوز مخادعة أم ترى الجذر!
أستعد لإصدار نسخة 0.14 من النظام لـ Arduino Due وسوف أقوم بتكييف هذا الإصدار للعمل مع Power Monitor. بالنسبة لأولئك الذين لا يعرفون ، Power Monitor هو نظام برامج وأجهزة لمراقبة إمدادات الطاقة ، والذي يسمح لك بالتحكم في مستوى التيار الكهربائي واستهلاك الطاقة على أكثر من 14 قناة ولديه تحكم مدمج في تردد التيار الرئيسي وحتى راسم الذبذبات في الشبكة ، والذي يعرض النموذج مباشرة على صفحة الويب التيار والجهد في الوقت الحقيقي.
قمت بتجميع الدائرة ، وفحصت كل شيء ، وقم بتشغيلها - لا تعمل. حسنًا ، هذا يحدث ، إنه أمر عادي. أبدأ في التحقق من الرمز - كل شيء على ما يرام ، فحص الأجهزة - كل شيء على ما يرام ، فحص الاتصالات - كل شيء على ما يرام. في التفكير العميق ، أجلس على كرسي وأبدأ في التفكير في المكان الذي قد يكون فيه خطأ. بعد الكثير من التفكير ، توصلت إلى استنتاج مفاده أن كل شيء يتم بشكل صحيح. لماذا لا يعمل؟ لا توجد معجزات ، لذلك أتحقق من كل شيء مرة ثانية.
الرمز ، الأجهزة ، الاتصالات. يبدو أن كل شيء صحيح. أعتقد الكثير مرة أخرى. سأجرف الشفرة مرة أخرى ، مع الإدمان - والنتيجة صفر. نظرًا لاستنفاد جميع طرق العيادات الخارجية ، أقوم بنقل المريض إلى قسم الجراحة وإخراج جهاز اختبار وحديد لحام. ينظر المريض إلي بحذر ، لكنه عاجز عن الكلام ولا يمكنه أن يقول لي أي شيء. بعد بعض التلاعبات ، اتضح أن Power Monitor لا يعمل على الإطلاق! كيف ذلك؟ موصلات إمدادات الطاقة مرئية بوضوح ، ولكن لا توجد قوة!ثم فجر لي ، كما اتضح ، أن هناك لوحات النماذج الأولية مثل التي صادفتها
عادةً والتي اعتدت عليها واعتبرتها هي الوحيدة الممكنة ، ولكن هناك مثل هذه (تجد عشرة اختلافات ، كما يقولون)
وهذه هي اللوحة التي جئت عبرها هذه المرة. يبدو وكأنه تافه ومن المسلم به فقط عندما تعرف بالفعل عن ذلك ، وعندما لا تعرف ، يمكنك كسر رأسك بالكامل حتى تكتشف سبب عدم عمل جهازك.لا تزال هناك لحظة نفسية - إذا اعتبرت الإطار سليماً ، فلا تنتبه إلى الممر الموجود في الوسم (أنت لا تعرف أبدًا ما أرادت الشركة المصنعة رسمه). يحدث هذا النوع من النكات أحيانًا أثناء التطوير - انظر ، كما يقولون ، إلى الجذر!مضحك الثاني: مرحبا من فريقنا المحبوب arduino.cc
كما قلت ، فإن التنمية على قدم وساق وأصبحت AMS بالفعل مشروعًا كبيرًا إلى حد ما ، وبطبيعة الحال ، من المستحيل الاستغناء عن توجيهات تجميع مشروطة مفيدة جدًا في المشروع. هذه أداة إدارة تعليمات برمجية قوية ، خاصة وأن خادم Arduino Mega Server بهيكل معياري وتوجيهات ترجمة مشروطة تمكن وتعطيل وحدات مختلفة من النظام.#define
#ifdef
#endif
يتم ذلك بحيث يمكنك تعطيل الوحدات التي لا تحتاج إليها وحفظ ذاكرة متحكم قيمة. ولم أجتمع في ممارستي (بلغات برمجة مختلفة) بحيث لا تعمل توجيهات الترجمة الشرطية أو تكون "عربات التي تجرها الدواب". هذا هراء! حتى وقت قريب ، اعتقدت أن ذلك مستحيل ، لكن المطورين (المضحكين) لبيئة البرمجة Arduino لا يسمحون لنا بالملل ، ولكن أولاً وقبل كل شيء.لذا ، نحن نحاول تعطيل الوحدة النمطية التي لا نحتاجها ، في هذه الحالة ، الوحدة النمطية للعمل مع MajorDoMo (وقد نجح هذا حتى الآن كما هو متوقع).
من الناحية النظرية ، كل شيء بين التوجيهات#ifdef MAJORDOMO_FEATURE
...
#endif
يجب إيقاف تشغيله من التجميع. ولكن كان هناك!
#ifdef MAJORDOMO_FEATURE
char majorMegaObject[] = "ncMega01";
char majorCommObject[] = "comm_mega01";
byte MAJOR_IP[] = {192, 168, 2, 8};
int MAJOR_PORT = 80;
EthernetClient mclient;
void majordomoInit() {
initStart("MajorDoMo");
timeStamp();
Serial.print("Connect to MajorDoMo... ");
if (mclient.connect(MAJOR_IP, MAJOR_PORT)) {
Serial.println("OK");
mclient.println();
} else {
Serial.println("failed");
}
delay(200);
mclient.stop();
modulMajor = MODUL_ENABLE;
initDone();
}
…
كما ترون ، فإن الترجمة الشرطية لا تعمل فقط (إنها سيئة ، لكنها لم تذهب إلى أي مكان بعد) ، ولكنها تعمل "كما يضعها الله في روحك" ، أي حيث تريد - تجمع ، حيث لا تريد - لا تجمع! وهذا أمر سيئ للغاية ، لأن مثل هذه "الأخطاء" التي لا يمكن التنبؤ بها من الصعب جدًا اكتشافها ويمكن أن تؤدي إلى عواقب لا يمكن التنبؤ بها تمامًا.بالمناسبة ، هذا المقال عن Arduino IDE الإصدار 1.6.5. ولكن ، على ما يبدو ، لا يهم إصدار بيئة التطوير حقًا ، فهي كلها عربات التي تجرها الدواب تمامًا. ما تعلمته مؤخرًا فقط ، حتى جمعت رسومات صغيرة ومشاريع صغيرة ، كان كل شيء في محله.النكتة الثالثة: مرة أخرى ، arduino.cc المحبوب لدينا وخلل رائع تمامًا
لن أصف هنا لفترة طويلة ، في رأيي ، خلل غير عادي في مترجم بيئة Arduino ، لكنني سأعطي الكود على الفور حتى تتمكن بنفسك من تقدير هذه المعجزة.قم بتعريف متغير:long errorsHttpSend = 0;
في الحلقة نطبع:Serial.println(errorsHttpSend);
النتيجة:808333615
إعادة التسمية بإضافة 2:long errorsHttpSend2 = 0;
في الحلقة نطبع:Serial.println(errorsHttpSend2);
النتيجة:0
السؤال الذي يطرح نفسه: كيف يمكن إجراء التنمية في مثل هذا النظام؟ هنا يمكنك أيضًا ذكر العمل غير الكافي تمامًا للإصدارات المختلفة من Arduino IDE. الكود الذي يعمل بشكل رائع في أحد إصدارات البيئة يرفض الترجمة في نسخة أخرى. بيئة واحدة تجمع المشروع ، وأخرى "لا ترى" إحدى المكتبات. بعد إعادة تثبيت بيئة التطوير ، توقف الإصدار 1.6.5 (الذي تم تجميعه قبل إعادة التثبيت) عن ترجمة المشروع.لذا ضع في اعتبارك ما يجب عليك التعامل معه عند العمل مع Arduino. هناك نقطة إيجابية واحدة فقط: مع مثل هذا النظام ، ستصبح عن غير قصد معلم برمجة وسيدًا في إدارة النظام.اسمحوا لي أن أعبر عن أمنيتي برأس السنة الجديدة لفريق تطوير Arduino: أنت عزيزنا! نتمنى لكم عامًا سعيدًا جديدًا ونتمنى لكم إطلاق بيئة تطوير عمل طبيعية في العام الجديد!سنة جديدة سعيدة!
اصدقاء! أهنئكم على عام 2016 القادم وآمل أن تساعدك المعلومات الواردة في هذه المقالة على توفير بعض الوقت والأعصاب في العام الجديد! والتنمية الناجحة!ملاحظة علىالرغم من كل مكائد الأعداء ، في المستقبل القريب سيتم إصدار نسخة جديدة من Arduino Mega Server في 0.14 لـ Arduino Mega و Arduino Due مع العديد من الميزات الجديدة.إضافة . قناة Youtube مفتوحة وهنا فيديو ترويجي لخادم Arduino Mega ، والذي يوضح كيفية العمل مع نظام حقيقي.