MIDI-Arduino trummor (5 / 6 steg)
Steg 5: Ansluta med dator
Det är ganska mycket det. Allt har nu sammanställts och det enda steg kvar är att ansluta allt med datorn.
Det finns några möjliga sätt att ansluta. Efter lite forskning och försöker olika program hittade jag Ardrumo (Mac OS X bara) det enklaste att arbeta med. Helt enkelt ladda skissen till din Arduino och sedan öppna Ardrumo och Garageband.You kan välja olika trummor i Ardumo som ni kan se i videon i det första steget.
Men som sagt, detta är inte det enda möjliga sättet att ansluta. Det finns många andra sätt, till exempel använda nakenhundar som förklaras i detta Instructable. Bara leka lite och hitta en metod som passar dig bäst :)
Detta är koden för Ardrumo. Hämta Ardrumo genom att klicka här.
/*
* Ardrumo skiss
*
* Använda med den Ardrumo programvaran här:
* < en href = "http://code.google.com/p/ardrumo/" rel = "nofollow" >< en href = "http://code.google.com/p/ardrumo/" >< en href = "http://code.google.com/p/ardrumo/" >< en href = "http://code.google.com/p/ardrumo/" rel = "nofollow" >< en href = "http://code.google.com/p/ardrumo/" rel = "nofollow" > http://code.google.com/p/ardrumo/
< /a >
< /a >
< /a >
< /a >
< /a >
* Syftet är att låta en Arduino handling som en trummaskin
* i GarageBand (ledsen, Mac OS X bara).
*/
#define LEDPIN 13 / / status-LED stift
#define PIEZOTHRESHOLD 5 / / analoga tröskeln för piezo sensing
#define PADNUM 6 / / antal pads
int val;
void setup() {
pinMode (LEDPIN, OUTPUT);
Serial.BEGIN(57600); Ange serial output ränta
}
void loop() {
Loopa igenom varje piezo och skicka data
på den seriella produktionen om kraften överstiger
piezo tröskeln
för (int jag = 0; jag < PADNUM; i ++) {
Val = analogRead(i);
om (val > = PIEZOTHRESHOLD) {
digitalWrite(LEDPIN,HIGH); Visa vi skickar MIDI-data
Serial.Print(i);
Serial.Print(",");
Serial.Print(val);
Serial.println();
digitalWrite(LEDPIN,LOW);
}
}
}
Detta är koden för nakenhundar. Koden är från en Arduino xylofon Instructable.
Xylofon
Anpassad för en ArduinoMega
från Jenna deBoisblanc och Spiekenzie Labs ursprungliga koden
//*******************************************************************************************************************
Inställbar Användarvariabler
//*******************************************************************************************************************
int pinRead;
char pinAssignments [16] = {
"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", 'A8', "A9", "A10", "A11"};
byte PadNote [16] = {
57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72}. MIDI anteckningar från 0 till 127 (mitten av C = 60)
int PadCutOff [16] =
{
400,400,200,800,400,400,400,400,400,400,400,400,400,400,400,400}. Minsta analoga värde att orsaka en trumma hit
int MaxPlayTime [16] = {
90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90}. Cykler innan en 2: a hit tillåts
#define midichannel 1. MIDI-kanal från 0 till 15 (+ 1 i "verkliga världen")
booleska VelocityFlag = sant; Hastighet på (sant) eller inaktivera (falskt)
//*******************************************************************************************************************
Intern användning variabler
//*******************************************************************************************************************
booleska activePad [16] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}. Matris med flaggor av pad som spelar
int PinPlayTime [16] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}. Räknare sedan pad började att spela
byte status1;
int pin = 0;
int hitavg = 0;
//*******************************************************************************************************************
Setup
//*******************************************************************************************************************
void setup()
{
Serial.BEGIN(57600); SOM HÅRLÖSA TILL SAMMA BITHASTIGHET I INSTÄLLNINGARNA
}
//*******************************************************************************************************************
Huvudprogrammet
//*******************************************************************************************************************
void loop()
{
för (int pin = 0; pin < 16; pin ++) / /
{
int pin = 3;
för (pinRead = 0; pinRead < 16, pin ++) {
hitavg = analogRead(pinAssignments[pin]);
Serial.println(hitavg);
Läs ingångsstiftet
om ((hitavg > PadCutOff[pin]))
{
om ((activePad [pin] == false))
{
IF(VelocityFlag == true)
{
hitavg = 127 / ((1023 - PadCutOff[pin]) / (hitavg - PadCutOff[pin])); Med komplett utbud (Too känslig?)
hitavg = (hitavg / 8) -1; Övre rad
}
annat
{
hitavg = 127;
}
MIDI_TX(144,PadNote[PIN],hitavg); anteckning på
PinPlayTime [pin] = 0;
activePad [pin] = true;
}
annat
{
PinPlayTime [pin] = PinPlayTime [pin] + 1.
}
}
annars om ((activePad [pin] == true))
{
PinPlayTime [pin] = PinPlayTime [pin] + 1.
om (PinPlayTime [pin] > MaxPlayTime[pin])
{
activePad [pin] = false;
MIDI_TX(144,PadNote[PIN],0);
}
}
}
}
//*******************************************************************************************************************
Överföra MIDI-meddelande
//*******************************************************************************************************************
void MIDI_TX (byte meddelande, byte PITCH, byte VELOCITY)
{
status1 = meddelande + midichannel;
Serial.write(status1);
Serial.write(pitch);
Serial.write(Velocity);
}