Arduino, sensorer och MIDI- (13 / 16 steg)
Steg 13: Arduino och pekskärm
Om du är intresserad av touch-gränssnitt, det är en relativt billig ($8 + $4 connector) Resistiv pekskärm eller (dyrare) styrplattan från Adafruit som mäter x och y position och tryck så att du kan göra projekt som detta:
Pekskärmen ansluts till Arduino med fyra stift märkta X + X-, Y + och Y-; pin-anslutningar anges i koden nedan. Jag använde Adafruit's touch skärmen bibliotek gränssnittet på skärmen (här är hur du lägger till ett bibliotek för Arduino). Här är en enkel skiss att komma igång:
#include < stdint.h >
#include "TouchScreen.h"
int YPlus = A0; måste vara en analog stift
int XMinus = A1; måste vara en analog stift
int YMinus = 8; kan vara en digital pin
int XPlus = 9; kan vara en digital pin
För bättre tryck precision behöver vi veta motståndet
mellan X + och X-, använda en multimeter för att läsa den
För det jag använder, är det 654 ohm
TouchScreen ts = pekskärm (XPlus, YPlus, XMinus, YMinus, 654);
void setup(void) {
Serial.BEGIN(9600);
}
void loop(void) {
ett point-objekt håller x y och z koordinater
Peka p = ts.getPoint (); //get data från skärmen
om (p.z > ts.pressureThreshhold) {//if trycket är över en viss tröskel
Serial.Print ("X ="); Serial.Print(p.x);
Serial.Print ("Y ="); Serial.Print(p.y);
Serial.Print ("tryck ="); Serial.println(p.z);
}
Delay(100);
}
Här är en riktigt enkel MIDI genomförande av Kaossilator, kartläggning x möjlighet att observera och y-position till velocity:
#include < stdint.h >
#include "TouchScreen.h"
byte noteON = 144; //note på kommando
int YPlus = A0; måste vara en analog stift, använda "En" notation!
int XMinus = A1; måste vara en analog stift, använda "En" notation!
int YMinus = 8; kan vara en digital pin
int XPlus = 9; kan vara en digital pin
För bättre tryck precision behöver vi veta motståndet
mellan X + och X - använda någon multimeter att läsa den
För som använder vi, dess 654 ohm över X-plattan
TouchScreen ts = pekskärm (XPlus, YPlus, XMinus, YMinus, 654);
void setup(void) {
Serial.BEGIN(9600);
}
void loop(void) {
ett point-objekt håller x y och z koordinater
Peka p = ts.getPoint();
Vi har vissa minsta tryck som vi anser vara "giltigt"
Tryck på 0: ingen pressning!
om (p.z > ts.pressureThreshhold) {
byte Obs = karta (p.x, 0, 1023, 0, 127);
byte hastighet = karta (p.y, 0, 1023, 0, 127);
MIDImessage (noteON, Obs, velocity);
Delay(100);
MIDImessage (noteON, Obs, 0); //turn anmärkning av
}
}
skicka MIDI-meddelande
void MIDImessage (byte kommando, byte data1, byte data2) {
Serial.write(Command);
Serial.write(Data1);
Serial.write(data2);
}
Och här är en video: