Hallo,
op school voer ik met een paar andere leerlingen (vwo5) een project uit waarbij we gebruik maken van arduino.
We gaan namelijk een les voorbereiden en uitvoeren bij een basisschool. Deze les zal gaan over muziek en geluid. Omdat het ons leuk leek om de kinderen zelf instrumenten te laten maken, hebben we ervoor gekozen om dit idee na te bouwen http://musicink.co/
Kinderen kunnen met een speciale geleidende verf instrumenten verven, en zodra dit wordt aangesloten op de arduino, hoor je muziek.
Het is mij al gelukt om een arduino Uno R3 als een midi-apparaat te laten verschijnen en een output te creëren, alleen de code klopt nog niet helemaal.
we werken ook met touch capacitieve sensors, wat lijkt op dit: Paper piano with arduino - YouTube
De situatie is als volgt:
als je op een touchcapacitieve sensor drukt, wordt er een bijbehoorde midi noot met velocity (luidheid) naar de pc gestuurd.
er is een delay van 0,5s
vervolgens wordt de midi noot weer uitgezet doordat de arduino een velocity van 0 uitzendt.
in de code ziet dat er zo uit.
#include <CapacitiveSensor.h>
CapacitiveSensor cs_2_3 = CapacitiveSensor(2,3);
CapacitiveSensor cs_2_4 = CapacitiveSensor(2,4);
int velocity = 100;//velocity of MIDI notes, must be between 0 and 127
//(higher velocity usually makes MIDI instruments louder)
int noteON = 144;//144 = 10010000 in binary, note on command
void setup() {
// Set MIDI baud rate:
Serial.begin(31250);
}
void loop() {
long total1 = cs_2_3.capacitiveSensor(30);
long total2 = cs_2_4.capacitiveSensor(30);
if (total1 > 500) {
for (int note=48;note<49;note++) {//from note 50 (D3) to note 69 (A4)
MIDImessage(noteON, note, velocity);//turn note on
delay(500);
MIDImessage(noteON, note, 0);}}//turn note off
if (total2 > 500) {
for (int note=49;note<50;note++) {//from note 50 (D3) to note 69 (A4)
MIDImessage(noteON, note, velocity);//turn note on
delay(500);//hold note for 300ms
MIDImessage(noteON, note, 0);}}//turn note off
}
//send MIDI message
void MIDImessage(int command, int MIDInote, int MIDIvelocity) {
Serial.write(command);//send note on or note off command
Serial.write(MIDInote);//send pitch data
Serial.write(MIDIvelocity);//send velocity data
}
bij deze situatie, de de lengte van noot dus afhankelijk van de delay. Maar we willen eigenlijk een situatie creëren waarin de lengte van de noot samenhangt met de tijd dat iemand de touchcapacitieve sensor indrukt/vasthoudt. En dat het eventueel mogelijk is om meerdere noten tegelijk aan te verzenden naar de pc.
weet iemand of dit mogelijk is of wat ik moet veranderen aan de code om dit te laten werken?
met vriendelijke groet, Bas van Straaten