Πίνακας περιεχομένων:

MIDI Drum Kit σε Python και Arduino: 5 βήματα (με εικόνες)
MIDI Drum Kit σε Python και Arduino: 5 βήματα (με εικόνες)

Βίντεο: MIDI Drum Kit σε Python και Arduino: 5 βήματα (με εικόνες)

Βίντεο: MIDI Drum Kit σε Python και Arduino: 5 βήματα (με εικόνες)
Βίντεο: 🚀 RUTUBE и ТОЧКА. Разработка РУТУБА за 5 часов *БЕЗ ВОДЫ* [Next / React / Nest / PostgreSQL / Redux] 2024, Νοέμβριος
Anonim
Image
Image
MIDI Drum Kit σε Python και Arduino
MIDI Drum Kit σε Python και Arduino
MIDI Drum Kit σε Python και Arduino
MIDI Drum Kit σε Python και Arduino

Πάντα ήθελα να αγοράσω ένα drum kit από παιδί. Τότε, όλος ο μουσικός εξοπλισμός δεν είχε όλες τις ψηφιακές εφαρμογές όπως έχουμε πολλές σήμερα, επομένως οι τιμές μαζί με τις προσδοκίες ήταν πολύ υψηλές. Πρόσφατα αποφάσισα να αγοράσω ένα φθηνότερο κιτ τυμπάνων από το eBay, με μοναδική προτεραιότητα: Δυνατότητα να το γκρεμίσω και να επισυνάψω το δικό μου υλικό και λογισμικό στη συσκευή.

Η αγορά δεν ήταν καθόλου απογοητευτική: Φορητό σετ τυλιγμένου τυμπάνου με 9 διαφορετικά μαξιλάρια ήχου, δύο πεντάλ διακόπτη ποδιών για τύμπανο κλωτσιών και hi-hat και υποδοχή τροφοδοσίας micro-USB. Αυτό που ήταν πραγματικά αποθαρρυντικό, είναι οι ήχοι εξόδου (η πραγματική χρήση αυτού του κιτ είναι να συνδέσετε εξωτερικό ηχείο και να το απολαύσετε). Έτσι, αποφάσισα να το μετατρέψω σε δικό μου προγραμματιζόμενο μέσω USB, MIDI drum kit βασισμένο στο Arduino και User Interface βασισμένο σε Python, για εύχρηστη χρήση και εύκολες τροποποιήσεις όπως, ένταση, σημείωση και επιλογές καναλιού.

Χαρακτηριστικά της συσκευής:

  • Χαμηλή τιμή
  • Δημιουργία κιτ τυμπάνου από οποιαδήποτε ψηφιακή είσοδο - ακόμη και μια σειρά από κουμπιά
  • Υποστήριξη επικοινωνίας και τροφοδοσία μόνο μέσω διεπαφής USB - Ενσωμάτωση μετατροπέα USB σε UART και συσκευής Arduino
  • Ελάχιστα εξαρτήματα για σωστή λειτουργία
  • Εύκολο στη χρήση περιβάλλον εργασίας χρήστη που βασίζεται σε Python
  • Πλήρης υποστήριξη MIDI με ρυθμιζόμενες ταχύτητες, σημειώσεις και καρφίτσες Arduino
  • Αποθήκευση & φόρτωση προσαρμοσμένων διαμορφώσεων τυμπάνου που είναι αποθηκευμένες στη μνήμη της συσκευής

Ας προχωρήσουμε στο έργο…

Βήμα 1: Θεωρία Λειτουργίας

Θεωρία Λειτουργίας
Θεωρία Λειτουργίας
Θεωρία Λειτουργίας
Θεωρία Λειτουργίας
Θεωρία Λειτουργίας
Θεωρία Λειτουργίας

Αποκλεισμός διαγράμματος

Πρώτα απ 'όλα, ας επικεντρωθούμε στη δομή του έργου και το χωρίσουμε σε ξεχωριστά μπλοκ:

Roll-Up Drum Kit

Η κύρια μονάδα του έργου. Αποτελείται από 9 ξεχωριστά τακάκια, όπου κάθε πληκτρολόγιο είναι μια σειρά από κουμπιά που αλλάζουν τη λογική τους κατάσταση ενώ χτυπιούνται. Λόγω της δομής του, υπάρχει η δυνατότητα κατασκευής του συγκεκριμένου κιτ τυμπάνου από οποιαδήποτε κουμπιά. Κάθε μαξιλαράκι τυμπάνου είναι συνδεδεμένο με την αντίσταση έλξης στην κύρια ηλεκτρονική πλακέτα, οπότε ενώ το μαξιλάρι τυμπάνου χτυπάται επανειλημμένα, ένας συγκεκριμένος διακόπτης είναι δεμένος στη γείωση του κυκλώματος και υπάρχει λογικό LOW στη γραμμή του ταμπόν. Όταν δεν ασκείται πίεση, ο διακόπτης του ταμπόν είναι ανοιχτός και λόγω της αντίστασης έλξης προς τη γραμμή τροφοδοσίας, υπάρχει λογικό HIGH στη γραμμή του ταμπόν. Επειδή ο σκοπός του έργου είναι η δημιουργία μιας πλήρους ψηφιακής συσκευής MIDI, όλα τα αναλογικά μέρη του κύριου PCB μπορούν να αγνοηθούν. Είναι σημαντικό να σημειωθεί, ότι το κιτ τυμπάνου έχει δύο πεντάλ για κλωτσιά και τύμπανο, τα οποία είναι επίσης δεμένα με τις αντιστάσεις έλξης και έχουν την ίδια λογική λειτουργίας με όλα τα τακάκια (θα το συζητήσουμε λίγο αργότερα).

Arduino Pro-Micro

Ο εγκέφαλος του κιτ τυμπάνων. Σκοπός του είναι να ανιχνεύσει εάν υπάρχει σήμα που βγαίνει από ένα τύμπανο και να παρέχει την κατάλληλη έξοδο MIDI με όλες τις απαραίτητες παραμέτρους: Σημείωση, ταχύτητα και διάρκεια του σήματος. Λόγω της ψηφιακής φύσης των ταμπόν, μπορούν απλά να συνδεθούν με ψηφιακές εισόδους arduino (συνολικά 10 ακίδες). Προκειμένου να αποθηκεύσουμε όλες τις επιθυμητές ρυθμίσεις και πληροφορίες MIDI, θα χρησιμοποιήσουμε τη μνήμη της-EEPROM, επομένως κάθε φορά που ενεργοποιούμε τη συσκευή, οι πληροφορίες MIDI φορτώνονται από την EEPROM, καθιστώντας την επαναπρογραμματιζόμενη και επαναδιαμορφώσιμη. Επίσης, το Arduino Pro-Micro διατίθεται σε πολύ μικρή συσκευασία και μπορεί να τοποθετηθεί εύκολα στην εσωτερική θήκη του κιτ τυμπάνου.

Μετατροπέας USB σε σειριακό FTDI

Προκειμένου να προγραμματίσουμε και να καθορίσουμε τις δυνατότητες της συσκευής μας με τη βοήθεια υπολογιστή, πρέπει να μετατρέψουμε τη διεπαφή USB σε σειριακή, επειδή το Arduino Pro-Micro δεν διαθέτει USB. Δεδομένου ότι η επικοινωνία μεταξύ των συσκευών βασίζεται στο UART, η συσκευή FTDI χρησιμοποιείται σε αυτό το έργο, λόγω της απλότητας χρήσης της, ανεξάρτητα από τις πρόσθετες ιδιότητές της.

Εφαρμογή υπολογιστή - Python

Όσον αφορά την ανάπτυξη διεπαφών χρήστη και έργων γρήγορης κατασκευής, η Python είναι μια θαυμάσια λύση. Ο σκοπός της εφαρμογής UI είναι να καταστήσει πολύ πιο βολικό τον επαναπροσδιορισμό των ιδιοτήτων MIDI για το κιτ τυμπάνου μας, την αποθήκευση πληροφοριών, τη συσκευή προγράμματος και την επικοινωνία μεταξύ των συστημάτων χωρίς να χρειάζεται να καταρτίζουμε τον κώδικα ξανά και ξανά. Επειδή χρησιμοποιούμε σειριακή διεπαφή για να επικοινωνούμε με το κιτ τυμπάνων, υπάρχουν πολλές δωρεάν ενότητες σε όλο το Διαδίκτυο που υποστηρίζουν κάθε είδους σειριακή επικοινωνία. Επιπλέον, όπως θα συζητηθεί αργότερα, η διεπαφή UART αποτελείται από τρεις συνολικά ακίδες: RXD, TXD και DTR. Το DTR χρησιμοποιείται για την επαναφορά της μονάδας Arduino, οπότε όταν μας ενδιαφέρει να τρέξουμε την εφαρμογή MIDI ή να συνδέσουμε το UI στη συσκευή προγράμματος, δεν υπάρχει καμία απολύτως ανάγκη να επανασυνδέσουμε το καλώδιο USB ή οτιδήποτε άλλο.

Βήμα 2: Μέρη και όργανα

Ανταλλακτικά

  • Roll-Up Drum Kit
  • 2 x Sustain Pedals (Συνήθως, περιλαμβάνονται στη συσκευασία DK).
  • FTDI - Μετατροπέας USB σε σειριακό
  • Arduino Pro Micro
  • Καλώδιο Micro-USB

Οργανα

  • Συγκολλητικό σίδερο/σταθμός
  • Κασσίτερος συγκολλήσεως
  • Μονόκλωνο σύρμα λεπτής διαμέτρου
  • Τσιμπιδακι ΦΡΥΔΙΩΝ
  • Κόπτης
  • Πένσα
  • Μαχαίρι
  • Κατσαβίδι
  • 3D εκτυπωτής (προαιρετικός - για προσαρμοσμένες πλατφόρμες πεντάλ)

Λογισμικό

  • Arduino IDE
  • Python 3 ή Higher
  • JetBrains Pycharm
  • Άτριχη διεπαφή MIDI
  • βρόχος MIDI

Βήμα 3: Συγκόλληση και συναρμολόγηση

Συγκόλληση και συναρμολόγηση
Συγκόλληση και συναρμολόγηση
Συγκόλληση και συναρμολόγηση
Συγκόλληση και συναρμολόγηση
Συγκόλληση και συναρμολόγηση
Συγκόλληση και συναρμολόγηση

Δεδομένου ότι υπάρχουν τρεις ενότητες που πρέπει να συνδυαστούν, η διαδικασία συγκόλλησης και συναρμολόγησης είναι σύντομη και απλή:

  • Συνδέστε μαζί το Arduino Pro-Micro με τη συσκευή FTDI, βεβαιωθείτε ότι οι συνδέσεις συμμορφώνονται με τις εισόδους/εξόδους που ορίζονται σε κάθε συσκευή:

    • VBUS-VBUS
    • GND-GND
    • DTR-DTR
    • RXD-TXD
    • TXD-RXD
  • Αφαιρέστε όλες τις βίδες από το πλαστικό περίβλημα του τυμπάνου, βεβαιωθείτε ότι μπορείτε να επικεντρωθείτε στο καλώδιο από το ταμπόν προς την πλακέτα και τις αντιστάσεις έλξης του
  • Συγκολλήστε λεπτά σύρματα για τη μονάδα Arduino-FTDI που έχουμε κατασκευάσει προηγουμένως:

    • Digitalηφιακές εισόδους: D [2:11]
    • VBUS
    • D+
    • ΡΕ-
    • GND
  • Τοποθετήστε τη μονάδα μέσα στη θήκη της μπαταρίας, έτσι ώστε τα καλώδια να επιπλέουν στην ίδια πλευρά με τις αντιστάσεις έλξης των μαξιλαριών
  • Συγκολλήστε όλες τις ψηφιακές εισόδους στους ακροδέκτες του τύμπανου όπως φαίνεται στο τελευταίο σχήμα.
  • Συγκολλήστε το δίαυλο micro-USB (VBUS, D+, D-, GND) στη συσκευή FTDI, βεβαιωθείτε ότι δεν υπάρχουν λάθη κατά την ανίχνευση αυτών των καλωδίων.
  • Συνδέστε τη μονάδα Arduino-FTDI με ζεστή κόλλα στη θήκη της μπαταρίας
  • Συναρμολογήστε τη συσκευή με το κατάλληλο εξάρτημα βιδών

Το έχουμε κάνει, η συσκευή είναι συναρμολογημένη. Ας συνεχίσουμε στον κώδικα…

Βήμα 4: Προγραμματισμός A: Arduino

Προγραμματισμός Α: Arduino
Προγραμματισμός Α: Arduino

Ας Περιγράψουμε το σκίτσο μας βήμα προς βήμα:

Πρώτα απ 'όλα, πρέπει να συμπεριληφθούν δύο απαραίτητες βιβλιοθήκες για τη σωστή λειτουργία. Το EEPROM είναι ήδη προεγκατεστημένο στο Arduino IDE, αλλά το module του debouncer για kick drum πρέπει να εγκατασταθεί ξεχωριστά

#συμπεριλάβω #συμπεριλάβω

Αυτοί οι διακόπτες χρησιμοποιούνται κυρίως σε ακολουθίες εντοπισμού σφαλμάτων. Εάν θέλετε να δοκιμάσετε τη σύνδεση των τερματικών Arduino με τα ταμπόν και να καθορίσετε όλες τις ψηφιακές εισόδους, αυτοί οι διακόπτες πρέπει να οριστούν

/ * Διακόπτες προγραμματιστή: Απομάκρυνση της επιθυμητής λειτουργίας για εντοπισμό σφαλμάτων ή αρχικοποίηση * ///#ορίστε LOAD_DEFAULT_VALUES // Φορτώστε σταθερές τιμές αντί για EEPROM //#define PRINT_PADS_PIN_NUMBERS // Εκτυπώστε τον αριθμό pin που είναι συνδεδεμένος σε ένα pad που χτυπήθηκε μέσω σειριακής θύρας

Τα σταθερά πεδία αντιπροσωπεύουν όλες τις προεπιλεγμένες τιμές, συμπεριλαμβανομένης της απαρίθμησης του τυμπάνου. Για να τρέξετε τη συσκευή για πρώτη φορά, πρέπει να γνωρίζετε την ακριβή σύνδεση των πεντάλ Hi-Hat και Kick

/ * Απαρίθμηση τύπου τυμπάνου */

enum 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};

/ * Kick drum debounce duration */

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 για τη συλλογή και αποθήκευση κλωτσήματος MIDI Debouncer (DRUM_PINS [KICK], KICK_DB_DURATION). // Αντικείμενο Debouncer for kick drum volatile bool previousState [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // Προηγούμενες λογικές καταστάσεις τυμπάνου πτητικό bool currentState [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // Τρέχουσες καταστάσεις λογικής καταστρώματος

Λειτουργίες EEPROM

/* Αποθηκεύστε τις ρυθμίσεις στο EEPROM*/

void storeEEPROM () {

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*/

void loadEEPROM () {for (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 ενεργοποιούνται ταυτόχρονα

void enterProgrammingMode () {

bool confirmBreak = false; uint8_t lineCnt = 0; uint8_t charCnt = 0; char readChar = 0; while (! confirmBreak) {if (Serial.available ()) {uartBuffer [charCnt] = Serial.read (); if (charCnt> = 29) confirmBreak = true; else charCnt ++; }} Serial.println ("OK"); storeEEPROM (); }

void initValues () {

#ifdef LOAD_DEFAULT_VALUES memcpy (drumNotes, DRUM_NOTES, 10); memcpy (drumVelocities, DRUM_VELOCITIES, 10); memcpy (drumPins, DRUM_PINS, 10); #else loadEEPROM (); #τέλος εαν }

Χειριστές MIDI Communication με καθυστέρηση 1ms χρόνο παραμονής σημειώσεων

/ * Λειτουργία σημείωσης MIDI */

void midiOut (enum 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 μετάδοση noteOn (0x90, drumNotes [drumIn], drumVelocities [drumIn]); καθυστέρηση (1)? noteOn (0x90, drumNotes [drumIn], 0); }}

void noteOn (int cmd, int pitch, int velocity) {Serial.write (cmd); Serial.write (βήμα); Serial.write (ταχύτητα); }

Οι λειτουργίες εγκατάστασης () και βρόχου () με άπειρο βρόχο λειτουργίας συσκευής:

void setup () {

Serial.begin (115200);

για (uint8_t i = 0; i <10; i ++) {pinMode (i+2, INPUT); } #ifdef PRINT_PADS_PIN_NUMBERS ενώ (αληθές) {// Άπειρος βρόχος εντοπισμού σφαλμάτων για (uint8_t i = 0; i <10; i ++) {if (! digitalRead (i+2)) {Serial.print ("Pin No: D") ? Serial.print (i + '0'); // Μετατροπή αριθμού σε χαρακτήρα ASCII}}} #else initValues (); / * Λειτουργία προγραμματισμού: Εάν πατήσετε δύο πεντάλ κατά την εκκίνηση - η λειτουργία είναι ενεργοποιημένη */ εάν (! DigitalRead (drumPins [KICK]) &&! DigitalRead (drumPins [HIHAT_PEDAL])) enterProgrammingMode (); #τέλος εαν }

void loop () {for (uint8_t i = 1; i <9; i = i + 1) {currentState = digitalRead (drumPins ); εάν (! currentState && previousState ) midiOut (i); // Συγκρίνετε καταστάσεις και εντοπίστε πτώση άκρου previousState = currentState ; } kick.update (); // Το Kick drum χρησιμοποιεί προσαρμοσμένο αλγόριθμο απόσβεσης εάν (kick.edge ()) if (kick.falling ()) midiOut (KICK); }

Βήμα 5: Προγραμματισμός Β: Python & User Interface

Προγραμματισμός Β: Python & User Interface
Προγραμματισμός Β: Python & User Interface
Προγραμματισμός Β: Python & User Interface
Προγραμματισμός Β: Python & User Interface
Προγραμματισμός Β: Python & User Interface
Προγραμματισμός Β: Python & User Interface

Το περιβάλλον εργασίας χρήστη Python είναι λίγο περίπλοκο για να το καταλάβετε με την πρώτη ματιά, επομένως θα προσπαθήσουμε να εξηγήσουμε τα βασικά του, πώς να χρησιμοποιήσετε, ποια λειτουργία έχει κάθε κουμπί και πώς να προγραμματίσετε σωστά τη συσκευή Arduino.

Διεπαφή χρήστη - Εφαρμογή

Το UI είναι μια γραφική αναπαράσταση για τον προγραμματιστή μας, που το καθιστά πολύ εύκολο στη χρήση και βολικό για τον προγραμματισμό της συσκευής Arduino ανά πάσα στιγμή. Το UI αποτελείται από πολλές γραφικές ενότητες που συνδέονται με την προτεινόμενη λειτουργία τους. ας τα αναθεωρήσουμε ένα προς ένα:

  1. Drum Set Image: Το Python UI χρησιμοποιεί συντεταγμένες εικόνας X-Y για να καθορίσει ποιος τύπος τυμπάνου έχει επιλεγεί. Εάν έχει επιλεγεί έγκυρη περιοχή τυμπάνου, εμφανίζεται το δευτερεύον μήνυμα IO, με πεδία σημείωσης, ταχύτητας και τερματικό Arduino για αποκλειστικό τύμπανο. Αφού επαληθευτούν αυτές οι παράμετροι από τον χρήστη και εγκριθούν, αυτές οι τιμές μπορούν να μεταδοθούν απευθείας στη συσκευή Arduino.
  2. Εικόνα εξωτερικού ελεγκτή: Για να μπορέσετε να χρησιμοποιήσετε MIDI drum kit με περιβάλλον δημιουργίας VST/Music, πρέπει να εκτελέσετε διερμηνέα Serial-To-MIDI. Έχω χρησιμοποιήσει το Hairless, το οποίο διατίθεται δωρεάν και μπορεί να τρέξει απευθείας από το περιβάλλον χρήστη μας, απλά πατώντας την εικόνα του.
  3. Λίστα θυρών COM: Για να επικοινωνήσετε με το Arduino, πρέπει να καθορίσετε τη συνημμένη θύρα COM. Η λίστα ανανεώνεται πατώντας το κουμπί Ανανέωση.
  4. Φόρτωση/Αποθήκευση διαμόρφωσης: Υπάρχουν προεπιλεγμένες τιμές MIDI που ορίζονται στον κώδικα, οι οποίες μπορούν να τροποποιηθούν από τον χρήστη μέσω αλληλεπίδρασης με το περιβάλλον χρήστη. Η διαμόρφωση ορίζεται στο αρχείο config.txt σε συγκεκριμένη μορφή, η οποία μπορεί να αποθηκευτεί ή να φορτωθεί από τον χρήστη.
  5. Κουμπί συσκευής προγράμματος: Για να αποθηκεύσετε όλες τις τροποποιημένες τιμές MIDI στο Arduino EEPROM, πρέπει να πατήσετε δύο πεντάλ (Kick drum και Hi-hat pedal) μετά από αυτό, περιμένετε να ολοκληρωθεί η μετάδοση δεδομένων. Εάν υπήρχαν προβλήματα επικοινωνίας, θα εμφανιστεί το κατάλληλο αναδυόμενο παράθυρο. Εάν η μετάδοση πετύχει, η διεπαφή χρήστη θα εμφανίσει το επιτυχημένο της μήνυμα.
  6. Κουμπί εξόδου: Απλώς βγείτε από την εφαρμογή, με την άδεια του χρήστη.

Χαρακτηριστικά Python Code

Υπάρχουν πολλά πράγματα που συμβαίνουν στον κώδικα, οπότε θα επεκταθούμε στις γραπτές συναρτήσεις και όχι σε ολόκληρο τον κώδικα.

Πρώτα απ 'όλα, για να χρησιμοποιήσετε τη διεπαφή χρήστη, πρέπει να κάνετε λήψη αρκετών μονάδων, για να λειτουργήσει ο κώδικας:

εισαγωγή osimport threading εισαγωγή tkinter ως tk από tkinter εισαγωγή μηνυμάτων από tkinter import * από εισαγωγή PIL ImageTk, εισαγωγή εικόνας numpy ως np εισαγωγή σειριακής εισαγωγής glob

Ορισμένες ενότητες περιλαμβάνονται στο προεπιλεγμένο πακέτο Python. Πολλές μονάδες πρέπει να εγκατασταθούν μέσω του εργαλείου PIP:

pip εγκατάσταση Pillow

pip install numpy pip install ScreenInfo

Συνιστάται ιδιαίτερα η εκτέλεση της εφαρμογής μέσω PyCharm. Στις μελλοντικές εκδόσεις, σχεδιάζω να εξάγω ένα εκτελέσιμο για το έργο.

Σύντομος κώδικας επεξήγηση

Θα είναι πολύ πιο εύκολο να κατανοήσουμε τον κώδικα αν εξετάσουμε τις γραμμές του από την οπτική γωνία συναρτήσεων και κλάσεων:

1. Η κύρια λειτουργία - εδώ ξεκινά ο κωδικός

αν _name_ == '_main_': drumkit_gui ()

2. Σταθερές, συντεταγμένες και προεπιλεγμένες πληροφορίες MIDI του Drum Kit

κατηγορία Τύμπανα: DRUM_TYPES = ["Kick", "Hihat", "Snare", "Crash 1", "Crash 2", "Tom High", "Tom Mid", "Tom Low", "Ride", "Hihat Pedal "," Controller "]

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. Λειτουργίες UI - Χειρισμός διεπαφής χρήστη και γραφικών αντικειμένων

def set_active (ui)

def Second_ui (τύπος drum_)

κλάση SelectionUi (tk. Frame)

Εφαρμογή κλάσης (tk. Frame)

def drumkit_gui ()

def event_ui_clicked (event)

def getorigin (εαυτός, εκδήλωση)

4. Σειριακή επικοινωνία

def get_serial_ports ()

def commun_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.

Και.. Εδώ τελειώσαμε!:)

Ελπίζω να βρείτε αυτό το διδακτικό χρήσιμο.

Ευχαριστώ για την ανάγνωση!:)

Συνιστάται: