جدول المحتويات:

MIDI Drum Kit على Python و Arduino: 5 خطوات (بالصور)
MIDI Drum Kit على Python و Arduino: 5 خطوات (بالصور)

فيديو: MIDI Drum Kit على Python و Arduino: 5 خطوات (بالصور)

فيديو: MIDI Drum Kit على Python و Arduino: 5 خطوات (بالصور)
فيديو: Web Programming - Computer Science for Business Leaders 2016 2024, شهر نوفمبر
Anonim
Image
Image
MIDI Drum Kit على Python و Arduino
MIDI Drum Kit على Python و Arduino
MIDI Drum Kit على Python و Arduino
MIDI Drum Kit على Python و Arduino

كنت أرغب دائمًا في شراء مجموعة طبول منذ أن كنت طفلاً. في ذلك الوقت ، لم تكن جميع المعدات الموسيقية تحتوي على جميع التطبيقات الرقمية نظرًا لأن لدينا الكثير من التطبيقات اليوم ، وبالتالي كانت الأسعار جنبًا إلى جنب مع التوقعات مرتفعة للغاية. لقد قررت مؤخرًا شراء أرخص مجموعة طبول من eBay ، مع الأولوية الوحيدة: القدرة على هدمها وإرفاق أجهزتي وبرامجي الخاصة بالجهاز.

لم تكن عملية الشراء مخيبة للآمال على الإطلاق: مجموعة أسطوانة قابلة للطي محمولة مع 9 وسادات صوت مختلفة ، ودواسات تبديل للقدمين لطبلة الركلة و hi-hat ومقبس طاقة micro-USB. ما كان محبطًا حقًا ، هو أصوات الإخراج (الاستخدام الفعلي لهذه المجموعة هو توصيل مكبر صوت خارجي والاستمتاع به). لذلك ، قررت تحويله إلى مجموعة طبل MIDI الخاصة بي القابلة للبرمجة عبر USB ، استنادًا إلى Arduino وواجهة المستخدم القائمة على Python ، للاستخدام السهل والتعديلات السهلة مثل تحديدات الصوت والمذكرة والقناة.

مميزات الجهاز:

  • سعر منخفض
  • إنشاء مجموعة طبل من أي مدخلات رقمية - حتى مجموعة من الأزرار الانضغاطية
  • دعم الاتصالات وإمدادات الطاقة عبر واجهة USB فقط - دمج محول USB إلى UART وجهاز Arduino
  • أجزاء Mininum للتشغيل السليم
  • واجهة مستخدم سهلة الاستخدام تعتمد على Python
  • دعم MIDI الكامل مع سرعة قابلة للتعديل ودبابيس اردوينو
  • حفظ وتحميل تكوينات الأسطوانة المخصصة المخزنة في ذاكرة الجهاز

لننتقل إلى المشروع …

الخطوة 1: نظرية العملية

نظرية التشغيل
نظرية التشغيل
نظرية التشغيل
نظرية التشغيل
نظرية التشغيل
نظرية التشغيل

مخطط كتلة

بادئ ذي بدء ، دعنا نركز على هيكل المشروع ، ونقسمه إلى كتل منفصلة:

نشمر عن مجموعة الطبل

الوحدة الرئيسية للمشروع. يتكون من 9 منصات طبول منفصلة ، حيث تكون كل لوحة عبارة عن مجموعة من الأزرار التي تغير حالتها المنطقية أثناء الضغط عليها. بسبب هيكلها ، هناك إمكانية لبناء مجموعة الأسطوانة هذه من أي أزرار ضغط. يتم توصيل كل وسادة أسطوانة بمقاوم السحب على اللوحة الإلكترونية الرئيسية ، وبالتالي أثناء الضغط على وسادة الأسطوانة بشكل متكرر ، يتم ربط مفتاح معين بأرض الدائرة ويكون المنطق LOW موجودًا على خط لوحة الأسطوانة. عندما لا يكون هناك ضغط مطبق ، يكون مفتاح لوحة الأسطوانة مفتوحًا وبسبب سحب المقاوم لخط الطاقة ، يكون HIGH المنطقي موجودًا على خط وسادة الأسطوانة. نظرًا لأن الغرض من المشروع هو إنشاء جهاز MIDI رقمي كامل ، يمكن إهمال جميع الأجزاء التناظرية الموجودة على PCB الرئيسي. من المهم ملاحظة أن مجموعة الطبلة بها بدالتان لطبلة الركلة والقبعة المرتفعة ، والمرتبطة أيضًا بمقاومات السحب وتشترك في نفس منطق التشغيل مثل جميع وسادات الأسطوانة (سنناقشها لاحقًا بقليل).

اردوينو برو مايكرو

عقل الطبل. والغرض منه هو اكتشاف ما إذا كانت هناك إشارة تخرج من لوحة الأسطوانة وتوفير إخراج MIDI مناسب مع جميع المعلمات الضرورية: ملاحظة وسرعة ومدة الإشارة. نظرًا للطبيعة الرقمية لمنصات الأسطوانة ، يمكن ربطها ببساطة بمدخلات اردوينو الرقمية (إجمالي 10 دبابيس). من أجل تخزين جميع الإعدادات المطلوبة ومعلومات MIDI ، سنستخدم ذاكرتها - EEPROM ، وبالتالي في كل مرة نقوم فيها بتشغيل الجهاز ، يتم تحميل معلومات MIDI من EEPROM ، مما يجعلها قابلة لإعادة البرمجة وإعادة التكوين. أيضًا ، يتوفر Arduino Pro-Micro في عبوة صغيرة جدًا ويمكن تخصيصه بسهولة في العلبة الداخلية لمجموعة الأسطوانات.

FTDI USB لتحويل المسلسل

من أجل برمجة وتحديد ميزات أجهزتنا بمساعدة تطبيق الكمبيوتر الشخصي ، هناك حاجة لتحويل واجهة USB إلى تسلسلي ، لأن Arduino Pro-Micro لا يحتوي على USB. نظرًا لأن الاتصال بين الأجهزة يعتمد على UART ، يتم استخدام جهاز FTDI في هذا المشروع ، نظرًا لبساطة استخدامه بغض النظر عن خصائصه الإضافية.

تطبيقات الكمبيوتر - بايثون

عندما يتعلق الأمر بتطوير واجهات المستخدم والمشاريع سريعة الإنشاء ، فإن Python يعد حلاً رائعًا. الغرض من تطبيق واجهة المستخدم هو جعله أكثر ملاءمة لإعادة تعريف خصائص MIDI لمجموعة الأسطوانات الخاصة بنا وتخزين المعلومات وجهاز البرنامج وإجراء الاتصال بين الأنظمة دون الحاجة إلى تجميع الكود مرارًا وتكرارًا. نظرًا لأننا نستخدم واجهة تسلسلية للتواصل مع مجموعة الطبل ، فهناك الكثير من الوحدات المجانية في جميع أنحاء الإنترنت ، والتي تدعم أي نوع من أنواع الاتصال التسلسلي. بالإضافة إلى ذلك ، كما سيتم مناقشته لاحقًا ، تتكون واجهة UART من إجمالي ثلاثة دبابيس: RXD و TXD و DTR. يتم استخدام DTR لإجراء إعادة التعيين على وحدة Arduino ، وبالتالي عندما نكون مهتمين بتشغيل تطبيق MIDI أو توصيل واجهة المستخدم بجهاز البرنامج ، فلا داعي على الإطلاق لإعادة توصيل كابل USB أو على الإطلاق.

الخطوة 2: الأجزاء والأدوات

القطع

  • نشمر عن مجموعة الطبل
  • 2 × استمرارية الدواسات (عادةً ما تكون مضمنة في عبوة DK).
  • FTDI - USB لتحويل المسلسل
  • اردوينو برو مايكرو
  • كابل Micro-USB

الادوات

  • لحام الحديد / محطة
  • لحام القصدير
  • سلك ذو قطر رقيق أحادي النواة
  • ملاقيط
  • القاطع
  • كماشة
  • سكين
  • مفك براغي
  • طابعة ثلاثية الأبعاد (اختيارية - لمنصات دواسة مخصصة)

برمجة

  • اردوينو IDE
  • بايثون 3 أو أعلى
  • JetBrains Pycharm
  • واجهة MIDI بدون شعر
  • حلقة ميدي

الخطوة 3: اللحام والتجميع

اللحام والتجميع
اللحام والتجميع
اللحام والتجميع
اللحام والتجميع
اللحام والتجميع
اللحام والتجميع

نظرًا لوجود ثلاث وحدات يجب دمجها ، فإن عملية اللحام والتجميع قصيرة وبسيطة:

  • قم بتوصيل Arduino Pro-Micro معًا بجهاز FTDI ، وتأكد من أن الاتصالات تتوافق مع الإدخال / الإخراج المحدد في كل جهاز:

    • VBUS-VBUS
    • GND-GND
    • DTR-DTR
    • RXD-TXD
    • TXD-RXD
  • قم بإزالة جميع المسامير من العلبة البلاستيكية للأسطوانة ، وتأكد من أنه يمكنك التركيز على كابل لوحة إلى لوحة ، ومقاومات السحب الخاصة به
  • أسلاك رفيعة لحام لوحدة Arduino-FTDI التي قمنا بإنشائها مسبقًا:

    • المدخلات الرقمية: D [2:11]
    • VBUS
    • د +
    • د-
    • GND
  • أدخل الوحدة داخل علبة البطارية بحيث تطفو الأسلاك على نفس جانب مقاومات الانسحاب للوسادات
  • قم بتوصيل جميع المدخلات الرقمية بأطراف لوحة الأسطوانة كما هو موضح في الشكل الأخير.
  • ناقل USB صغير اللحام (VBUS ، D + ، D- ، GND) إلى جهاز FTDI ، تأكد من عدم وجود أخطاء في تتبع هذه الأسلاك.
  • قم بتوصيل وحدة Arduino-FTDI بالغراء الساخن في علبة البطارية
  • قم بتجميع الجهاز بمسامير مناسبة

لقد فعلنا ذلك ، تم تجميع الجهاز. دعنا نواصل إلى الكود …

الخطوة 4: البرمجة أ: Arduino

البرمجة أ: اردوينو
البرمجة أ: اردوينو

لنصف مخططنا خطوة بخطوة:

بادئ ذي بدء ، هناك حاجة لتضمين مكتبتين ضروريتين للتشغيل السليم. تم تثبيت EEPROM مسبقًا في Arduino IDE ، ولكن يجب تثبيت وحدة debouncer لطبل الطبل بشكل منفصل

# تضمين # تضمين

يتم استخدام رموز التبديل هذه بشكل أساسي في تسلسل التصحيح. إذا كنت ترغب في تجربة اتصال محطات Arduino بألواح الأسطوانة ، وتحديد جميع المدخلات الرقمية ، فيجب تحديد هذه المفاتيح

/ * مفاتيح المطور: قم بإلغاء التعليق على الوضع المطلوب لتصحيح الأخطاء أو التهيئة * /// # حدد LOAD_DEFAULT_VALUES // تحميل قيم ثابتة بدلاً من EEPROM // # حدد PRINT_PADS_PIN_NUMBERS // طباعة رقم الدبوس المتصل بلوحة تم ضربها عبر المنفذ التسلسلي

تمثل الحقول الثابتة جميع القيم الافتراضية ، بما في ذلك تعداد لوحة الأسطوانة. لتشغيل الجهاز لأول مرة ، هناك حاجة لمعرفة التوصيل الدقيق لدواسات Hi-Hat و Kick

/ * تعداد نوع الأسطوانة * /

تعداد DRUM_POSITION {KICK = 0، SNARE، HIHAT، RIDE، CYMBAL1، CYMBAL2، TOM_HIGH، TOM_MID، TOM_LO، HIHAT_PEDAL} ؛

/* قيم افتراضية */

const uint8_t DRUM_NOTES [10] = {36، 40، 42، 51، 49، 55، 47، 45، 43، 48} ؛ const uint8_t DRUM_VELOCITIES [10] = {110، 100، 100، 110، 110، 110، 110، 110، 110، 110} ؛ const uint8_t DRUM_PINS [10] = {8، 6، 4، 3، 11، 9، 5، 10، 2، 7} ؛

/ * مدة ركلة طبل الطبل * /

const uint8_t KICK_DB_DURATION = 30 ؛

يستخدم EEPROM لتخزين / تحميل جميع البيانات الواردة من تطبيقات الكمبيوتر. تمتد العناوين الموضحة أعلاه ، وتوضح الموقع الدقيق لمعلومات MIDI لكل لوحة طبول

/ * تعيين عناوين EEPROM

ملاحظات: | 0x00 ، 0x01 ، 0x02 ، 0x03 ، 0x04 ، 0x05 ، 0x06 ، 0x07 ، 0x08 ، 0x09 |

الدبابيس: | 0x0A ، 0x0B ، 0x0C ، 0x0D ، 0x0E ، 0x0F ، 0x10 ، 0x11 ، 0x12 ، 0x13 | السرعات | 0x14 ، 0x15 ، 0x16 ، 0x17 ، 0x18 ، 0x19 ، 0x20 ، 0x21 ، 0x22 ، 0x23 | * / const uint8_t NOTES_ADDR = 0x00 ؛ const uint8_t VELOCITIES_ADDR = 0x14 ؛ const uint8_t PINS_ADDR = 0x0A ؛

تُستخدم المتغيرات العامة لتحديد حالة كل لوحة ، وإجراء اتصالات MIDI وفقًا لذلك

/* المتغيرات العالمية */

uint8_t drumNotes [10] ، drumVelocities [10] ، drumPins [10] ؛ // متغيرات MIDI

uint8_t uartBuffer [64] ؛ // UART Buffer لجمع وتخزين ركلة MIDI Data Debouncer (DRUM_PINS [KICK] ، KICK_DB_DURATION) ؛ // كائن Debouncer لطبلة الركلة المنطقية السابقة [9] = {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ؛ // حالات المنطق السابق للوحة الأسطوانة تيار منطقي متغير الحالة [9] = {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ؛ // حالات المنطق الحالي للوحة الطبل

وظائف EEPROM

/ * تخزين الإعدادات في EEPROM * /

متجر باطل EEPROM () {

memcpy (drumNotes ، uartBuffer ، 10) ؛ memcpy (drumPins ، uartBuffer + 10 ، 10) ؛ memcpy (drumVelocities، uartBuffer + 20، 10) ؛ لـ (uint8_t i = 0 ؛ i <10 ؛ i ++) EEPROM.write (NOTES_ADDR + i، drumNotes ) ؛ لـ (uint8_t i = 0 ؛ i <10 ؛ i ++) EEPROM.write (PINS_ADDR + i ، drumPins ) ؛ لـ (uint8_t i = 0 ؛ i <10 ؛ i ++) EEPROM.write (VELOCITIES_ADDR + i، drumVelocities ) ؛ }

/ * تحميل الإعدادات من EEPROM * /

تحميل باطل EEPROM () {لـ (uint8_t i = 0؛ i <10؛ i ++) drumNotes = EEPROM.read (NOTES_ADDR + i) ؛ لـ (uint8_t i = 0 ؛ i <10 ؛ i ++) drumPins = EEPROM.read (PINS_ADDR + i) ؛ لـ (uint8_t i = 0 ؛ i <10 ؛ i ++) drumVelocities = EEPROM.read (VELOCITIES_ADDR + i) ؛ }

تهيئة المتغيرات ووضع البرمجة ، في حالة الدواسات وتمهيد Arduino يتم تنشيطهما في وقت واحد

enterProgrammingMode باطل () {

منطقي ConfirmBreak = خطأ ؛ uint8_t lineCnt = 0 ؛ uint8_t charCnt = 0 ؛ char readChar = 0 ؛ while (! definitelyBreak) {if (Serial.available ()) {uartBuffer [charCnt] = Serial.read () ؛ إذا (charCnt> = 29) ConfirmBreak = true ؛ آخر charCnt ++ ؛ }} Serial.println ("موافق") ؛ مخزن EEPROM () ، }

initValues باطلة () {

#ifdef LOAD_DEFAULT_VALUES memcpy (drumNotes ، DRUM_NOTES ، 10) ؛ memcpy (drumVelocities، DRUM_VELOCITIES، 10) ؛ memcpy (drumPins ، DRUM_PINS ، 10) ؛ #else loadEEPROM () ؛ #إنهاء إذا }

معالجات اتصالات MIDI مع تأخير يبلغ 1 مللي ثانية من وقت تعليق الملاحظات

/ * تشغيل وظيفة ملاحظة MIDI * /

midiOut باطل (تعداد DRUM_POSITION drumIn) {

إذا (drumIn == HIHAT) {// إذا تم الضغط على HI-HAT ، فهناك حاجة لإجراء فحص ما إذا كانت الدواسة مضغوطة إذا (! digitalRead (drumPins [HIHAT_PEDAL])) {noteOn (0x90، drumNotes [HIHAT_PEDAL] ، drumVelocities [HIHAT_PEDAL]) ، تأخير (1) ؛ noteOn (0x90، drumNotes [HIHAT_PEDAL] ، 0) ؛ } else {noteOn (0x90، drumNotes [HIHAT]، drumVelocities [HIHAT])؛ تأخير (1) ؛ noteOn (0x90، drumNotes [HIHAT]، 0) ؛ }} else {// مذكرة إرسال MIDI ذات الأسطوانة العادية (0x90، drumNotes [drumIn]، drumVelocities [drumIn])؛ تأخير (1) ؛ noteOn (0x90، drumNotes [drumIn]، 0) ؛ }}

ملاحظة باطلة Serial.write (الملعب) ؛ Serial.write (السرعة) ؛ }

وظائف الإعداد () والحلقة () مع حلقة تشغيل الجهاز اللانهائية:

الإعداد باطل() {

Serial.begin (115200) ؛

لـ (uint8_t i = 0 ؛ i <10 ؛ i ++) {pinMode (i + 2 ، INPUT) ؛ } #ifdef PRINT_PADS_PIN_NUMBERS while (true) {// Infinite debug loop for (uint8_t i = 0؛ i <10؛ i ++) {if (! digitalRead (i + 2)) {Serial.print ("Pin No: D") ؛ Serial.print (i + '0') ؛ // تحويل الرقم إلى حرف ASCII}}} #else initValues ()؛ / * وضع البرمجة: إذا تم الضغط على بدالتين أثناء التمهيد - يتم تنشيط الوضع * / if (! digitalRead (drumPins [KICK]) &&! digitalRead (drumPins [HIHAT_PEDAL])) enterProgrammingMode () ؛ #إنهاء إذا }

حلقة باطلة () {for (uint8_t i = 1؛ i <9؛ i = i + 1) {currentState = digitalRead (drumPins ) ؛ إذا (! currentState && previousState ) midiOut (i)؛ // قارن الحالات واكتشاف الحافة الساقطة previousState = currentState ؛ } kick.update ()؛ // Kick drum تستخدم خوارزمية debounce المخصصة إذا (kick.edge ()) if (kick.falling ()) midiOut (KICK) ؛ }

الخطوة 5: البرمجة ب: بايثون وواجهة المستخدم

البرمجة ب: بايثون وواجهة المستخدم
البرمجة ب: بايثون وواجهة المستخدم
البرمجة ب: بايثون وواجهة المستخدم
البرمجة ب: بايثون وواجهة المستخدم
البرمجة ب: بايثون وواجهة المستخدم
البرمجة ب: بايثون وواجهة المستخدم

تعد واجهة مستخدم Python معقدة بعض الشيء لفهمها من النظرة الأولى ، ومن ثم سنحاول شرح أساسياتها ، وكيفية استخدامها ، والوظيفة التي يمتلكها كل زر ، وكيفية برمجة جهاز Arduino بشكل صحيح.

واجهة المستخدم - التطبيق

واجهة المستخدم عبارة عن تمثيل رسومي لمبرمج مجموعة الأسطوانات لدينا ، مما يجعلها سهلة الاستخدام ومناسبة لبرمجة جهاز Arduino في أي وقت. تتكون واجهة المستخدم من عدة وحدات رسومية مرتبطة بعملية التشغيل المقترحة. دعنا نراجعهم واحدًا تلو الآخر:

  1. صورة مجموعة الأسطوانة: تستخدم Python UI إحداثيات X-Y للصورة لتحديد نوع الأسطوانة الذي تم تحديده. إذا تم تحديد منطقة أسطوانة صالحة ، فستظهر رسالة IO الثانوية ، مع مجالات الملاحظة والسرعة ومحطة Arduino للوسادة المخصصة للأسطوانة. بعد التحقق من هذه المعلمات من قبل المستخدم واعتمادها ، يمكن نقل هذه القيم مباشرة إلى جهاز Arduino.
  2. صورة وحدة التحكم الخارجية: لكي تتمكن من استخدام مجموعة طبول MIDI مع بيئة إنشاء VST / Music ، هناك حاجة لتشغيل مترجم Serial-To-MIDI. لقد استخدمت Hairless ، وهو متاح مجانًا ويمكن تشغيله مباشرة من واجهة المستخدم الخاصة بنا ، فقط بالضغط على صورته.
  3. قائمة منفذ COM: للتواصل مع Arduino ، هناك حاجة لتحديد منفذ COM المرفق. يتم تحديث القائمة بالضغط على زر "تحديث".
  4. تحميل / حفظ التكوين: هناك قيم MIDI افتراضية محددة في الكود ، والتي يمكن تعديلها من قبل المستخدم من خلال التفاعل مع واجهة المستخدم. يتم تحديد التكوين في ملف config.txt بتنسيق معين ، يمكن للمستخدم حفظه أو تحميله.
  5. زر جهاز البرنامج: من أجل تخزين جميع قيم MIDI المعدلة في Arduino EEPROM ، هناك حاجة للضغط على دواستين قدم (Kick drum و Hi-hat pedal) بعد ذلك ، انتظر حتى يكتمل نقل البيانات. إذا كانت هناك أية مشكلات في الاتصال ، فسيتم عرض نافذة منبثقة مناسبة. إذا نجح الإرسال ، ستعرض واجهة المستخدم رسالتها الناجحة.
  6. زر الخروج: ما عليك سوى الخروج من التطبيق ، بإذن المستخدم.

مميزات كود بايثون

هناك الكثير من الأشياء التي تحدث في الكود ، لذلك سوف نتوسع في الوظائف المكتوبة بدلاً من الكود بأكمله.

بادئ ذي بدء ، من أجل استخدام واجهة المستخدم ، هناك حاجة لتنزيل عدة وحدات ، لجعل الكود يعمل:

استيراد osimport threading import tkinter as tk from tkinter import messagebox من tkinter import * from PIL import ImageTk ، Image import numpy as np import serial import glob

يتم تضمين بعض الوحدات النمطية في حزمة Python الافتراضية. يجب تثبيت عدة وحدات عبر أداة PIP:

وسادة تثبيت نقطة

نقطة تثبيت numpy pip تثبيت ScreenInfo

يوصى بشدة بتشغيل التطبيق عبر PyCharm. في الإصدارات المستقبلية ، أخطط لتصدير ملف تنفيذي للمشروع.

شرح موجز للكود

سيكون فهم الكود أسهل بكثير إذا نظرنا إلى سطوره من منظور الوظائف والفئات:

1. الوظيفة الرئيسية - هنا يبدأ الرمز

إذا _name_ == '_الرئيسية_: drumkit_gui ()

2. ثوابت طقم الطبل والإحداثيات ومعلومات MIDI الافتراضية

class Drums: DRUM_TYPES = ["Kick" ، "Hihat" ، "Snare" ، "Crash 1" ، "Crash 2" ، "Tom High" ، "Tom Mid" ، "Tom Low" ، "Ride" ، "Hihat Pedal "، "مراقب"]

COORDINATES_X = [323 ، 117 ، 205 ، 173 ، 565 ، 271 ، 386 ، 488 ، 487 ، 135 ، 79]

COORDINATES_Y = [268، 115، 192، 40، 29، 107، 104، 190، 71، 408، 208] DIMS_WIDTH = [60، 145، 130، 120، 120، 70، 70، 130، 120، 70، 145] DIMS_LENGTH = [60 ، 60 ، 80 ، 35 ، 35 ، 40 ، 40 ، 70 ، 35 ، 100 ، 50]

DRUM_ENUM = ["Kick" ، "Snare" ، "Hihat" ، "Ride" ، "Crash 1" ، "Crash 2" ، "Tom High" ، "Tom Mid" ، "Tom Low" ، "Hihat Pedal"]

DRUM_NOTES = [36، 40، 42، 51، 49، 55، 47، 45، 43، 48] DRUM_VELOCITIES = [110، 100، 100، 110، 110، 110، 110، 110، 110، 110] DRUM_PINS = [8 ، 6 ، 4 ، 3 ، 11 ، 9 ، 5 ، 10 ، 2 ، 7]

3. وظائف واجهة المستخدم - التعامل مع واجهة المستخدم والكائنات الرسومية

تعيين set_active (واجهة المستخدم)

def Secondary_ui (نوع_الطبل)

فئة SelectionUi (tk. Frame)

تطبيق فئة (tk. Frame)

def drumkit_gui ()

def event_ui_clicked (حدث)

def getorigin (الذات ، الحدث)

4. الاتصال التسلسلي

def get_serial_ports ()

مواطن التواصل_with_arduino (المنفذ)

5. العمل مع الملفات: تخزين / تحميل الإعدادات من ملف txt

def save_config ()

def load_config ()

6. تشغيل التطبيق الخارجي hairless.exe من الكود باستخدام قدرات Python Threading

فئة ExternalExecutableThread (threading. Thread)

def run_hairless_executable ()

لتشغيل الكود ، توجد قائمة بالملفات التي يجب إرفاقها بمجلد المشروع:

  • config.txt: ملف الإعدادات
  • hairless.exe: محول MIDI بدون شعر
  • drumkit.png: صورة تحدد جميع منصات الأسطوانة القابلة للنقر على واجهة المستخدم الخاصة بنا (يجب تنزيلها من مجموعة الصور في هذه الخطوة)
  • drumgui.py: كود المشروع

هذا كل ما نحتاج إلى التأكيد عليه لإنجاحه. من المهم جدًا إضافة ملفات إلى المشروع: صورة مجموعة الطبل ، ملف hairless.exe القابل للتنفيذ وملف الإعدادات config.txt.

و.. لقد فعلنا هنا!:)

آمل أن تجد هذه التعليمات مفيدة.

شكرا للقراءة!:)

موصى به: