Arduino xylofon (7 / 10 steg)
Steg 7: Ansluta till Arduino
Alla återstående analoga portar måste vara jordad! Annars kommer det påverka din seriell produktion från arduino. Jag använde 4 svarta sladdar, från marken järnväg av PCB direkt till öppna analoga portar styrelsens Mega. (A12, A13, A14 och A15)
När du har slutfört din krets, du kan fylla på xylofon programmera eller skiss på Arduino styrelsen från Arduino utveckla miljö.
Här är skissen jag använde.
Xylofon
Anpassad för en ArduinoMega
från Jenna deBoisblanc och Spiekenzie Labs ursprungliga koden
//*******************************************************************************************************************
Inställbar Användarvariabler
//*******************************************************************************************************************
int pinRead;
char pinAssignments [6] = {
"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); ansluta till serieporten 115200
}
//*******************************************************************************************************************
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);
}