#include <SimpleRotary.h>
#include <Wire.h>
#include <U8g2lib.h>
//-------- rotary
#define pRotSw 3
#define pRotDt 4
#define pRotClk 5
U8G2_SSD1306_128X64_NONAME_F_HW_I2C lcd(U8G2_R0, /* reset=*/U8X8_PIN_NONE);
SimpleRotary rot(pRotClk, pRotDt, pRotSw);
int menuSettings = 0;
bool editMode = false;
bool updateDisplay = false;
int runShot = 100;
#define SETCHK 123123123
struct WDSettings {
int CamDelay = 100;
int NumShot = 1;
int ShotDelay = 1;
int D1Size = 25;
int D2Size = 25;
int DGap = 100;
uint32_t chk = SETCHK;
};
WDSettings conf;
void setup() {
Serial.begin(115200);
lcd.begin();
// welcomeScreen();
rot.setDebounceDelay(0);
rot.setErrorDelay(0);
updateDisplay = true;
}
void loop() {
// put your main code here, to run repeatedly:
displayHandler();
// rotHandler
rotHandler();
}
void pageHeader() {
lcd.setFont(u8g2_font_nokiafc22_tr);
lcd.drawStr(0, 10, "DWN Project");
lcd.setCursor(0, 16);
}
void pageFrame() {
lcd.drawRFrame(0, 16, 126, 48, 4);
lcd.drawVLine(42, 16, 48);
}
void hoverIcon(int x, int y) {
lcd.setDrawColor(1);
lcd.drawBox(x, y, 10, 10);
lcd.setDrawColor(0);
}
void genIcon() {
lcd.setFont(u8g2_font_open_iconic_all_1x_t);
(menuSettings == 1) ? hoverIcon(5, 21) : lcd.setDrawColor(1);
lcd.drawGlyph(6, 30, 0x0048);
(menuSettings == 2) ? hoverIcon(15, 21) : lcd.setDrawColor(1);
lcd.drawGlyph(16, 30, 0x009a);
(menuSettings == 3) ? hoverIcon(27, 21) : lcd.setDrawColor(1);
lcd.drawGlyph(28, 30, 0x008e);
(menuSettings == 4) ? hoverIcon(5, 35) : lcd.setDrawColor(1);
lcd.drawGlyph(6, 44, 0x006c);
(menuSettings == 5) ? hoverIcon(15, 35) : lcd.setDrawColor(1);
lcd.drawGlyph(16, 44, 0x0072);
(menuSettings == 6) ? hoverIcon(27, 35) : lcd.setDrawColor(1);
lcd.drawGlyph(28, 44, 0x010d);
(menuSettings == 7) ? hoverIcon(5, 49) : lcd.setDrawColor(1);
lcd.drawGlyph(6, 58, 0x009c);
(menuSettings == 0) ? hoverIcon(27, 49) : lcd.setDrawColor(1);
lcd.drawGlyph(28, 58, 0x004b);
lcd.setDrawColor(1);
}
void showConfVal(int val, int x, int y, int w) {
(editMode) ? lcd.setFont(u8g2_font_crox3cb_tn) : lcd.setFont(u8g2_font_crox3c_tn);
lcd.setCursor(x, y);
lcd.print(val);
lcd.setDrawColor(1);
}
void genDetail() {
bool showFoot = true;
switch (menuSettings) {
case 0:
lcd.setFont(u8g2_font_9x15B_tr);
lcd.drawStr(67, 36, "PUSH");
lcd.drawStr(48, 51, "TO START");
showFoot = false;
break;
case 1:
lcd.setFont(u8g2_font_nokiafc22_tr);
lcd.drawStr(46, 26, "Drop #1 Size");
showConfVal(conf.D1Size, 46, 46, 80);
break;
case 2:
lcd.setFont(u8g2_font_nokiafc22_tr);
lcd.drawStr(46, 26, "GAP Delay");
showConfVal(conf.DGap, 46, 46, 70);
break;
case 3:
lcd.setFont(u8g2_font_nokiafc22_tr);
lcd.drawStr(46, 26, "Drop #2 Size");
showConfVal(conf.D2Size, 46, 46, 70);
break;
case 4:
lcd.setFont(u8g2_font_nokiafc22_tr);
lcd.drawStr(46, 26, "Camera Delay");
showConfVal(conf.CamDelay, 46, 46, 70);
break;
case 5:
lcd.setFont(u8g2_font_nokiafc22_tr);
lcd.drawStr(46, 26, "Number Shot");
showConfVal(conf.NumShot, 46, 46, 70);
break;
case 6:
lcd.setFont(u8g2_font_nokiafc22_tr);
lcd.drawStr(46, 26, "Shot Delay");
showConfVal(conf.ShotDelay, 46, 46, 70);
break;
case 7:
lcd.setFont(u8g2_font_9x15B_tr);
lcd.drawStr(67, 36, "PUSH");
lcd.drawStr(50, 51, "TO SAVE");
showFoot = false;
break;
}
if (showFoot) {
lcd.setFont(u8g2_font_5x8_tr);
if (editMode) {
lcd.drawStr(46, 60, "push to save");
} else {
lcd.drawStr(46, 60, "push to edit");
}
}
}
void pageSettings() {
pageHeader();
pageFrame();
genIcon();
genDetail();
}
void welcomeScreen() {
lcd.clearBuffer();
lcd.setFont(u8g2_font_helvB08_tr);
lcd.drawStr(36, 12, "DWN Project");
// lcd.sendBuffer();
// delay(500);
lcd.setFont(u8g2_font_helvB10_tr);
lcd.drawStr(16, 34, "WATER DROP");
lcd.setFont(u8g2_font_helvB08_tr);
lcd.drawStr(26, 45, "PHOTOGRAPHY");
// lcd.sendBuffer();
// delay(500);
lcd.setFont(u8g2_font_helvB08_tr);
lcd.drawStr(44, 62, "ver: 1.0.1");
lcd.sendBuffer();
delay(2000);
lcd.clearBuffer();
}
void pageRunning() {
lcd.setFont(u8g2_font_helvB08_tr);
lcd.drawStr(2, 12, "Running...");
lcd.setFont(u8g2_font_crox3c_tn);
int offset = 20;
lcd.setCursor(2 + offset,40);
lcd.print(runShot);
lcd.setCursor(40 + offset,40);
lcd.print("/");
lcd.setCursor(60 + offset,40);
lcd.print(conf.NumShot);
lcd.setFont(u8g2_font_5x8_tr);
lcd.drawStr(2, 60, "push to stop");
}
void displayHandler() {
if (updateDisplay) {
lcd.clearBuffer();
// pageSettings();
pageRunning();
lcd.sendBuffer();
delay(5);
updateDisplay = false;
}
}
void rotHandler() {
byte i = rot.rotate();
byte p = rot.push();
if (i == 1 || i == 2 || p == 1) {
if (!editMode) {
if (i == 1) menuSettings++;
if (i == 2) menuSettings--;
if (menuSettings < 0) menuSettings = 7;
if (menuSettings > 7) menuSettings = 0;
}
if (editMode) {
if (menuSettings == 1) {
if (i == 1) conf.D1Size++;
if (i == 2) conf.D1Size--;
}
}
if (p == 1) editMode = !editMode;
//Serial.println(menuSettings);
updateDisplay = true;
}
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
encoder1:CLK
encoder1:DT
encoder1:SW
encoder1:VCC
encoder1:GND