Bonjour,
Je fais ce poste suite a mes recherche sans succès. Je suis actuellement en train de me créer un mixeur audio pour mon ordinateur, pour cela j'utilise 5 encodeurs branchés du pin0 ou pin9 sur mon arduino mega.
Le code fonctionne bien le seul problème est que le seul encodeur qui marche correctement est celui branché sur le pin 2 et 3 ou 1 et 2 si je décale d'un pin tous les encodeurs.
Pour faire un diagnostique j'ai essayé de changer pour d'autre pin les 4 qui marchais mal mais rien n'y fais.
Les autres encodeurs ne font que de faire bougé le slider de volume sur windows de quelque pourcent, ou alors je doit tourner l'encodeur extrêmement lentement
Ici le code pour vous permettre de comprendre ce que je veux faire
/* Encoder Library - TwoKnobs Example
* http://www.pjrc.com/teensy/td_libs_Encoder.html
*
* This example code is in the public domain.
*/
#include <Encoder.h>
#include <Adafruit_NeoPixel.h>
const int NUM_SLIDERS = 5;
#define NUMPIXELS 13
#define PIN 11
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int analogSliderValues[NUM_SLIDERS];
// Change these pin numbers to the pins connected to your encoder.
// Best Performance: both pins have interrupt capability
// Good Performance: only the first pin has interrupt capability
// Low Performance: neither pin has interrupt capability
Encoder knobMaster(0,1);
Encoder knobDiscord(2,3);
Encoder knobOpera(4,5);
Encoder knobGaming(6,7);
Encoder knobMusic(8,9);
int Master, Discord, Opera, Gaming, Music;
int masterMute, discordMute, operaMute, gamingMute, musicMute;
int masterDebounceTime;
// avoid using pins with LEDs attached
//buttons: (A7, A6, A5, A4, A3)
const int masterButton=A7;
const int discordButton=A6;
const int operaButton=A5;
const int gamingButton=A4;
const int musicButton=A3;
unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
unsigned long debounceDelay = 0; // the debounce time; increase if the output flickers
int masterState=0;
int discordState=0;
int operaState=0;
int gamingState=0;
int musicState=0;
void setup() {
Serial.begin(9600);
pinMode(masterButton, INPUT_PULLUP);
pinMode(discordButton, INPUT_PULLUP);
pinMode(operaButton, INPUT_PULLUP);
pinMode(gamingButton, INPUT_PULLUP);
pinMode(musicButton, INPUT_PULLUP);
analogSliderValues[0] = 1023;
knobMaster.write(100);
analogSliderValues[1] = 1023;
knobDiscord.write(100);
analogSliderValues[2] = 1023;
knobOpera.write(100);
analogSliderValues[3] = 1023;
knobGaming.write(100);
analogSliderValues[4] = 1023;
knobMusic.write(100);
pixels.begin();
pixels.clear();
masterMute=0;
discordMute=0;
operaMute=0;
gamingMute=0;
musicMute=0;
}
void loop() {
Master = knobMaster.read();
Discord = knobDiscord.read();
Opera = knobOpera.read();
Gaming = knobGaming.read();
Music = knobMusic.read();
checkButtons();
checkEncoders();
sendSliderValues();
//printSliderValues();//debug
pixels.show();
}
void sendSliderValues() {
String builtString = String("");
for (int i = 0; i < NUM_SLIDERS; i++) {
builtString += String((int)analogSliderValues[i]);
if (i < NUM_SLIDERS - 1) {
builtString += String("|");
}
}
Serial.println(builtString);
}
void printSliderValues() {
for (int i = 0; i < NUM_SLIDERS; i++) {
String printedString = String("Slider #") + String(i + 1) + String(": ") + String(analogSliderValues[i]) + String(" mV");
Serial.write(printedString.c_str());
if (i < NUM_SLIDERS - 1) {
Serial.write(" | ");
} else {
Serial.write("\n");
}
}
}
void checkButtons(){ // Verifie l'état muet d'un bouton
if (digitalRead(masterButton)==0 && masterState ==0){
masterMute = !masterMute ;
masterState =1;
delay(25);
}
if (digitalRead(masterButton)==1){
masterState=0;
}
if (digitalRead(discordButton)==0 && discordState ==0){
discordMute = !discordMute ;
discordState =1;
delay(25);
}
if (digitalRead(discordButton)==1){
discordState=0;
}
if (digitalRead(operaButton)==0 && operaState ==0){
operaMute = !operaMute ;
operaState =1;
delay(25);
}
if (digitalRead(operaButton)==1){
operaState=0;
}
if (digitalRead(gamingButton)==0 && gamingState ==0){
gamingMute = !gamingMute ;
gamingState =1;
delay(25);
}
if (digitalRead(gamingButton)==1){
gamingState=0;
}
if (digitalRead(musicButton)==0 && musicState ==0){
musicMute = !musicMute ;
musicState =1;
delay(25);
}
if (digitalRead(musicButton)==1){
musicState=0;
}
}
void checkEncoders(){ //verifie si le volume est a zero alume la led en rouge
if (Master > 0 && Master < 102 && masterMute==0){
analogSliderValues[0]=Master*10;
pixels.setPixelColor(4, pixels.Color(0, 150, 0));
}
else if (masterMute==0 && (Master > 102 || Master==102)){
analogSliderValues[0]=102*10;
knobMaster.write(102);
pixels.setPixelColor(4, pixels.Color(0, 150, 0));
}
else if (masterMute==1){
analogSliderValues[0]=0;
pixels.setPixelColor(4, pixels.Color(150, 0, 0));
}
else {
analogSliderValues[0]=0;
knobMaster.write(0);
pixels.setPixelColor(4, pixels.Color(150, 0, 0));
}
if (Discord > 0 && (Discord < 102 && discordMute==0)){
analogSliderValues[1]=Discord*10;
pixels.setPixelColor(3, pixels.Color(0, 150, 0));
}
else if (discordMute==0 && Discord > 102 || Discord==102){
analogSliderValues[1]=102*10;
knobDiscord.write(102);
pixels.setPixelColor(3, pixels.Color(0, 150, 0));
}
else if (discordMute==1){
analogSliderValues[1]=0;
pixels.setPixelColor(3, pixels.Color(150, 0, 0));
}
else {
analogSliderValues[1]=0;
knobDiscord.write(0);
pixels.setPixelColor(3, pixels.Color(150, 0, 0));
}
if (operaMute==0 && Opera > 0 && Opera < 102){
analogSliderValues[2]=Opera*10;
pixels.setPixelColor(2, pixels.Color(0, 150, 0));
}
else if (operaMute ==0 && (Opera > 102 || Opera==102)){
analogSliderValues[2]=102*10;
knobOpera.write(102);
pixels.setPixelColor(2, pixels.Color(0, 150, 0));
}
else if (operaMute==1){
analogSliderValues[2]=0;
pixels.setPixelColor(2, pixels.Color(150, 0, 0));
}
else {
analogSliderValues[2]=0;
knobOpera.write(0);
pixels.setPixelColor(2, pixels.Color(150, 0, 0));
}
if (gamingMute==0 && Gaming > 0 && Gaming < 102){
analogSliderValues[3]=Gaming*10;
pixels.setPixelColor(1, pixels.Color(0, 150, 0));
}
else if (gamingMute==0 && (Gaming > 102 || Gaming==102)){
analogSliderValues[3]=102*10;
knobGaming.write(102);
pixels.setPixelColor(1, pixels.Color(0, 150, 0));
}
else if (gamingMute==1){
analogSliderValues[3]=0;
pixels.setPixelColor(1, pixels.Color(150, 0, 0));
}
else {
analogSliderValues[3]=0;
knobGaming.write(0);
pixels.setPixelColor(1, pixels.Color(150, 0, 0));
}
if (musicMute==0 && Music > 0 && Music < 102){
analogSliderValues[4]=Music*10;
pixels.setPixelColor(0, pixels.Color(0, 150, 0));
}
else if (musicMute ==0 && (Music > 102 || Music==102)){
analogSliderValues[4]=102*10;
knobMusic.write(102);
pixels.setPixelColor(0, pixels.Color(0, 150, 0));
}
else if (musicMute==1){
analogSliderValues[4]=0;
pixels.setPixelColor(0, pixels.Color(150, 0, 0));
}
else {
analogSliderValues[4]=0;
knobMusic.write(0);
pixels.setPixelColor(0, pixels.Color(150, 0, 0));
}
}
Merci d'avoir pris le temps de lire jusqu'au bout