Bonjour,
Je sollicite un peu d'aide afin d'affiner le Petit Prg que j'ai mis au point en mixant plusieurs sources.
le but est d'utiliser une Arduino Leonardo comme joystick permettant de gérer 10 encodeurs rotatifs, chacun générant un clic dans les sens horaire sur le Btn 0 et antihoraire sur le Btn 1
Le tout sans rebond et 100% logiciel
Tout fonctionne ... hormis a chaque changement de sens qui génère un clic erroné.
Un œil nouveau étant souvent la solution, je m'en remet a vous.
ci dessous le code pour 1 encodeur,
#include <Joystick.h>
#include "RotaryEncoder.h"
Joystick_ Joystick;
RotaryEncoder encoder01(0, 1);
static int pos01 = 0;
int newPos01;
int test01;
int current_State0, current_State1;
int last_State0, last_State1;
void setup() {
for (int i = 0; i < 14; i++) {
pinMode(i, INPUT_PULLUP);
}
// Initialialisation Joystick Library
Joystick.begin();
}
void loop() {
//// Read Switches 0-1
encoder01.tick();
newPos01 = encoder01.getPosition();
// La console de test affiche des resultats coherents avec le sens de rotation ...
// Test sens de rotation
if (pos01 != newPos01) {
if (pos01 < newPos01) {
//Serial.println("++");
test01 = 1;
} else {
//Serial.println("--");
test01 = -1;
}
pos01 = newPos01;
}
// ... Mais ... Pb Pour les Boutons du joystick a chaque chgt de sens !
// rotation
// ++ ++ ++ ++ -- -- -- -- ++ ++ ++ ++ -- -- -- --
// Btn Press
// 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
int current_State0 = !digitalRead(0);
if (current_State0 != last_State0) {
if (test01 > 0) {
Joystick.setButton(0, current_State0);
last_State0 = current_State0;
}
}
int current_State1 = !digitalRead(1);
if (current_State1 != last_State1) {
if (test01 < 0) {
Joystick.setButton(1, current_State1);
last_State1 = current_State1;
}
}
Joystick.sendState();
}