3D tryckt Arduino xylofon (5 / 6 steg)
Steg 5: Kod:
Koden:
Skissen jag använde för detta projekt kom från Audrey Obscura och modifierades för att passa den Arduino Uno eftersom Uno erbjuder bara 6 analoga stift i stället för 16 på Arduino Mega.
Xylofon
Anpassad för en ArduinoUno
ursprungligen från Jenna deBoisblanc och Spiekenzie Labs inledande kod
//*******************************************************************************************************************
// User settable variables //*******************************************************************************************************************
int pinRead; char pinAssignments [6] =
{"A0", "A1", "A2", "A3", "A4", "A5"};
byte PadNote [6] =
{57,58,59,60,61,62}; MIDI anteckningar från 0 till 127 (mitten av C = 60)
int PadCutOff [6] =
{400,400,200,800,400,400}; Minsta analoga värde att orsaka en trumma hit
int MaxPlayTime [6] =
{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)
//******************************************************************************************************************* // Internal Use Variables //*******************************************************************************************************************
booleska activePad [6] =
{0,0,0,0,0,0}; Matris med flaggor av pad som spelar
int PinPlayTime [6] =
{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); / / ansluta till serieporten 115200
}
//*******************************************************************************************************************
// Main Program //*******************************************************************************************************************
void loop() {för (int pin = 0; pin < 6; 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);
}
}
}
}
//*******************************************************************************************************************
// Transmit MIDI Message //*******************************************************************************************************************
void MIDI_TX (byte meddelande, byte PITCH, byte VELOCITY)
{status1 = meddelande + midichannel;
Serial.write(status1);
Serial.write(pitch);
Serial.write(Velocity);
}