#include <GyverOLED.h>
#include <EncButton.h>
EncButton<EB_TICK, 8, 7, 6> enc;
GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;
int str[3] = {9, 10, 11};
int stolb[5] = {12, A0, A1, A2, A3};
boolean knopki[15];
boolean knopki1[15];
void setup() {
Serial.begin(115200);
oled.init();
oled.setContrast(255);
oled.clear();
oled.update();
for(int i=0;i<8;i++)oled.rect(7+i*15,2,7+i*15+11,13,OLED_STROKE);
oled.rect(0,16,127,63,OLED_STROKE);
oled.update();
for (int i = 0; i < 14; i++)knopki1[i] = false;
for (int i = 0; i < 14; i++)knopki[i] = false;
for (int i = 0; i < 3; i++)pinMode(str[i], OUTPUT);
for (int i = 0; i < 5; i++)pinMode(stolb[i], INPUT_PULLUP);
}
void loop() {
knp();
encoder();unsigned long
delay(10);
}
void knp() {
bool w = false;
digitalWrite(str[0], !HIGH);
digitalWrite(str[1], HIGH);
digitalWrite(str[2], HIGH);
for (int i = 0; i < 5; i++) knopki[i] = !digitalRead(stolb[i]);
digitalWrite(str[0], HIGH);
digitalWrite(str[1], !HIGH);
digitalWrite(str[2], HIGH);
for (int i = 0; i < 5; i++) knopki[i + 5] = !digitalRead(stolb[i]);
digitalWrite(str[0], HIGH);
digitalWrite(str[1], HIGH);
digitalWrite(str[2], !HIGH);
for (int i = 0; i < 5; i++) knopki[i + 10] = !digitalRead(stolb[i]);
for (int i = 0; i < 15; i++) {
if (knopki[i])
if (!knopki1[i]) knopki1[i] = true;
else knopki[i] = false;
else knopki1[i] = false;
}
for (int i = 0; i < 15; i++)
if (knopki[i]) w = true;
if (w) {
for (int i = 0; i < 15; i++) Serial.print(knopki[i]);
Serial.println();
}
}
void encoder() {
enc.tick();
if (enc.left()) Serial.println("left");
if (enc.right()) Serial.println("right");
if (enc.leftH()) Serial.println("leftH");
if (enc.rightH()) Serial.println("rightH");
if (enc.press()) Serial.println("press");
if (enc.click()) Serial.println("click");
if (enc.release()) Serial.println("release");
if (enc.held()) Serial.println("held");
if (enc.step()) Serial.println("step");
if (enc.hasClicks(1)) Serial.println("action 1 clicks");
if (enc.hasClicks(3)) Serial.println("action 3 clicks");
}