Beröring-känslig musikaliska målning (7 / 9 steg)
Steg 7: Programmera din styrelse
Följande kod kan du programmera ditt Teensy styrelse att skicka MIDI till din dator. Du kan också hämta koden på GitHub.
int bounceThreshold = 0; en press måste senaste här många loop cykler (ca 20ms varje) före utlösning.
högre värden göra det mindre känslig, färre falska triggers, högre latency
#define NUM_INPUTS 44
int kanal = 1;
Redigera denna matris för att ändra MIDI-noter skickas
int platser [NUM_INPUTS] = {
79, 84, 75, 67, 65, 63, / / topp av styrelsen (upp, vänster, ner, höger, utrymme, klicka)
60, 62, 77, 68, 58, 56, / / vänster sidan av kvinnliga sidhuvud, w, a, s, d, f, g
51, 53, 48, 55, 72, 74 / / höger sida av kvinnliga sidhuvud, upp, ner, vänster, höger, vänster-klicka, högerklicka
//};
teensy makey pin-koder
int pinNumbers [NUM_INPUTS] = {
0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17, / / vänster sida börjar på USB-kontakten, pin D0, hoppa över D6
26,25,24,23,22,21,20,19,18,38,39,40,41,42,43,44,45, / / höger sida börjar på USB-kontakten är stift B6, hoppa över gnd och aref
36,37,32,33,34,35,28,29,30,31 / / detta är "interiör" genomgående hål, i mitten av styrelsen
};
Cap känsla tröskelvärden för varje stift
denna är proportionerlig till kapacitans på PIN-koden som kommer att räknas som en press
Det är enheter av en mycket liten enhet tid, i iterationer genom en upprullad loop
högre värden göra det mindre känsliga (dvs. kräva större kapacitans)
int capThresholds [NUM_INPUTS] = {
1, 1, 1, 1, 1, 2,
2, 2, 1, 1, 1, 1,
2, 1, 1, 1, 1, 1,
//};
int bounceCounter [NUM_INPUTS];
Boolean pressade [NUM_INPUTS],
void setup() {
för (int jag = 0; jag
void loop() {
för (int jag = 0; i1) {/ / om vi upptäcker en touch på stiftet
om (! pressed[i]) {/ / och om vi inte redan är tryckt
bounceCounter [i] ++; ökar värdet för räknaren bounce
om (bounceCounter [i] > bounceThreshold) {/ / om vi är över tröskeln bounce
usbMIDI.sendNoteOn(60+i,127,channel); Skicka en MIDI-not
tryckte [i] = true; kom ihåg det trycktes
bounceCounter [i] = 0; Återställ räknaren bounce
}
}
}
annat {/ / om vi inte gör en identifiera touch på stiftet
om (pressed[i]) {/ / om knapptryckningen innan
usbMIDI.sendNoteOff(60+i,127,channel); Skicka en MIDI-not
tryckte [i] = false; minns vi inte trycker
bounceCounter [i] = 0; Återställ räknaren bounce
}
}
}
Serial.println("");
}
CapacitiveSensor handledning från http://www.arduino.cc/playground/Code/CapacitiveS...
readCapacitivePin
Ingång: Arduino pin-kod
Utgång: Flera, från 0 till 17 uttrycker
Hur mycket kapacitans är på stiftet
När du rör den PIN-kod, eller vad du har
fäst vid den, kommer att hur många få högre
uint8_t readCapacitivePin (int pinToMeasure) {
Variabler som används för att översätta från Arduino att AVR pin namngivning
flyktiga uint8_t * hamn.
flyktiga uint8_t * ddr;
flyktiga uint8_t * pin;
Här översätter vi ingångsstift numret från
Arduino pin-kod till AVR PORT, PIN, DDR,
och vilken bit av dessa register vi bryr oss om.
bitmask som byte;
Port = portOutputRegister(digitalPinToPort(pinToMeasure));
DDR = portModeRegister(digitalPinToPort(pinToMeasure));
bitmask = digitalPinToBitMask(pinToMeasure);
PIN-kod = portInputRegister(digitalPinToPort(pinToMeasure));
Ansvarsfrihet stiftet först genom att ange det låga och utdata
* port & = ~ (bitmask);
* ddr | = bitmask;
Delay(1);
Gör stiftet indata med inre pull-up på
* ddr & = ~ (bitmask);
* port | = bitmask;
Nu se hur länge den PIN-kod får dras. Denna manuella slangen av slingan
minskar antalet hårdvara cykler mellan varje läsning av klämma fast,
vilket ökar känsligheten.
uint8_t cykler = 17;
om (* pin & bitmask) {
cykler = 0;
}
annars om (* pin & bitmask) {
cykler = 1;
}
annars om (* pin & bitmask) {
cykler = 2;
}
annars om (* pin & bitmask) {
cykler = 3;
}
annars om (* pin & bitmask) {
cykler = 4;
}
annars om (* pin & bitmask) {
cykler = 5;
}
annars om (* pin & bitmask) {
cykler = 6;
}
annars om (* pin & bitmask) {
cykler = 7.
}
annars om (* pin & bitmask) {
cykler = 8.
}
annars om (* pin & bitmask) {
cykler = 9.
}
annars om (* pin & bitmask) {
cykler = 10;
}
annars om (* pin & bitmask) {
cykler = 11;
}
annars om (* pin & bitmask) {
cykler = 12.
}
annars om (* pin & bitmask) {
cykler = 13.
}
annars om (* pin & bitmask) {
cykler = 14.
}
annars om (* pin & bitmask) {
cykler = 15.
}
annars om (* pin & bitmask) {
cykler = 16.
}
Ansvarsfrihet PIN-koden igen genom att ange det låga och utdata
Det är viktigt att lämna stiften låg om du vill
att kunna röra mer än 1 sensor på en gång - om
sensorn är kvar drog hög, när du rör
två sensorer, din kropp kommer att överföra laddningen mellan
sensorer.
* port & = ~ (bitmask);
* ddr | = bitmask;
returnera cykler;
}