diff --git a/ANO_encoder_demo/ANO_encoder_demo.ino b/ANO_encoder_demo/ANO_encoder_demo.ino new file mode 100644 index 000000000..2d47177ec --- /dev/null +++ b/ANO_encoder_demo/ANO_encoder_demo.ino @@ -0,0 +1,84 @@ +#include +#include + +#define PIN_ENCODER_A 12 +#define PIN_ENCODER_B 13 +#define COM_A 11 // for wiring simplicity we set these output LOW +#define COM_B SDA // ... but you can just wire these to GND instead! +#define BUTTON_UP SCL +#define BUTTON_LEFT 5 +#define BUTTON_DOWN 6 +#define BUTTON_RIGHT 9 +#define BUTTON_IN 10 + +RotaryEncoder encoder(PIN_ENCODER_A, PIN_ENCODER_B, RotaryEncoder::LatchMode::TWO03); +// This interrupt will do our encoder reading/checking! +void checkPosition() { + encoder.tick(); // just call tick() to check the state. +} +int last_rotary = 0; + + +#define NUMPIXELS 12 +Adafruit_NeoPixel pixels(NUMPIXELS, A0, NEO_GRB + NEO_KHZ800); + + +void setup(void) { + Serial.begin(115200); +// while (!Serial); + Serial.println("ANO encoder + NeoPixel test"); + + pinMode(COM_A, OUTPUT); + digitalWrite(COM_A, LOW); + pinMode(COM_B, OUTPUT); + digitalWrite(COM_B, LOW); + + attachInterrupt(PIN_ENCODER_A, checkPosition, CHANGE); + attachInterrupt(PIN_ENCODER_B, checkPosition, CHANGE); + + pinMode(BUTTON_UP, INPUT_PULLUP); + pinMode(BUTTON_DOWN, INPUT_PULLUP); + pinMode(BUTTON_LEFT, INPUT_PULLUP); + pinMode(BUTTON_RIGHT, INPUT_PULLUP); + pinMode(BUTTON_IN, INPUT_PULLUP); + pixels.begin(); + pixels.setBrightness(30); + pixels.show(); +} + + +void loop(void) { + // read encoder + int curr_rotary = encoder.getPosition(); + RotaryEncoder::Direction direction = encoder.getDirection(); + + pixels.clear(); + if (curr_rotary != last_rotary) { + Serial.print("Encoder value: "); + Serial.print(curr_rotary); + Serial.print(" direction: "); + Serial.println((int)direction); + } + last_rotary = curr_rotary; + + pixels.setPixelColor((curr_rotary + (1000*NUMPIXELS)) % NUMPIXELS, pixels.Color(0, 150, 0)); + + if (! digitalRead(BUTTON_UP)) { + pixels.setPixelColor(0, pixels.Color(150, 0, 0)); + } + if (! digitalRead(BUTTON_LEFT)) { + pixels.setPixelColor(NUMPIXELS/4, pixels.Color(150, 0, 0)); + } + if (! digitalRead(BUTTON_DOWN)) { + pixels.setPixelColor(NUMPIXELS/2, pixels.Color(150, 0, 0)); + } + if (! digitalRead(BUTTON_RIGHT)) { + pixels.setPixelColor(NUMPIXELS*3/4, pixels.Color(150, 0, 0)); + } + if (! digitalRead(BUTTON_IN)) { + pixels.fill(pixels.Color(50, 50, 50)); + } + pixels.show(); + + delay(20); +}