Hello,
i try to use the Libary from 0xPIT. It works fine with one Encoder,
but i need a solution for two Encoders with PushButtons.
in the issues of the Libary i found this:
now i change the code according to the manual in the issue and
also i change my sketch to this:
(but only encoder one works, encoder two is dead)
#include <TimerThree.h>
#include <Keyboard.h>
#include <ClickEncoder.h>
#include <TimerOne.h>
ClickEncoder *encoder01;
ClickEncoder *encoder02;
int16_t last01, value01;
int16_t last02, value02;
void timerIsr01()
{
encoder01->service();
}
void timerIsr02()
{
encoder02->service();
}
void setup()
{
Serial.begin(9600);
encoder01 = new ClickEncoder(A1, A0, A2, 4); // Encoder Pin an A0 und A1, Button Pin an A2; Restlichen Pins direkt an GND ### 4 = stepsPerNotch
encoder02 = new ClickEncoder(A4, A3, A5, 4); // Encoder Pin an A0 und A1, Button Pin an A2; Restlichen Pins direkt an GND ### 4 = stepsPerNotch
Timer1.initialize(1000);
Timer1.attachInterrupt(timerIsr01);
Timer3.initialize(1000);
Timer3.attachInterrupt(timerIsr02);
last01 = -1;
last02 = -1;
}
void loop()
{
value01 += encoder01->getValue();
if (value01 != last01)
{
if (value01 < last01)
{
Serial.print(value01);
Serial.print("\n01: Right \n");
}
if (value01 > last01)
{
Serial.print(value01);
Serial.print("\n01: Left \n");
}
last01 = value01;
}
ClickEncoder::Button b = encoder01->getButton();
if (b != ClickEncoder::Open)
{
switch (b)
{
case ClickEncoder::Pressed:
Serial.print("01: Pressed \n");
break;
case ClickEncoder::Held:
Serial.print("01: Held \n");
break;
case ClickEncoder::Released:
Serial.print("01: Released \n");
break;
case ClickEncoder::Clicked:
Serial.print("01: Clicked \n");
break;
case ClickEncoder::DoubleClicked:
Serial.print("01: DoubleClicked \n");
break;
}
// E N C O D E R 2
value02 += encoder02->getValue();
if (value02 != last02)
{
if (value02 < last02)
{
Serial.print(value02);
Serial.print("\n01: Right \n");
}
if (value02 > last02)
{
Serial.print(value02);
Serial.print("\n02: Left \n");
}
last02 = value02;
}
ClickEncoder::Button c = encoder02->getButton();
if (c != ClickEncoder::Open)
{
switch (c)
{
case ClickEncoder::Pressed:
Serial.print("02: Pressed \n");
break;
case ClickEncoder::Held:
Serial.print("02: Held \n");
break;
case ClickEncoder::Released:
Serial.print("02: Released \n");
break;
case ClickEncoder::Clicked:
Serial.print("02: Clicked \n");
break;
case ClickEncoder::DoubleClicked:
Serial.print("02: DoubleClicked \n");
break;
}
}
}
}
another code: also dont work
#include <Keyboard.h>
#include <ClickEncoder.h>
#include <TimerOne.h>
ClickEncoder *encoder01;
ClickEncoder *encoder02;
int16_t last01, value01;
int16_t last02, value02;
void timerIsr01()
{
encoder01->service();
}
void timerIsr02()
{
encoder02->service();
}
void setup()
{
Serial.begin(9600);
encoder01 = new ClickEncoder(A1, A0, A2, 4); // Encoder Pin an A0 und A1, Button Pin an A2; Restlichen Pins direkt an GND ### 4 = stepsPerNotch
encoder02 = new ClickEncoder(A4, A3, A5, 4); // Encoder Pin an A0 und A1, Button Pin an A2; Restlichen Pins direkt an GND ### 4 = stepsPerNotch
Timer1.initialize(1000);
Timer1.attachInterrupt(timerIsr01);
Timer1.attachInterrupt(timerIsr02);
last01 = -1;
last02 = -1;
}
void loop()
{
value01 += encoder01->getValue();
if (value01 != last01)
{
if (value01 < last01)
{
Serial.print(value01);
Serial.print("\n01: Right \n");
}
if (value01 > last01)
{
Serial.print(value01);
Serial.print("\n01: Left \n");
}
last01 = value01;
}
ClickEncoder::Button b = encoder01->getButton();
if (b != ClickEncoder::Open)
{
switch (b)
{
case ClickEncoder::Pressed:
Serial.print("01: Pressed \n");
break;
case ClickEncoder::Held:
Serial.print("01: Held \n");
break;
case ClickEncoder::Released:
Serial.print("01: Released \n");
break;
case ClickEncoder::Clicked:
Serial.print("01: Clicked \n");
break;
case ClickEncoder::DoubleClicked:
Serial.print("01: DoubleClicked \n");
break;
}
// E N C O D E R 2
value02 += encoder02->getValue();
if (value02 != last02)
{
if (value02 < last02)
{
Serial.print(value02);
Serial.print("\n01: Right \n");
}
if (value02 > last02)
{
Serial.print(value02);
Serial.print("\n02: Left \n");
}
last02 = value02;
}
ClickEncoder::Button c = encoder02->getButton();
if (c != ClickEncoder::Open)
{
switch (c)
{
case ClickEncoder::Pressed:
Serial.print("02: Pressed \n");
break;
case ClickEncoder::Held:
Serial.print("02: Held \n");
break;
case ClickEncoder::Released:
Serial.print("02: Released \n");
break;
case ClickEncoder::Clicked:
Serial.print("02: Clicked \n");
break;
case ClickEncoder::DoubleClicked:
Serial.print("02: DoubleClicked \n");
break;
}
}
}
}