#include <U8glib.h>
#include "Encoder.h"
#define ENC_A 3
#define ENC_B 2
#define ENC_BTN 4
#define SCL_PIN 11
#define SDA_PIN 13
#define RESET_PIN A0
#define DC_PIN A1
#define CS_PIN A2
U8GLIB_SSD1306_128X64 u8g = U8GLIB_SSD1306_128X64();
Encoder enc(ENC_B, ENC_A);
unsigned long ticks;
uint8_t mask = 0x00;
int8_t selectedFrame = 1;
uint8_t btnState = 0;
uint8_t btnChangeTick = 0;
void setup() {
pinMode(ENC_BTN, INPUT_PULLUP);
}
void drawFrame(u8g_int_t number) {
uint8_t pinState = (mask >> number) & 0x1;
uint32_t phase = ticks % 1000;
if (phase <= 500 || selectedFrame != number) {
if (pinState) {
u8g.drawBox(8 + 32 * number, 8, 16, 16);
} else {
u8g.drawFrame(8 + 32 * number, 8, 16, 16);
}
}
}
void checkPush() {
if (ticks - btnChangeTick >= 256) {
int current = digitalRead(ENC_BTN);
if (btnState != current) {
btnState = current;
btnChangeTick = ticks;
if (btnState == LOW) {
mask = mask ^ (1 << selectedFrame);
}
}
}
}
void draw() {
// graphic commands to redraw the complete screen should be placed here
u8g.setFont(u8g_font_unifont);
drawFrame(0);
drawFrame(1);
drawFrame(2);
drawFrame(3);
// String encVal = String(enc.read());
// u8g.drawStr(20, 32, encVal.c_str());
}
void loop() {
selectedFrame = 0x03 & (enc.read() / 4);
// picture loop
u8g.firstPage();
do {
ticks = millis();
checkPush();
draw();
} while (u8g.nextPage());
}