Bonjour
Je souhaite réaliser un step séquencer Midi avec un Arduino Uno
4 BOUTONS (on/off)
4 LEDS
1 Potentiomètre ou encoder pour la variation du BPM (avec horloge midi si possible)
1 Rotary Encoder qui me permettrai de changer de Note Midi
Quelque chose de ce genre la;
J'ai regarde beaucoup de projet de ce type (adafruit UNTZtrument ,sugarcube)
Mais ces projets se composent de matrice de led et ne correspondent pas a ce que je voudrai réaliser
Car je souhaiterai que la séquence de lecture se fasse sur une seule ligne (une piste)
sur 4 Boutons
une séquence avec une visualisation avec des leds en fonction du bpm
et lorsque j’appuie sur un Switch la note dans la séquence est jouée et envoyée en midi
la led correspondante a la position de la note reste allumé
J'ai commencé a bricolé ce code assez rudimentaire je vous l'accorde
Pour la séquence de led c'est ok je peux change la vitesse de la séquence avec
la potentiomètre
#include <MIDI.h> // INlcude MIDI library
// define the pins we use
int LED1 = 8;
int LED2 = 9;
int LED3 = 10;
int LED4 = 11;
int Time = A0;
// general midi notes
char note1 = 60; //
char note2 = 60; //
char note3 = 60; //
char note4 = 60; //
// Variables
int currentSwitchState1 = LOW;
int currentSwitchState2 = LOW;
int currentSwitchState3 = LOW;
int currentSwitchState4 = LOW;
int currentSwitchState5 = LOW;
int currentSwitchState6 = LOW;
const int buttonPin = 2 ;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
int buttonState = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int lastButtonState = 0;
int lastButtonState2 = 0;
int lastButtonState3 = 0;
int lastButtonState4 = 0;
int toggleState = 0;
int toggleState2 = 0;
int toggleState3 = 0;
int toggleState4 = 0;
int Tempo = 80;
void setup() {
// set the states of the I/O pins:
pinMode(2, INPUT_PULLUP); // initialize the pushbutton pin as an input:
pinMode(3, INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
// set MIDI baud rate :
Serial.begin(31250);
}
void displayled ()
{
digitalWrite(LED1, HIGH);
Tempo = analogRead(Time);
delay(Tempo+1);
digitalWrite(LED1, LOW);
noteOn(0x90, note1, 0x00);
digitalWrite(LED2, HIGH);
Tempo = analogRead(Time);
delay(Tempo+1);
digitalWrite(LED2, LOW);
noteOn(0x90, note1, 0x00);
digitalWrite(LED3, HIGH);
Tempo = analogRead(Time);
delay(Tempo+1);
digitalWrite(LED3, LOW);
noteOn(0x90, note1, 0x00);
digitalWrite(LED4, HIGH);
Tempo = analogRead(Time);
delay(Tempo+1);
digitalWrite(LED4, LOW);
noteOn(0x90, note1, 0x00);
}
void loop()
{
displayled ();
//BUTTON 01
{
buttonState = digitalRead(buttonPin);
if(buttonState != lastButtonState && buttonState == 1 && toggleState == 0)
{
toggleState = 1;
noteOn(0x90, note1, 0x45);
}
else if(buttonState != lastButtonState && buttonState == 1 && toggleState == 1) {
toggleState = 0;
noteOn(0x90, note1, 0x00);
}
lastButtonState = buttonState;
}
//BUTTON 02
/*
{
buttonState2 = digitalRead(buttonPin2);
if(buttonState2 != lastButtonState2 && buttonState2 == 1 && toggleState2 == 0) {
MIDI.sendControlChange(52, 127, 1);
toggleState2 = 1;
}
else if(buttonState2 != lastButtonState2 && buttonState2 == 1 && toggleState2 == 1) {
MIDI.sendControlChange(52, 0, 1);
toggleState2 = 0;
}
lastButtonState2 = buttonState2;
}
//BUTTON 03
{
buttonState3 = digitalRead(buttonPin3);
if(buttonState3 != lastButtonState3 && buttonState3 == 1 && toggleState3 == 0) {
MIDI.sendControlChange(53, 127, 1);
toggleState3 = 1;
}
else if(buttonState3 != lastButtonState3 && buttonState3 == 1 && toggleState3 == 1) {
MIDI.sendControlChange(53, 0, 1);
toggleState3 = 0;
}
lastButtonState3 = buttonState3;
}
//BUTTON 04
{
buttonState4 = digitalRead(buttonPin4);
if(buttonState4 != lastButtonState4 && buttonState4 == 1 && toggleState4 == 0) {
MIDI.sendControlChange(54, 127, 1);
toggleState4 = 1;
}
else if(buttonState4 != lastButtonState4 && buttonState4 == 1 && toggleState4 == 1) {
MIDI.sendControlChange(54, 0, 1);
toggleState4 = 0;
}
lastButtonState4 = buttonState4;
}
*/
}
// Send a MIDI note-on/off message.
void noteOn(char cmd, char pitch, char velocity)
{
Serial.print(cmd);
Serial.print(pitch);
Serial.print(velocity);
}
Mais pour les switchs je n'arrive pas a les faire changer d’état dans la séquence
Les notes seules (sans séquence de leds) sont bien envoyé lors d'un pression sur un switch (HairlessMidi et LoopBe1)
Je ne sais pas si c'est possible avec uniquement un code et un arduino car la plupart de projet de séquencer utilise un teensy 3.1 et des multiplexers