Étape 5: Le Code :
Le Code :
L’esquisse que j’ai utilisé pour ce projet venait de Audrey Obscura et a été modifiée pour s’adapter à l’Arduino Uno étant donné que l’ONU ne propose que 6 broches analogiques au lieu de 16 sur l’Arduino Mega.
Xylophone
Adapté pour un ArduinoUno
originaire de Jenna deBoisblanc et code initial Spiekenzie Labs
//*******************************************************************************************************************
// User settable variables //*******************************************************************************************************************
int pinRead ; char pinAssignments [6] =
{« A0 », « A1 », « A2 », « A3 », « A4 », "A5"} ;
octet PadNote [6] =
{57,58,59,60,61,62} ; MIDI note de 0 à 127 (milieu C = 60)
int PadCutOff [6] =
{400,400,200,800,400,400} ; Valeur analogique minimale pour provoquer un coup de tambour
int MaxPlayTime [6] =
{90,90,90,90,90,90} ; Cycles avant un 2e succès est autorisé
#define midichannel 1 ; Canal du MIDI de 0 à 15 (+ 1 dans le « monde réel »)
Boolean VelocityFlag = true ; Vitesse de marche (true) ou désactivé (false)
//******************************************************************************************************************* // Internal Use Variables //*******************************************************************************************************************
activePad booléen [6] =
{0,0,0,0,0,0} ; Tableau d’indicateurs du pad en cours de lecture
int PinPlayTime [6] =
{0,0,0,0,0,0} ; Compteur depuis pad a commencé à jouer status1 octet ;
broche int = 0 ;
int hitavg = 0 ; //*******************************************************************************************************************
Programme d’installation
//*******************************************************************************************************************
void setup()
{Serial.begin(57600); / / se connecter au port série 115200
}
//*******************************************************************************************************************
// Main Program //*******************************************************************************************************************
void loop() {pour (broche int = 0; broche < 6; pin ++) / /
{
broche int = 3 ;
pour (pinRead = 0; pinRead < 16, broche ++) {}
hitavg = analogRead(pinAssignments[pin]) ;
Serial.println(hitavg) ;
lire l’entrée pin
Si ((hitavg > PadCutOff[pin]))
{Si ((activePad [pin] == false))
{if(VelocityFlag == true)
{
hitavg = 127 / ((1023 - PadCutOff[pin]) / (hitavg - PadCutOff[pin])) ; Gamme complète (trop sensible?)
hitavg = (hitavg / 8) -1 ; Haut de gamme
}
d’autre
{
hitavg = 127 ;
}
MIDI_TX(144,PadNote[Pin],hitavg) ; Note relative à la
PinPlayTime [pin] = 0 ;
activePad [pin] = true ;
}
d’autre
{
PinPlayTime [pin] = PinPlayTime [pin] + 1 ;
}
}
else if ((activePad [pin] == true))
{
PinPlayTime [pin] = PinPlayTime [pin] + 1 ;
Si (PinPlayTime [pin] > MaxPlayTime[pin])
{activePad [pin] = false ;
MIDI_TX(144,PadNote[Pin],0) ;
}
}
}
}
//*******************************************************************************************************************
// Transmit MIDI Message //*******************************************************************************************************************
void MIDI_TX (byte MESSAGE, octet PITCH, octet VELOCITY)
{status1 = MESSAGE + midichannel ;
Serial.Write(status1) ;
Serial.Write(Pitch) ;
Serial.Write(Velocity) ;
}