XY MIDI-Pad med Arduino och TFT (6 / 7 steg)
Steg 6: XY MIDI-Pad
Om du kör sista exempel har märkt kör de ganska långsamt. Det är inget fel med TFT display och också det finns inget fel med koden eller bibliotek. Detta beror på att vi försöker använda en 8-bitars mikrokontroller på 16MHz (eller 20MHz). I själva verket denna display kan köra mycket snabbare än vi kan skicka data (med vår processor).
I själva verket skulle vi kunna göra vissa förbättringar av koden och bibliotek, men ändringar kommer inte att vara dramatisk. Helst vi behöver mer kraftfull processor, 32 bit (även 16 bit), DMA-styrenheten, > 150 Mhz, mer RAM-minne (för video buffert) osv...
Istället kan vi designa våra program för att Uppdatera bara ett litet område av skärmen när vi behöver hastighet.
Jag lägger hela koden för Arduino projekt XY Pad MIDI här (bifogas detta steg, MIDIPad.zip). Kan studeras i detalj för att se hur jag tillämpas vad jag sa ovan. Men jag kommer att kommentera vissa delar.
I funktionen draw_Pad (lång x, långa y), innan nya linjer, Rensa gamla linjer Rita dem med bakgrundsfärg.
void draw_Pad (lång x, långa y) < br > {
Vi drar 3 tre rader för x och tre rader för y
för bättre synlighet
myGLCD.setColor(pad_bk);
myGLCD.drawLine(old_x-1,pad_topY,old_x-1,pad_bottomY); Rensa gamla linje x-1
myGLCD.drawLine(old_x+1,pad_topY,old_x+1,pad_bottomY); tydlig gamla linje x + 1
myGLCD.drawLine(old_x,pad_topY,old_x,pad_bottomY); tydlig gamla linje x
myGLCD.drawLine(pad_topX,old_y-1,pad_bottomY,old_y-1); Rensa gamla linje y-1
myGLCD.drawLine(pad_topX,old_y+1,pad_bottomY,old_y+1); Rensa gamla linjen y + 1
myGLCD.drawLine(pad_topX,old_y,pad_bottomY,old_y); tydlig gamla linjen y
myGLCD.setColor(reticle_color);
myGLCD.drawLine(x-1,pad_topY,x-1,pad_bottomY); dra nya linje x-1
myGLCD.drawLine(x+1,pad_topY,x+1,pad_bottomY); dra nya linje x + 1
myGLCD.drawLine(x,pad_topY,x,pad_bottomY); dra nya linje x
myGLCD.drawLine(pad_topX,y-1,pad_bottomX,y-1); dra nya line1 y-1
myGLCD.drawLine(pad_topX,y+1,pad_bottomX,y+1); dra nya rad2 y + 1
myGLCD.drawLine(pad_topX,y,pad_bottomX,y); dra nya rad3 y
}
Jag har inte använt välkända Arduino MIDI-biblioteket (som min tidigare projekt). Istället använder jag en enkel funktion för att skicka MIDI CC kommandon:
void SendMIDIControl (byte kanal, byte styrenhet, bytevärde) {
byte tmpChannel = (kanal & 0b00001111) -1; 0 = channel1... 1 = channel2... etc
tmpChannel = 0b10110000 + tmpChannel; MIDI-data först lite allways 1,
+ 011 kontroll ändra kommando
+ MIDI-kanal
byte tmpController = controller & 0b01111111; MIDI-data först lite alltid 0
byte tmpValue = värde & 0b01111111; MIDI-data först lite alltid 0
Serial1.write(tmpChannel);
Serial1.write(tmpController);
Serial1.write(tmpValue);
}
För att skicka MIDI-kommandon till PC via USB använde jag en modul som jag gjort tidigare. För detaljer se mitt projekt här:
Viktigt!:
Vi kan inte använda den första seriella porten stift eftersom dess stift används redan av TFT sköld.
- Vi måste använda SoftwareSerialför Arduino UNO .
- För Arduino MEGA kan vi använda SoftwareSerial eller Serial1 / Serial2 (jag testade med SoftwareSerial och Serial1)
Min Arduino USB Midi Interface modul kan vara replaced(theoretical) med en kombination av MIDI sköld och USB till MIDI-omvandlare. Jag har inte testat detta sätt (jag inte har heller).