#include #include #include #include #define SCREEN_ADDRESS 0x3C // Rev 2 and 3 Config #define ENC_BTN_PIN 14 #define ENC_D1_PIN 17 #define ENC_D2_PIN 4 #define START_STOP_BTN_PIN 5 #define SHIFT_BTN_PIN 12 #define EXT_INPUT_PIN 2 //needs to be an interrupt pin #define ANALOGUE_INPUT_1_PIN A7 #define ANALOGUE_INPUT_2_PIN A6 const byte outsPins[6] = { 7, 8, 10, 6, 9, 11 }; const byte clockOutPin = 3; int CV1Calibration = 0; int CV2Calibration = 0; bool rotateScreen = false; int a1Input = 0; int a2Input = 0; U8G2_SSD1306_128X64_NONAME_2_HW_I2C u8g2(U8G2_R2, SCL, SDA, U8X8_PIN_NONE); //Font const uint8_t velvetscreen[437] U8G2_FONT_SECTION("velvetscreen") = "\64\0\2\2\3\3\2\3\4\5\5\0\0\5\0\5\0\0\221\0\0\1\230 \4\200\134%\11\255tT" "R\271RI(\6\252\334T\31)\7\252\134bJ\12+\7\233\345\322J\0,\5\221T\4-\5\213" "f\6.\5\211T\2/\6\244\354c\33\60\10\254\354T\64\223\2\61\7\353\354\222\254\6\62\11\254l" "\66J*\217\0\63\11\254l\66J\32\215\4\64\10\254l\242\34\272\0\65\11\254l\206\336h$\0\66" "\11\254\354T^\61)\0\67\10\254lF\216u\4\70\11\254\354TL*&\5\71\11\254\354TL;" ")\0:\6\231UR\0A\10\254\354T\34S\6B\11\254lV\34)\216\4C\11\254\354T\324\61" ")\0D\10\254lV\64G\2E\10\254l\206\36z\4F\10\254l\206^\71\3G\11\254\354TN" "\63)\0H\10\254l\242\34S\6I\6\251T\206\0J\10\254\354k\231\24\0K\11\254l\242J\62" "\225\1L\7\254lr{\4M\11\255t\362ZI\353\0N\11\255t\362TI\356\0O\10\254\354T" "\64\223\2P\11\254lV\34)g\0Q\10\254\354T\264b\12R\10\254lV\34\251\31S\11\254\354" "FF\32\215\4T\7\253dVl\1U\10\254l\242\63)\0V\11\255t\262Ne\312\21W\12\255" "t\262J*\251.\0X\11\254l\242L*\312\0Y\12\255tr\252\63\312(\2Z\7\253df*" "\7p\10\255\364V\266\323\2q\7\255\364\216\257\5r\10\253d\242\32*\2t\6\255t\376#w\11" "\255\364V\245FN\13x\6\233dR\7\0\0\0\4\377\377\0"; const uint8_t fabryka[450] U8G2_FONT_SECTION("fabryka") = "\17\0\4\4\4\5\2\1\6\17\30\1\0\30\0\0\0\1K\0\0\1\245%'\17\37\313\330R#&" "\32!F\14\211I\310\24!\65\204(MF\21)Cd\304\10\62b\14\215\60Vb\334\20\0/\15" "\376\36\357\244$\351\77\35;\26\0\60$\216\37\17*\65,\210\35\264\335\61T\42\14\11\61#\306\210" " \23\242\220\235\63h\303c$\330\250B\3\0\61\27\216\37\27\311\202\346\216\221\30Ed\324\230Q\202" "\306\316\377\263\26\35\62\33\216\37\17*\65,\210\35\64\70v\246\344\316h\203\252$\321\261s\373\340\1" "\3\63\35\216\37\17*\65,\210\35\64\70v(IZZKv\266\6\15\36#\301F\25\32\0\64\37" "\216\37\227\240\331\20\32Bj\310\260\21\304F\214\33\61n\304\70\203\366\360\301\203\20m\347\3\65\32\216" "\37\7\213.\306\316'\205\326\60!E\226\354\334\32 (CV1Calibration)) { a1Input = map(analogRead(ANALOGUE_INPUT_1_PIN), CV1Calibration, 1023, 512, 1023); } else if (analogRead(ANALOGUE_INPUT_1_PIN) < (CV1Calibration)) { a1Input = map(analogRead(ANALOGUE_INPUT_1_PIN), 0, CV1Calibration, 0, 512); } else { a1Input = 512; } //a2Input = map(analogRead(ANALOGUE_INPUT_2_PIN), 0 - CV2Calibration, 1023 - CV2Calibration, 0, 1023); } void updateScreen() { u8g2.firstPage(); do { u8g2.setFont(velvetscreen); String valueStr = String(analogRead(ANALOGUE_INPUT_1_PIN)); char valueChar[16]; u8g2.drawStr(10, 8, "CV1:"); valueStr.toCharArray(valueChar, 16); u8g2.drawStr(32, 8, valueChar); u8g2.drawStr(64, 8, "CAL:"); valueStr = String(a1Input); valueStr.toCharArray(valueChar, 16); u8g2.drawStr(86, 8, valueChar); u8g2.drawStr(10, 16, "MAP:"); valueStr = String(map(a1Input, -1, 1024, -6, 6)); valueStr.toCharArray(valueChar, 16); u8g2.drawStr(32, 16, valueChar); /* u8g2.drawStr(10, 32, "CV2:"); valueStr = String(analogRead(ANALOGUE_INPUT_2_PIN)); valueStr.toCharArray(valueChar, 16); u8g2.drawStr(32, 32, valueChar); u8g2.drawStr(64, 32, "CAL:"); valueStr = String(analogRead(a2Input)); valueStr.toCharArray(valueChar, 16); u8g2.drawStr(86, 32, valueChar);*/ if (!digitalRead(SHIFT_BTN_PIN)) { calibrateCVs(); u8g2.drawStr(40, 64, "CALIBRATING"); } } while ( u8g2.nextPage() ); } void calibrateCVs() { CV1Calibration = analogRead(ANALOGUE_INPUT_1_PIN); CV2Calibration = analogRead(ANALOGUE_INPUT_2_PIN); //CV1Calibration = 255 - (analogRead(ANALOGUE_INPUT_1_PIN) / 2); //CV2Calibration = 255 - (analogRead(ANALOGUE_INPUT_2_PIN) / 2); } void checkScreenRotation() { if (rotateScreen) { u8g2.setDisplayRotation(U8G2_R0); } else { u8g2.setDisplayRotation(U8G2_R2); } }