Hi all thanks for your support,
How is this? I have to shoot, but I'll be hack on here tomorrow!
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_DC 48
#define OLED_CS 52
#define OLED_CLK 46
#define OLED_MOSI 44
#define OLED_RESET 50
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
#if (SSD1306_LCDHEIGHT != 32)
#endif
enum PinAssignments {
encoderPinA = 21,
encoderPinB = 20,
clearButton = 42
};
volatile unsigned int encoderPos = 0;
unsigned int lastReportedPos = 1;
boolean A_set = false;
boolean B_set = false;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC);
display.display();
delay(500);
display.clearDisplay();
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
pinMode(clearButton, INPUT);
digitalWrite(encoderPinA, HIGH);
digitalWrite(encoderPinB, HIGH);
digitalWrite(clearButton, HIGH);
attachInterrupt(2, doEncoderA, CHANGE);
attachInterrupt(3, doEncoderB, CHANGE);
}
void loop() {
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("EncoderPos");
display.setTextSize(5);
display.setTextColor(WHITE);
display.print(encoderPos, DEC);
display.display();
display.clearDisplay();
if (lastReportedPos != encoderPos) {
lastReportedPos = encoderPos;
}
if (digitalRead(clearButton) == LOW ) {
encoderPos = 0;
}
}
void doEncoderA(){
A_set = !A_set;
if ( A_set && !B_set )
encoderPos += 1;
}
void doEncoderB(){
if( digitalRead(encoderPinB) != B_set ) {
B_set = !B_set;
if( B_set && !A_set )
encoderPos -= 1;
}
}