Skip to content

Commit

Permalink
improve example
Browse files Browse the repository at this point in the history
  • Loading branch information
ladyada committed May 4, 2021
1 parent 2bb0e01 commit ed2dbf6
Showing 1 changed file with 70 additions and 8 deletions.
78 changes: 70 additions & 8 deletions examples/encoder/encoder_basic/encoder_basic.ino
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,85 @@
void disableEncoderInterrupt();
void setEncoderPosition(int32_t pos);
*/

#include "Adafruit_seesaw.h"
#include <seesaw_neopixel.h>

#define SS_SWITCH 24
#define SS_NEOPIX 6

#define SEESAW_ADDR 0x36

Adafruit_seesaw ss;
seesaw_NeoPixel sspixel = seesaw_NeoPixel(1, SS_NEOPIX, NEO_GRB + NEO_KHZ800);

int32_t encoder_position;

void setup() {
Serial.begin(9600);
Serial.begin(115200);
while (!Serial) delay(10);

Serial.println("Looking for seesaw!");

if(!ss.begin(0x36)){
Serial.println("ERROR!");
while(1);
if (! ss.begin(SEESAW_ADDR) || ! sspixel.begin(SEESAW_ADDR)) {
Serial.println("Couldn't find seesaw on default address");
while(1) delay(10);
}
else Serial.println("seesaw started");
Serial.println("seesaw started");

uint32_t version = ((ss.getVersion() >> 16) & 0xFFFF);
if (version != 4991){
Serial.print("Wrong firmware loaded? ");
Serial.println(version);
while(1) delay(10);
}
Serial.println("Found Product 4991");

// set not so bright!
sspixel.setBrightness(20);
sspixel.show();

// use a pin for the built in encoder switch
ss.pinMode(SS_SWITCH, INPUT_PULLUP);

// get starting position
encoder_position = ss.getEncoderPosition();

Serial.println("Turning on interrupts");
delay(10);
ss.setGPIOInterrupts((uint32_t)1 << SS_SWITCH, 1);
ss.enableEncoderInterrupt();
}

void loop() {
Serial.println(ss.getEncoderPosition());
delay(400);
if (! ss.digitalRead(SS_SWITCH)) {
Serial.println("Button pressed!");
}

int32_t new_position = ss.getEncoderPosition();
// did we move arounde?
if (encoder_position != new_position) {
Serial.println(new_position); // display new position

// change the neopixel color
sspixel.setPixelColor(0, Wheel(new_position & 0xFF));
sspixel.show();
encoder_position = new_position; // and save for next round
}

// don't overwhelm serial port
delay(10);
}


uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return sspixel.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return sspixel.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return sspixel.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

0 comments on commit ed2dbf6

Please sign in to comment.