Étape 6: XY MIDI Pad
Si vous exécutez derniers exemples avez remarqué leur exécution est assez lente. Il n’y a rien de mal avec le TFT écran et aussi il n’y a rien de mal avec le code ou bibliothèques. C’est parce que nous essayons d’utiliser un microcontrôleur 8 bits à 16MHz (ou 20MHz). En fait cet affichage peut courir beaucoup plus vite que nous pouvons envoyer des données (avec notre processeur).
En effet, nous pourrions faire des améliorations dans le code et les bibliothèques, mais les changements ne seront pas dramatiques. Idéalement, il faut un processeur plus puissant, de 32 bits (même 16 bits), de contrôleur DMA, > 150 Mhz, plus de RAM (pour le tampon vidéo) etc....
Au lieu de cela, nous pouvons concevoir nos programmes à mettre à jour qu’une petite zone de l’écran quand nous avons besoin de vitesse.
J’ai mis l’ensemble du code pour le projet Arduino XY Pad MIDI ici (attaché à cette étape, MIDIPad.zip). Peuvent être étudiés en détail pour voir comment j’ai appliqué ce que j’ai dit plus haut. Cependant, je vais commenter certaines sections.
Dans la fonction draw_Pad (x, y long), avant de tirer de nouvelles lignes, effacer les vieilles lignes de redessiner avec la couleur d’arrière-plan.
void draw_Pad(long x, long y)<br>{ // we draw 3 three lines for x and three lines for y // for better visibility myGLCD.setColor(pad_bk); myGLCD.drawLine(old_x-1,pad_topY,old_x-1,pad_bottomY); // clear old line x-1 myGLCD.drawLine(old_x+1,pad_topY,old_x+1,pad_bottomY); // clear old line x+1 myGLCD.drawLine(old_x,pad_topY,old_x,pad_bottomY); // clear old line x myGLCD.drawLine(pad_topX,old_y-1,pad_bottomY,old_y-1); // clear old line y-1 myGLCD.drawLine(pad_topX,old_y+1,pad_bottomY,old_y+1); // clear old line y+1 myGLCD.drawLine(pad_topX,old_y,pad_bottomY,old_y); // clear old line y myGLCD.setColor(reticle_color); myGLCD.drawLine(x-1,pad_topY,x-1,pad_bottomY); // draw new line x-1 myGLCD.drawLine(x+1,pad_topY,x+1,pad_bottomY); // draw new line x+1 myGLCD.drawLine(x,pad_topY,x,pad_bottomY); // draw new line x myGLCD.drawLine(pad_topX,y-1,pad_bottomX,y-1); // draw new line1 y-1 myGLCD.drawLine(pad_topX,y+1,pad_bottomX,y+1); // draw new line2 y+1 myGLCD.drawLine(pad_topX,y,pad_bottomX,y); // draw new line3 y }
Je n’ai pas utilisé la bibliothèque Arduino MIDI bien connue (comme mon précédent projet). Au lieu de cela, j’utilise une fonction simple d’Envoyer des commandes MIDI CC:
void SendMIDIControl(byte channel, byte controller, byte value) { byte tmpChannel = (channel & 0b00001111)-1; //0= channel1...1=channel2... etc tmpChannel = 0b10110000 + tmpChannel; //midi data first bit allways 1, //+ 011 control change command //+ midi channel byte tmpController = controller & 0b01111111; //midi data first bit allways 0 byte tmpValue = value & 0b01111111; //midi data first bit allways 0 Serial1.write(tmpChannel); Serial1.write(tmpController); Serial1.write(tmpValue); }
Pour l’envoi des commandes MIDI au PC via USB, j’ai utilisé un module que j’ai fait précédemment. Pour plus de détails voir mon projet ici :
Important! :
Nous ne pouvons pas utiliser le premier port série épingle parce que ses tiges sont déjà utilisés par écran TFT.
- Pour Arduino UNO , nous devons utiliser SoftwareSerial.
- Arduino Mega, nous pouvons utiliser SoftwareSerial ou Serial1 / Serial2 (j’ai testé avec SoftwareSerial et Serial1)
Mon module Arduino USB Midi Interface peut être replaced(theoretical) avec une combinaison de Bouclier MIDI et USB To MIDI converter. Je n’ai pas testé cette façon (je n’ai pas ni).