DIY MIDI USB CONTROLEUR Project Arduino Uno Besoin d'aide
- 76 réponses
- 10 participants
- 13 192 vues
- 10 followers
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
Sujet de la discussion Posté le 24/01/2019 à 13:39:48DIY MIDI USB CONTROLEUR Project Arduino Uno Besoin d'aide
Bonjour a tous
Mon projet est de réaliser un contrôleur MIDI
uniquement dans le but de commander des paramètres de mon logiciel mao et autres Vst
6 Potentiometres ( 10kohm )
8 boutons
je peux programmer via le logiciel Arduino ,la carte est bien reconnu par le port USB ,et je peux également flasher le contrôleur USB ATMEGA16U2 via le logiciel FLIP afin de pouvoir transmettre les Données Midi via L'usb manipulation que se fait sans problème
https://dartmobo.com/midi-over-usb/
Ci joint voici les programmes ainsi que les projets dont je me suis inspiré
https://www.hackster.io/etiennedesportes/ableton-live-midi-controller-9182b3
Les boutons fonctionnent le mappage se fait correctement dans mon logiciel Mao
Mais les potentiomètres ne fonctionnent pas
Leur course est différente
Leur mappage en midi est impossible car selon la position des potentiomètres la diode TX clignote en permanence
Même si je réussie a mapper un ou 2 potentiomètres le mappage des autres est impossible
Car des que je touche un autre potentiomètre la diode TX clignote donc le mappage est aléatoire
J'ai également testé avant avec ce programme
https://www.instructables.com/id/Easy-3-Pot-Potentiometer-Arduino-Uno-Effects-Midi-/
et le logiciel Hailess Midi et loopBe1
Les 3 potentiomètres (2k2ohm) fonctionnaient
Mon schéma de câblage
Est ce que Le problème vient du code ou bien est ce que mon câblage au niveau des potentiomètres n'est pas bon ?
Sur D'autres projets similaires comme celui ci
https://www.instructables.com/id/Custom-Arduino-MIDI-Controller/
il est conseillé de mettre des condensateurs de 100nf entre le masse et la commande ainsi qu'entre le + et la masse de chaque potentiomètres dans le but d’éliminer les bruits
je vous remercie par avance pour votre aide
Le code principale
La bibliothèque Midi.h
Mon projet est de réaliser un contrôleur MIDI
uniquement dans le but de commander des paramètres de mon logiciel mao et autres Vst
6 Potentiometres ( 10kohm )
8 boutons
je peux programmer via le logiciel Arduino ,la carte est bien reconnu par le port USB ,et je peux également flasher le contrôleur USB ATMEGA16U2 via le logiciel FLIP afin de pouvoir transmettre les Données Midi via L'usb manipulation que se fait sans problème
https://dartmobo.com/midi-over-usb/
Ci joint voici les programmes ainsi que les projets dont je me suis inspiré
https://www.hackster.io/etiennedesportes/ableton-live-midi-controller-9182b3
Les boutons fonctionnent le mappage se fait correctement dans mon logiciel Mao
Mais les potentiomètres ne fonctionnent pas
Leur course est différente
Leur mappage en midi est impossible car selon la position des potentiomètres la diode TX clignote en permanence
Même si je réussie a mapper un ou 2 potentiomètres le mappage des autres est impossible
Car des que je touche un autre potentiomètre la diode TX clignote donc le mappage est aléatoire
J'ai également testé avant avec ce programme
https://www.instructables.com/id/Easy-3-Pot-Potentiometer-Arduino-Uno-Effects-Midi-/
et le logiciel Hailess Midi et loopBe1
Les 3 potentiomètres (2k2ohm) fonctionnaient
Mon schéma de câblage
Est ce que Le problème vient du code ou bien est ce que mon câblage au niveau des potentiomètres n'est pas bon ?
Sur D'autres projets similaires comme celui ci
https://www.instructables.com/id/Custom-Arduino-MIDI-Controller/
il est conseillé de mettre des condensateurs de 100nf entre le masse et la commande ainsi qu'entre le + et la masse de chaque potentiomètres dans le but d’éliminer les bruits
je vous remercie par avance pour votre aide
Le code principale
Spoiler - Cliquer ici pour lire la suite
#include <MIDI.h> // INlcude MIDI library
const int buttonPin = 2; // the number of the Button pin
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
const int buttonPin6 = 7;
const int buttonPin7 = 8;
const int buttonPin8 = 9;
// the number of the pushbutton pin
const int ledPin = 11; // the number of the LED pin
const int ledPin2 = 12;
const int ledPin3 = 13;
const int ledPin4 = 14;
const int ledPin5 = 15;
const int ledPin6 = 16;
const int ledPin7 = 17;
const int ledPin8 = 18;
// variables will change:
boolean currentState = LOW;//stroage for current button state
boolean lastState = LOW;//storage for last button state
boolean currentState2 = LOW;
boolean lastState2 = LOW;
boolean currentState3 = LOW;
boolean lastState3 = LOW;
boolean currentState4 = LOW;
boolean lastState4 = LOW;
boolean currentState5 = LOW;
boolean lastState5 = LOW;
boolean currentState6 = LOW;
boolean lastState6 = LOW;
boolean currentState7 = LOW;
boolean lastState7 = LOW;
boolean currentState8 = LOW;
boolean lastState8 = LOW;
void setup() {
Serial.begin(31250); // default midi speed rate
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(ledPin3, OUTPUT);
pinMode(buttonPin3,INPUT_PULLUP);
pinMode(ledPin4, OUTPUT);
pinMode(buttonPin4, INPUT_PULLUP);
pinMode(ledPin5, OUTPUT);
pinMode(buttonPin5, INPUT_PULLUP);
pinMode(ledPin6, OUTPUT);
pinMode(buttonPin6, INPUT_PULLUP);
pinMode(ledPin7, OUTPUT);
pinMode(buttonPin7,INPUT_PULLUP);
pinMode(ledPin8, OUTPUT);
pinMode(buttonPin8, INPUT_PULLUP);
MIDI.begin();
}
static int iAn0Val, iAn1Val, iAn2Val, iAn3Val, iAn4Val, iAn5Val;
void loop(){
// read the state of the pushbutton value:
currentState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (currentState == LOW && lastState == HIGH) {
digitalWrite(ledPin,HIGH);
MIDI.sendNoteOff(42,0,1);
// turn LED off
}
else if (currentState == HIGH && lastState == LOW) {
digitalWrite(ledPin, LOW);
MIDI.sendNoteOn(42,127,1);
// turn LED on
delay(20);
MIDI.sendNoteOff(42,0,1);
// turn LED off
}
lastState = currentState;
currentState2 = digitalRead(buttonPin2);
if (currentState2 == LOW && lastState2 == HIGH) {
digitalWrite(ledPin2,HIGH);
MIDI.sendNoteOff(39,0,1);
}
else if (currentState2 == HIGH && lastState2 == LOW) {
digitalWrite(ledPin2, LOW);
MIDI.sendNoteOn(39,127,1);
delay(20);
MIDI.sendNoteOff(39,0,1);
}
lastState2 = currentState2;
currentState3 = digitalRead(buttonPin3);
if (currentState3 == LOW && lastState3 == HIGH) {
digitalWrite(ledPin3,HIGH);
MIDI.sendNoteOff(40,0,1);
}
else if (currentState3 == HIGH && lastState3 == LOW) {
digitalWrite(ledPin3, LOW);
MIDI.sendNoteOn(40,127,1);
delay(20);
MIDI.sendNoteOff(40,0,1);
}
lastState3 = currentState3;
currentState4 = digitalRead(buttonPin4);
if (currentState4 == LOW && lastState4 == HIGH) {
digitalWrite(ledPin4,HIGH);
MIDI.sendNoteOff(41,0,1);
}
else if (currentState4 == HIGH && lastState4 == LOW) {
digitalWrite(ledPin4, LOW);
MIDI.sendNoteOn(41,127,1);
delay(20);
MIDI.sendNoteOff(41,0,1);
}
lastState4 = currentState4;
currentState5 = digitalRead(buttonPin5);
if (currentState5 == LOW && lastState5 == HIGH) {
digitalWrite(ledPin5,HIGH);
MIDI.sendNoteOff(38,0,1);
}
else if (currentState5 == HIGH && lastState5 == LOW) {
digitalWrite(ledPin5, LOW);
MIDI.sendNoteOn(38,127,1);
delay(20);
MIDI.sendNoteOff(38,0,1);
}
lastState5 = currentState5;
currentState6 = digitalRead(buttonPin6);
if (currentState6 == LOW && lastState6 == HIGH) {
digitalWrite(ledPin6,HIGH);
MIDI.sendNoteOff(43,0,1);
}
else if (currentState6 == HIGH && lastState6 == LOW) {
digitalWrite(ledPin6, LOW);
MIDI.sendNoteOn(43,127,1);
delay(20);
MIDI.sendNoteOff(43,0,1);
}
lastState6 = currentState6;
currentState7 = digitalRead(buttonPin7);
if (currentState7 == LOW && lastState7 == HIGH) {
digitalWrite(ledPin7,HIGH);
MIDI.sendNoteOff(37,0,1);
}
else if (currentState7 == HIGH && lastState7 == LOW) {
digitalWrite(ledPin7, LOW);
MIDI.sendNoteOn(37,127,1);
delay(20);
MIDI.sendNoteOff(37,0,1);
}
lastState7 = currentState7;
currentState8 = digitalRead(buttonPin8);
if (currentState8 == LOW && lastState8 == HIGH) {
digitalWrite(ledPin8,HIGH);
MIDI.sendNoteOff(44,0,1);
}
else if (currentState8 == HIGH && lastState8 == LOW) {
digitalWrite(ledPin8, LOW);
MIDI.sendNoteOn(44,127,1);
delay(20);
MIDI.sendNoteOff(44,0,1);
}
lastState8 = currentState8;
static int iAn0ValPrev;
iAn0ValPrev = iAn0Val; // previous value
iAn0Val = analogRead(A0)/8; // Divide by 8 to get range of 0-127 for midi
analogPinMidiTX(1,iAn0Val,iAn0ValPrev); //TX value
static int iAn1ValPrev;
iAn1ValPrev = iAn1Val;
iAn1Val = analogRead(A1)/8;
analogPinMidiTX(2,iAn1Val,iAn1ValPrev);
static int iAn2ValPrev;
iAn2ValPrev = iAn2Val;
iAn2Val = analogRead(A2)/8;
analogPinMidiTX(3,iAn2Val,iAn2ValPrev);
static int iAn3ValPrev;
iAn3ValPrev = iAn3Val;
iAn3Val = analogRead(A3)/8;
analogPinMidiTX(4,iAn3Val,iAn3ValPrev);
static int iAn4ValPrev;
iAn4ValPrev = iAn4Val;
iAn4Val = analogRead(A4)/8;
analogPinMidiTX(5,iAn4Val,iAn4ValPrev);
static int iAn5ValPrev;
iAn5ValPrev = iAn5Val;
iAn5Val = analogRead(A5)/8;
analogPinMidiTX(6,iAn5Val,iAn5ValPrev);
}
void analogPinMidiTX(int iChan, int iVal, int iValPrev)
{
// TX Value only if it has changed
if(iValPrev != iVal)
{
MidiTX(176,iChan,iVal); // 176 = CC command, 1 = Which Control, val = value read from Potentionmeter
}
}
void MidiTX(unsigned char MESSAGE, unsigned char CONTROL, unsigned char VALUE) //Valeur en Midi Command
{
Serial.write(MESSAGE);
Serial.write(CONTROL);
Serial.write(VALUE);
}
const int buttonPin = 2; // the number of the Button pin
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
const int buttonPin6 = 7;
const int buttonPin7 = 8;
const int buttonPin8 = 9;
// the number of the pushbutton pin
const int ledPin = 11; // the number of the LED pin
const int ledPin2 = 12;
const int ledPin3 = 13;
const int ledPin4 = 14;
const int ledPin5 = 15;
const int ledPin6 = 16;
const int ledPin7 = 17;
const int ledPin8 = 18;
// variables will change:
boolean currentState = LOW;//stroage for current button state
boolean lastState = LOW;//storage for last button state
boolean currentState2 = LOW;
boolean lastState2 = LOW;
boolean currentState3 = LOW;
boolean lastState3 = LOW;
boolean currentState4 = LOW;
boolean lastState4 = LOW;
boolean currentState5 = LOW;
boolean lastState5 = LOW;
boolean currentState6 = LOW;
boolean lastState6 = LOW;
boolean currentState7 = LOW;
boolean lastState7 = LOW;
boolean currentState8 = LOW;
boolean lastState8 = LOW;
void setup() {
Serial.begin(31250); // default midi speed rate
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(ledPin3, OUTPUT);
pinMode(buttonPin3,INPUT_PULLUP);
pinMode(ledPin4, OUTPUT);
pinMode(buttonPin4, INPUT_PULLUP);
pinMode(ledPin5, OUTPUT);
pinMode(buttonPin5, INPUT_PULLUP);
pinMode(ledPin6, OUTPUT);
pinMode(buttonPin6, INPUT_PULLUP);
pinMode(ledPin7, OUTPUT);
pinMode(buttonPin7,INPUT_PULLUP);
pinMode(ledPin8, OUTPUT);
pinMode(buttonPin8, INPUT_PULLUP);
MIDI.begin();
}
static int iAn0Val, iAn1Val, iAn2Val, iAn3Val, iAn4Val, iAn5Val;
void loop(){
// read the state of the pushbutton value:
currentState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (currentState == LOW && lastState == HIGH) {
digitalWrite(ledPin,HIGH);
MIDI.sendNoteOff(42,0,1);
// turn LED off
}
else if (currentState == HIGH && lastState == LOW) {
digitalWrite(ledPin, LOW);
MIDI.sendNoteOn(42,127,1);
// turn LED on
delay(20);
MIDI.sendNoteOff(42,0,1);
// turn LED off
}
lastState = currentState;
currentState2 = digitalRead(buttonPin2);
if (currentState2 == LOW && lastState2 == HIGH) {
digitalWrite(ledPin2,HIGH);
MIDI.sendNoteOff(39,0,1);
}
else if (currentState2 == HIGH && lastState2 == LOW) {
digitalWrite(ledPin2, LOW);
MIDI.sendNoteOn(39,127,1);
delay(20);
MIDI.sendNoteOff(39,0,1);
}
lastState2 = currentState2;
currentState3 = digitalRead(buttonPin3);
if (currentState3 == LOW && lastState3 == HIGH) {
digitalWrite(ledPin3,HIGH);
MIDI.sendNoteOff(40,0,1);
}
else if (currentState3 == HIGH && lastState3 == LOW) {
digitalWrite(ledPin3, LOW);
MIDI.sendNoteOn(40,127,1);
delay(20);
MIDI.sendNoteOff(40,0,1);
}
lastState3 = currentState3;
currentState4 = digitalRead(buttonPin4);
if (currentState4 == LOW && lastState4 == HIGH) {
digitalWrite(ledPin4,HIGH);
MIDI.sendNoteOff(41,0,1);
}
else if (currentState4 == HIGH && lastState4 == LOW) {
digitalWrite(ledPin4, LOW);
MIDI.sendNoteOn(41,127,1);
delay(20);
MIDI.sendNoteOff(41,0,1);
}
lastState4 = currentState4;
currentState5 = digitalRead(buttonPin5);
if (currentState5 == LOW && lastState5 == HIGH) {
digitalWrite(ledPin5,HIGH);
MIDI.sendNoteOff(38,0,1);
}
else if (currentState5 == HIGH && lastState5 == LOW) {
digitalWrite(ledPin5, LOW);
MIDI.sendNoteOn(38,127,1);
delay(20);
MIDI.sendNoteOff(38,0,1);
}
lastState5 = currentState5;
currentState6 = digitalRead(buttonPin6);
if (currentState6 == LOW && lastState6 == HIGH) {
digitalWrite(ledPin6,HIGH);
MIDI.sendNoteOff(43,0,1);
}
else if (currentState6 == HIGH && lastState6 == LOW) {
digitalWrite(ledPin6, LOW);
MIDI.sendNoteOn(43,127,1);
delay(20);
MIDI.sendNoteOff(43,0,1);
}
lastState6 = currentState6;
currentState7 = digitalRead(buttonPin7);
if (currentState7 == LOW && lastState7 == HIGH) {
digitalWrite(ledPin7,HIGH);
MIDI.sendNoteOff(37,0,1);
}
else if (currentState7 == HIGH && lastState7 == LOW) {
digitalWrite(ledPin7, LOW);
MIDI.sendNoteOn(37,127,1);
delay(20);
MIDI.sendNoteOff(37,0,1);
}
lastState7 = currentState7;
currentState8 = digitalRead(buttonPin8);
if (currentState8 == LOW && lastState8 == HIGH) {
digitalWrite(ledPin8,HIGH);
MIDI.sendNoteOff(44,0,1);
}
else if (currentState8 == HIGH && lastState8 == LOW) {
digitalWrite(ledPin8, LOW);
MIDI.sendNoteOn(44,127,1);
delay(20);
MIDI.sendNoteOff(44,0,1);
}
lastState8 = currentState8;
static int iAn0ValPrev;
iAn0ValPrev = iAn0Val; // previous value
iAn0Val = analogRead(A0)/8; // Divide by 8 to get range of 0-127 for midi
analogPinMidiTX(1,iAn0Val,iAn0ValPrev); //TX value
static int iAn1ValPrev;
iAn1ValPrev = iAn1Val;
iAn1Val = analogRead(A1)/8;
analogPinMidiTX(2,iAn1Val,iAn1ValPrev);
static int iAn2ValPrev;
iAn2ValPrev = iAn2Val;
iAn2Val = analogRead(A2)/8;
analogPinMidiTX(3,iAn2Val,iAn2ValPrev);
static int iAn3ValPrev;
iAn3ValPrev = iAn3Val;
iAn3Val = analogRead(A3)/8;
analogPinMidiTX(4,iAn3Val,iAn3ValPrev);
static int iAn4ValPrev;
iAn4ValPrev = iAn4Val;
iAn4Val = analogRead(A4)/8;
analogPinMidiTX(5,iAn4Val,iAn4ValPrev);
static int iAn5ValPrev;
iAn5ValPrev = iAn5Val;
iAn5Val = analogRead(A5)/8;
analogPinMidiTX(6,iAn5Val,iAn5ValPrev);
}
void analogPinMidiTX(int iChan, int iVal, int iValPrev)
{
// TX Value only if it has changed
if(iValPrev != iVal)
{
MidiTX(176,iChan,iVal); // 176 = CC command, 1 = Which Control, val = value read from Potentionmeter
}
}
void MidiTX(unsigned char MESSAGE, unsigned char CONTROL, unsigned char VALUE) //Valeur en Midi Command
{
Serial.write(MESSAGE);
Serial.write(CONTROL);
Serial.write(VALUE);
}
La bibliothèque Midi.h
Spoiler - Cliquer ici pour lire la suite
#include <MIDI.h>
/*
Basic I/O MIDI tutorial
by Franky
28/07/2009
*/
#define LED 13 // LED pin on Arduino board
void setup() {
pinMode(LED, OUTPUT);
MIDI.begin(4); // Launch MIDI with default options
// input channel is set to 4
}
void loop() {
if (MIDI.read()) {
digitalWrite(LED,HIGH); // Blink the LED
MIDI.sendNoteOn(42,127,1); // Send a Note (pitch 42, velo 127 on channel 1)
delay(1000); // Wait for a second
MIDI.sendNoteOff(42,0,1); // Stop the note
digitalWrite(LED,LOW);
}
}
/*
Basic I/O MIDI tutorial
by Franky
28/07/2009
*/
#define LED 13 // LED pin on Arduino board
void setup() {
pinMode(LED, OUTPUT);
MIDI.begin(4); // Launch MIDI with default options
// input channel is set to 4
}
void loop() {
if (MIDI.read()) {
digitalWrite(LED,HIGH); // Blink the LED
MIDI.sendNoteOn(42,127,1); // Send a Note (pitch 42, velo 127 on channel 1)
delay(1000); // Wait for a second
MIDI.sendNoteOff(42,0,1); // Stop the note
digitalWrite(LED,LOW);
}
}
Spoiler - Cliquer ici pour lire la suite
#include <MIDI.h>
// This function will be automatically called when a NoteOn is received.
// It must be a void-returning function with the correct parameters,
// see documentation here:
// http://arduinomidilib.sourceforge.net/class_m_i_d_i___class.html
void HandleNoteOn(byte channel, byte pitch, byte velocity) {
// Do whatever you want when you receive a Note On.
if (velocity == 0) {
// This acts like a NoteOff.
}
// This function will be automatically called when a NoteOn is received.
// It must be a void-returning function with the correct parameters,
// see documentation here:
// http://arduinomidilib.sourceforge.net/class_m_i_d_i___class.html
void HandleNoteOn(byte channel, byte pitch, byte velocity) {
// Do whatever you want when you receive a Note On.
if (velocity == 0) {
// This acts like a NoteOff.
}
Spoiler - Cliquer ici pour lire la suite
#include <MIDI.h>
/*
MIDI Input tutorial
by Franky
28/07/2009
NOTE: for easier MIDI input reading,
take a look a the Callbacks example.
*/
#define LED 13 // LED pin on Arduino board
void BlinkLed(byte num) { // Basic blink function
for (byte i=0;i<num;i++) {
digitalWrite(LED,HIGH);
delay(50);
digitalWrite(LED,LOW);
delay(50);
}
}
void setup() {
pinMode(LED, OUTPUT);
MIDI.begin(); // Launch MIDI with default options
// (input channel is default set to 1)
}
void loop() {
if (MIDI.read()) { // Is there a MIDI message incoming ?
switch(MIDI.getType()) { // Get the type of the message we caught
case ProgramChange: // If it is a Program Change
BlinkLed(MIDI.getData1()); // Blink the LED a number of times
// correponding to the program number
// (0 to 127, it can last a while..)
break;
// See the online reference for other message types
default:
break;
}
}
}
/*
MIDI Input tutorial
by Franky
28/07/2009
NOTE: for easier MIDI input reading,
take a look a the Callbacks example.
*/
#define LED 13 // LED pin on Arduino board
void BlinkLed(byte num) { // Basic blink function
for (byte i=0;i<num;i++) {
digitalWrite(LED,HIGH);
delay(50);
digitalWrite(LED,LOW);
delay(50);
}
}
void setup() {
pinMode(LED, OUTPUT);
MIDI.begin(); // Launch MIDI with default options
// (input channel is default set to 1)
}
void loop() {
if (MIDI.read()) { // Is there a MIDI message incoming ?
switch(MIDI.getType()) { // Get the type of the message we caught
case ProgramChange: // If it is a Program Change
BlinkLed(MIDI.getData1()); // Blink the LED a number of times
// correponding to the program number
// (0 to 127, it can last a while..)
break;
// See the online reference for other message types
default:
break;
}
}
}
Rémy M. (chimimic)
14205
Modérateur·trice thématique
Membre depuis 22 ans
51 Posté le 11/06/2019 à 18:36:36
Je pense moi aussi à un problème d'alimentation.
Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
52 Posté le 11/06/2019 à 22:50:53
Pour le plus 5V Je faisais allusion a un repére a partir du quelle la transmission midi s'emballe
Desolé si je me suis mal exprimé ou on s'est mal compris
En gros c'est quand la position du potentiomètre se situe a la moitié de sa course
l'allumage des pixels continu mais le transmission s'emballe
Purement électrique possible mais toutes les rings fonctionnent parfaitement comme on peut le voir sur la vidéo
Ou bien alors étant donné que la consommation est importante la transmission s'emballe
Car lorsque je débranche les ring la transmission ne s'emballe plus
Il y a également un sortie 3,3V sur l'arduino sa fait la même chose.
Effectivement mon arduino fonctionne sur L'USB
Desolé si je me suis mal exprimé ou on s'est mal compris
En gros c'est quand la position du potentiomètre se situe a la moitié de sa course
l'allumage des pixels continu mais le transmission s'emballe
Purement électrique possible mais toutes les rings fonctionnent parfaitement comme on peut le voir sur la vidéo
Ou bien alors étant donné que la consommation est importante la transmission s'emballe
Car lorsque je débranche les ring la transmission ne s'emballe plus
Il y a également un sortie 3,3V sur l'arduino sa fait la même chose.
Effectivement mon arduino fonctionne sur L'USB
Anonyme
1096
53 Posté le 12/06/2019 à 00:25:06
Chaque led du ring consomme -+18mA d'après le site, ce qui nous fait 24*18 =432mA en plus de ce que consomme déjà ton interface et ses leds, ce n'est pas négligeable. Ca dépend aussi de l'USB 1,2,3 de ton ordi...
Il y a de fortes chances que ton interface fonctionne correctement avec un simple transfo 5V (1 ampère).
Il y a de fortes chances que ton interface fonctionne correctement avec un simple transfo 5V (1 ampère).
[ Dernière édition du message le 12/06/2019 à 00:26:26 ]
.: Odon Quelconque :.
11220
Drogué·e à l’AFéine
Membre depuis 22 ans
54 Posté le 12/06/2019 à 10:10:28
x
Hors sujet :Il faut demander son code source à Stephan Bodzin :
« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
55 Posté le 13/06/2019 à 11:32:39
Pour info
Je connecte mes cercles de led sur des connecteurs Duponts comme ceci
Mode DART => Firmware Midi par USB (test Midi avec Midi TEST)
Mode Stock => Firmware d'origine Usb Serial pour pouvoir compilé et testé avec le moniteur Serie de l'arduino
J'ai pu testé avec une alimentation externe 12v 1a
12v c'est le maximum pour ce type de carte
Je connecte un cercle de led 24 en direct +5 gnd et output plus de midi Tx je me dis il y a de l'espoir
Et je bascule en USB Midi (firmware DART Donc) ok c'est stable.
Je teste ensuite avec 2 cercle puis 3 puis 4 (dans le programme et physiquement bien sur)
en testant à chaque fois
c'est egalement ok
Je rajoute ensuite le 5ieme Ring est la transmission s'emballe ceci en touchant n'importe quels potentiomètres
Je recompile ensuite pour 4 cercles je fais en reset de la carte et sa s'emballe une nouvelle fois
Je débranche 3 cercles (physiquement) et rajoute les 3 autres cercles un par un étrangement pas de TX quand je touche rien
Je flash ma carte avec le firmware DART et effectue un midi test aucun problème c'est stable
Je repasse en mode Stock et rajoute un cinquième cercle et la sa s'emballe dans le moniteur Série
Test a nouveau avec 4 cercles idem même problème
J'ai le même problème que ce soit avec des cercles de 12 16 ou 24
Par moment j'ai le même problème si le potentiomètre est uniquement en fin de couse
La panne semble être complétement aléatoire de quoi devinir fou
Et surtout suite a un mauvaise manip la carte a grillé
J'ai rebasculé sur arduino Uno
Autres remarques également
- Lorsque j'indique dans le programme le nombre de Pixel à afficher
pour le cercle 16 j'indique donc 16 et je n'ai que 12 pixels en fin course du potentiomètre
Si je lui indique 20 tout les pixels s'illuminent
Pour 24 idem j'en n'ai que 23
Je suis donc obligé de tricher sur le nombre de pixel pour que touts les pixels s'affichent
- Losque je mesure la tension de sortie je n'ai pas 5V mais 4.7V
- Les cercles de Leds 16 et 24 ont 2 Gnd et 2 +5V
- Ensuite lorsque je compile j'obtiens ceci :
Je connecte mes cercles de led sur des connecteurs Duponts comme ceci
Mode DART => Firmware Midi par USB (test Midi avec Midi TEST)
Mode Stock => Firmware d'origine Usb Serial pour pouvoir compilé et testé avec le moniteur Serie de l'arduino
J'ai pu testé avec une alimentation externe 12v 1a
12v c'est le maximum pour ce type de carte
Je connecte un cercle de led 24 en direct +5 gnd et output plus de midi Tx je me dis il y a de l'espoir
Et je bascule en USB Midi (firmware DART Donc) ok c'est stable.
Je teste ensuite avec 2 cercle puis 3 puis 4 (dans le programme et physiquement bien sur)
en testant à chaque fois
c'est egalement ok
Je rajoute ensuite le 5ieme Ring est la transmission s'emballe ceci en touchant n'importe quels potentiomètres
Je recompile ensuite pour 4 cercles je fais en reset de la carte et sa s'emballe une nouvelle fois
Je débranche 3 cercles (physiquement) et rajoute les 3 autres cercles un par un étrangement pas de TX quand je touche rien
Je flash ma carte avec le firmware DART et effectue un midi test aucun problème c'est stable
Je repasse en mode Stock et rajoute un cinquième cercle et la sa s'emballe dans le moniteur Série
Test a nouveau avec 4 cercles idem même problème
J'ai le même problème que ce soit avec des cercles de 12 16 ou 24
Par moment j'ai le même problème si le potentiomètre est uniquement en fin de couse
La panne semble être complétement aléatoire de quoi devinir fou
Et surtout suite a un mauvaise manip la carte a grillé
J'ai rebasculé sur arduino Uno
Autres remarques également
- Lorsque j'indique dans le programme le nombre de Pixel à afficher
pour le cercle 16 j'indique donc 16 et je n'ai que 12 pixels en fin course du potentiomètre
Si je lui indique 20 tout les pixels s'illuminent
Pour 24 idem j'en n'ai que 23
Je suis donc obligé de tricher sur le nombre de pixel pour que touts les pixels s'affichent
- Losque je mesure la tension de sortie je n'ai pas 5V mais 4.7V
- Les cercles de Leds 16 et 24 ont 2 Gnd et 2 +5V
- Ensuite lorsque je compile j'obtiens ceci :
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:10:0: warning: "PIN2" redefined
#define PIN2 5 // 24
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
from sketch\test4ringrotarymiditx.ino.cpp:1:
c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:70:0: note: this is the location of the previous definition
#define PIN2 2
^
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:11:0: warning: "PIN3" redefined
#define PIN3 6 //12
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
from sketch\test4ringrotarymiditx.ino.cpp:1:
c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:69:0: note: this is the location of the previous definition
#define PIN3 3
^
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:12:0: warning: "PIN4" redefined
#define PIN4 7 // 16
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
from sketch\test4ringrotarymiditx.ino.cpp:1:
c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:68:0: note: this is the location of the previous definition
#define PIN4 4
^
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:13:0: warning: "PIN5" redefined
#define PIN5 8 // 16
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
from sketch\test4ringrotarymiditx.ino.cpp:1:
c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:67:0: note: this is the location of the previous definition
#define PIN5 5
^
C:\Users\mathieu.fernet\Documents\Arduino\multi6neopixelring_rotary_Button_MidiTx\test4ringrotarymiditx\test4ringrotarymiditx.ino:14:0: warning: "PIN6" redefined
#define PIN6 9 //12
^
In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:639:0,
from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28,
from sketch\test4ringrotarymiditx.ino.cpp:1:
c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\portpins.h:66:0: note: this is the location of the previous definition
#define PIN6 6
^
Le croquis utilise 5946 octets (18%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 916 octets (44%) de mémoire dynamique, ce qui laisse 1132 octets pour les variables locales. Le maximum est de 2048 octets.
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
56 Posté le 13/06/2019 à 12:00:24
Citation :
Il faut demander son code source à Stephan Bodzin :
Spoiler - Cliquer ici pour lire la suite
Oui excellente idée
Malheureusement il n'utilise pas d'arduino
En plus ces leds font un sorte de chenillard permanent
Son interface est basé sur 2 x Livid Brain v2 MIDI
Anonyme
1096
57 Posté le 13/06/2019 à 12:47:34
Resalut MM,
Ce que je comprends c'est que ça plante quand tu branches trop de rings.
432 mA c'est pour un seul ring. Avec 4 rings + l'arduino on est déjà aux alentours de 2 Ampères...
Pour limiter la consommation tu peux envisager une autre approche: ne pas allumer toutes les leds du ring mais uniquement celle en face de ton curseur. Ce sera moins joli mais tu pourrais te passer d'allim.
Pour info et d'après ce que j'ai trouvé un USB2 est capable de fournir jusqu'à 500mA, l'USB3 monte lui à 900mA.
Ce que je comprends c'est que ça plante quand tu branches trop de rings.
432 mA c'est pour un seul ring. Avec 4 rings + l'arduino on est déjà aux alentours de 2 Ampères...
Pour limiter la consommation tu peux envisager une autre approche: ne pas allumer toutes les leds du ring mais uniquement celle en face de ton curseur. Ce sera moins joli mais tu pourrais te passer d'allim.
Pour info et d'après ce que j'ai trouvé un USB2 est capable de fournir jusqu'à 500mA, l'USB3 monte lui à 900mA.
[ Dernière édition du message le 13/06/2019 à 12:47:52 ]
christian_r
2159
AFicionado·a
Membre depuis 15 ans
58 Posté le 13/06/2019 à 13:04:48
Tu peux diminuer la consommation avec l'astuce de la persistance rétinienne, deux LED qui clignotent très vite à tour de rôle consomment comme une seule.
Christian
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
59 Posté le 13/06/2019 à 15:08:19
Je viens de testé jusqu’à 3 ring en jouant avec la luminosité
J'ai mis la luminosité au minimum
Le problème commence a arrivé au bout du 3ieme ring avec un transmission aléatoire qui s'amplifie
donc il est clair que la consommation de courant est trop importante pour la carte
J'ai mis la luminosité au minimum
Le problème commence a arrivé au bout du 3ieme ring avec un transmission aléatoire qui s'amplifie
donc il est clair que la consommation de courant est trop importante pour la carte
Anonyme
1096
60 Posté le 13/06/2019 à 16:01:02
Citation de Mat :
donc il est clair que la consommation de courant est trop importante pour la carte
Il y a une subtilité. Si tu alimentes les rings par le "+5V" de l'arduino, alors oui tu seras limité par le régulateur de tension intégré à la carte. Tu dépasses largement l'intensité admissible.
Si tu branches tes rings sur le "Vin" avec une alimentation externe 5V conséquente alors l'intensité admissible sera limité a quelque chose comme 2A je crois.
Si tu alimentes directement tes rings par un transfo +5V, sans passer par la carte il n'y a alors plus de limites..
Edit: Un dernier truc: si tu alimentes ton arduino avec un transfo externe 5V et que tu check la sortie +5V alors tu obtiendras +4,7V. C'est normal, la tension est abaissée par le régulateur interne qui ne reçoit pas une tension suffisante pour travailler. Dans ces cas là on utilise plutôt le Vin qui est l'exacte reproduction de la tension en entrée.
[ Dernière édition du message le 13/06/2019 à 16:08:12 ]
- < Liste des sujets
- Charte