#include <U8g2lib.h>
#include <Wire.h>
// #include <PWM.h>
volatile int page_ID;
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
const static unsigned char bitmap1[] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x00, 0x05, 0x00, 0x00, 0xCF, 0x80, 0x1F, 0x00, 0x80, 0xE7, 0x80, 0x3F, 0x00, 0xC0, 0x63, 0x80, 0x3F, 0x00, 0xE0, 0x71, 0x80, 0x3F, 0x00, 0xF0, 0x71, 0x80, 0x7F, 0x00, 0xF8, 0x38, 0x80, 0x7F, 0x00, 0x7C, 0x3C, 0x80, 0xFF, 0x00, 0x3E, 0x3E, 0x80, 0xFF, 0x00, 0x1E, 0x1F, 0x80, 0xFF, 0x01, 0x8F, 0x1F, 0x80, 0xEF, 0x81, 0xC7, 0x1F, 0x80, 0xEF, 0x83, 0xE7, 0x1F, 0x80, 0xEF, 0x83, 0xF3, 0x1F, 0x80, 0xCF, 0xC3, 0x79, 0x1F, 0x80, 0xCF, 0xC7, 0x39, 0x1F, 0x80, 0xCF, 0xC7, 0x1C, 0x1F, 0x80, 0x8F, 0xCF, 0x0E, 0x1F, 0x80, 0x8F, 0xCF, 0x06, 0x1F, 0x80, 0x0F, 0x4F, 0x02, 0x1F, 0x80, 0x0F, 0x5F, 0x03, 0x1F, 0x80, 0x0F, 0x3F, 0x01, 0x1F, 0x80, 0x0F, 0x7E, 0x00, 0x1F, 0x80, 0x0F, 0x7E, 0x00, 0x1F, 0x80, 0x0F, 0x3C, 0x00, 0x1F, 0x80, 0x0F, 0x3C, 0x00, 0x1F, 0x80, 0x0F, 0x18, 0x00, 0x1F, 0x80, 0x0F, 0x18, 0x00, 0x1F, 0x80, 0x0F, 0x00, 0x00, 0x1F, 0x80, 0x0F, 0x00, 0x00, 0x1F, 0xC0, 0x07, 0x00, 0x00, 0x1F, 0xE0, 0x07, 0x00, 0x00, 0x1F, 0xFF, 0x03, 0x00, 0x00, 0x0F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00};
void BUZ_OUT(int F, int Time) {
for (int i = (1); i <= (F); i = i + (1)) {
digitalWrite(9, HIGH);
delayMicroseconds(Time);
digitalWrite(9, LOW);
delayMicroseconds(Time);
}
}
int Get_key() {
int key_time = 0;
int key_type = 0;
if (!digitalRead(4) && digitalRead(2)) {
key_type = 4;
} else if (!digitalRead(2) && digitalRead(4)) {
key_type = 5;
} else if (!digitalRead(2) && !digitalRead(4)) {
key_type = 6;
}
while (!digitalRead(4) || !digitalRead(2)) {
if (key_time > 110) {
if (!digitalRead(4) && digitalRead(2)) {
key_type = 1;
} else if (!digitalRead(2) && digitalRead(4)) {
key_type = 2;
} else if (!digitalRead(2) && !digitalRead(4)) {
key_type = 3;
}
break;
}
key_time++;
delay(5);
}
return key_type;
}
void procedure(int pageID) {
u8g2.clearDisplay();
switch (page_ID) {
case 0:
u8g2.firstPage();
do
{
u8g2.drawXBMP(16, 0, 40, 40, bitmap1);
} while (u8g2.nextPage());
break;
case 1:
for (int i = 72; i >= 20; i = i + (-4)) {
u8g2.firstPage();
do
{
u8g2.setFont(u8g2_font_open_iconic_all_4x_t);
u8g2.drawGlyph(i, 4 + 4 * 8, 259);
} while (u8g2.nextPage());
}
break;
case 2:
for (int i = 72; i >= 20; i = i + (-4)) {
u8g2.firstPage();
do
{
u8g2.setFont(u8g2_font_open_iconic_all_4x_t);
u8g2.drawGlyph(i, 4 + 4 * 8, 129);
} while (u8g2.nextPage());
}
break;
case 3:
for (int i = 72; i >= 20; i = i + (-4)) {
u8g2.firstPage();
do
{
u8g2.setFont(u8g2_font_open_iconic_all_4x_t);
u8g2.drawGlyph(i, 4 + 4 * 8, 277);
} while (u8g2.nextPage());
}
break;
}
}
void setup() {
pinMode(3, OUTPUT);
page_ID = 0;
//InitTimersSafe();
//bool success = SetPinFrequencySafe(3, 5000);
digitalWrite(3, HIGH);
pinMode(2, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
analogReference(EXTERNAL);
u8g2.begin();
procedure(0);
BUZ_OUT(300, 500);
BUZ_OUT(300, 400);
BUZ_OUT(400, 200);
pinMode(9, OUTPUT);
Serial.begin(9600);
pinMode(A2, INPUT);
u8g2.enableUTF8Print();
}
void loop() {
if (!digitalRead(4) || !digitalRead(2)) {
BUZ_OUT(150, 200);
switch (Get_key()) {
case 1:
Serial.println("longL");
break;
case 2:
Serial.println("longR");
if (page_ID == 1) {
page_ID = 4;
}
break;
case 3:
Serial.println("longLR");
break;
case 4:
Serial.println("L");
break;
case 5:
digitalWrite(3, HIGH);
Serial.println("R");
if (page_ID >= 3) {
page_ID = 0;
}
page_ID = page_ID + 1;
procedure(page_ID);
break;
case 6:
Serial.println("LR");
break;
}
while (!digitalRead(4) || !digitalRead(2)) {
delay(10);
}
}
if (page_ID == 4) {
digitalWrite(3, LOW);
u8g2.firstPage();
do
{
u8g2.setFont(u8g2_font_timB14_tf);
u8g2.setFontPosTop();
u8g2.setCursor(0, 0);
u8g2.print(analogRead(A2));
} while (u8g2.nextPage());
}
}