#include <Arduino.h>
#include <U8g2lib.h>
#include <TimerOne.h>
U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R2, 13, 11, 10, 8);
byte inPin1 = 7;
byte inPin2 = 6;
byte inPin3 = 5;
byte P1, P2;
uint8_t s, m, g;
boolean kropki;
const char tarczaX[60] = {
64, 61, 56, 53, 50, 48, 45, 42, 40, 40,
35, 34, 31, 29, 28, 28, 28, 29, 31, 34,
35, 38, 40, 42, 45, 48, 50, 53, 56, 61,
64, 68, 72, 76, 79, 82, 85, 87, 90, 92,
94, 96, 98, 99, 100, 100, 100, 99, 98, 96,
94, 92, 90, 87, 85, 82, 79, 76, 68, 64 };
const char tarczaY[60] = {
54, 54, 54, 54, 53, 52, 51, 49, 48, 48,
44, 43, 40, 37, 35, 32, 27, 26, 23, 21,
19, 17, 15, 13, 12, 10, 9, 8, 8, 8,
8, 8, 8, 8, 8, 9, 10, 12, 13, 15,
17, 19, 21, 23, 26, 32, 35, 37, 40, 42,
44, 46, 48, 48, 48, 52, 53, 54, 54, 54 };
void setup() {
u8g2.begin();
pinMode(inPin1, INPUT_PULLUP);
pinMode(inPin2, INPUT_PULLUP);
pinMode(inPin3, INPUT_PULLUP);
u8g2.setContrast(220);
Timer1.initialize(1000000);
Timer1.attachInterrupt(toggleOutput);
P1 = 0; P2 = 0; s = 0; m = 0; g = 0;
}
void loop() {
u8g2.setFont(u8g2_font_9x15B_tr);
u8g2.setFontDirection(2);
Dipsw();
u8g2.firstPage();
char m_str[3];
strcpy(m_str, u8x8_u8toa(m, 2));
do {
u8g2.drawStr(115,27,"9");
u8g2.drawStr(20,27,"3");
u8g2.drawStr(67,0,"6");
u8g2.drawStr(73,52,"12");
u8g2.drawDisc(64,32,3);
u8g2.drawDisc(42,57,2);
u8g2.drawDisc(24,49,2);
u8g2.drawDisc(24,14,2);
u8g2.drawDisc(42,5,2);
u8g2.drawDisc(85,5,2);
u8g2.drawDisc(104,14,2);
u8g2.drawDisc(104,49,2);
u8g2.drawDisc(85,57,2);
if (P1 == 1){ u8g2.drawStr(10,0,"M");}
if (P1 == 2){ u8g2.drawStr(10,0,"H");}
if (g == 0 or g == 12){u8g2.drawTriangle(64,49, 67,32, 61,32);}
if (g == 1 or g == 13){u8g2.drawTriangle(50,49, 67,34, 61,30);}
if (g == 2 or g == 14){u8g2.drawTriangle(40,42, 65,35, 60,30);}
if (g == 3 or g == 15){u8g2.drawTriangle(32,32, 64,35, 64,29);}
if (g == 4 or g == 16){u8g2.drawTriangle(40,21, 63,29, 63,35);}
if (g == 5 or g == 17){u8g2.drawTriangle(48,13, 66,30, 62,34);}
if (g == 6 or g == 18){u8g2.drawTriangle(64,13, 68,32, 60,32);}
if (g == 7 or g == 19){u8g2.drawTriangle(79,13, 67,34, 62,30);}
if (g == 8 or g == 20){u8g2.drawTriangle(88,21, 66,35, 63,30);}
if (g == 9 or g == 21){u8g2.drawTriangle(96,32, 64,35, 64,29);}
if (g == 10 or g == 22){u8g2.drawTriangle(88,42, 64,35, 65,28);}
if (g == 11 or g == 23){u8g2.drawTriangle(79,49, 67,31, 62,35);}
u8g2.drawLine(64,32, tarczaX[s], tarczaY[s]);
if (m == 0) {u8g2.drawLine(67,32, 64,54); u8g2.drawLine(61,32, 64,54);}
if (m == 1) {u8g2.drawLine(67,32, 60,54); u8g2.drawLine(61,32, 60,54);}
if (m == 2) {u8g2.drawLine(67,32, 56,54); u8g2.drawLine(61,32, 56,54);}
if (m == 3) {u8g2.drawLine(66,33, 53,54); u8g2.drawLine(61,31, 53,54);}
if (m == 4) {u8g2.drawLine(66,33, 50,53); u8g2.drawLine(61,31, 50,53);}
if (m == 5) {u8g2.drawLine(65,34, 48,52); u8g2.drawLine(61,30, 48,52);}
if (m == 6) {u8g2.drawLine(64,34, 45,51); u8g2.drawLine(61,30, 45,51);}
if (m == 7) {u8g2.drawLine(64,34, 42,49); u8g2.drawLine(61,30, 42,49);}
if (m == 8) {u8g2.drawLine(64,34, 40,48); u8g2.drawLine(61,30, 40,48);}
if (m == 9) {u8g2.drawLine(64,35, 38,46); u8g2.drawLine(61,30, 38,46);}
if (m == 10) {u8g2.drawLine(65,35, 35,44); u8g2.drawLine(62,30, 35,44);}
if (m == 11) {u8g2.drawLine(64,35, 34,43); u8g2.drawLine(62,29, 34,43);}
if (m == 12) {u8g2.drawLine(64,35, 31,40); u8g2.drawLine(62,29, 31,40);}
if (m == 13) {u8g2.drawLine(64,35, 29,37); u8g2.drawLine(63,29, 29,37);}
if (m == 14) {u8g2.drawLine(64,35, 28,35); u8g2.drawLine(63,29, 28,35);}
if (m == 15) {u8g2.drawLine(64,35, 28,32); u8g2.drawLine(63,29, 28,32);}
if (m == 16) {u8g2.drawLine(63,35, 28,27); u8g2.drawLine(64,29, 28,27);}
if (m == 17) {u8g2.drawLine(63,35, 29,26); u8g2.drawLine(64,29, 29,26);}
if (m == 18) {u8g2.drawLine(63,35, 31,23); u8g2.drawLine(64,29, 31,23);}
if (m == 19) {u8g2.drawLine(63,35, 34,21); u8g2.drawLine(64,29, 34,21);}
if (m == 20) {u8g2.drawLine(63,35, 35,19); u8g2.drawLine(65,29, 35,19);}
if (m == 21) {u8g2.drawLine(63,35, 38,17); u8g2.drawLine(65,29, 38,17);}
if (m == 22) {u8g2.drawLine(62,34, 40,15); u8g2.drawLine(65,29, 40,15);}
if (m == 23) {u8g2.drawLine(62,34, 42,13); u8g2.drawLine(65,29, 42,13);}
if (m == 24) {u8g2.drawLine(62,34, 45,12); u8g2.drawLine(66,29, 45,12);}
if (m == 25) {u8g2.drawLine(61,34, 48,10); u8g2.drawLine(66,32, 48,10);}
if (m == 26) {u8g2.drawLine(61,33, 50,9); u8g2.drawLine(66,30, 50,9);}
if (m == 27) {u8g2.drawLine(66,32, 53,8); u8g2.drawLine(61,33, 53,8);}
if (m == 28) {u8g2.drawLine(67,32, 56,8); u8g2.drawLine(61,33, 56,8);}
if (m == 29) {u8g2.drawLine(67,32, 61,8); u8g2.drawLine(61,32, 61,8);}
if (m == 30) {u8g2.drawLine(67,32, 64,8); u8g2.drawLine(61,32, 64,8);}
if (m == 31) {u8g2.drawLine(67,32, 68,8); u8g2.drawLine(61,32, 68,8);}
if (m == 32) {u8g2.drawLine(67,32, 72,8); u8g2.drawLine(61,32, 72,8);}
if (m == 33) {u8g2.drawLine(67,32, 76,8); u8g2.drawLine(61,31, 76,8);}
if (m == 34) {u8g2.drawLine(67,32, 79,8); u8g2.drawLine(62,31, 79,8);}
if (m == 35) {u8g2.drawLine(67,33, 82,9); u8g2.drawLine(62,30, 82,9);}
if (m == 36) {u8g2.drawLine(66,34, 85,10); u8g2.drawLine(62,30, 85,10);}
if (m == 37) {u8g2.drawLine(66,34, 87,12); u8g2.drawLine(62,30, 87,12);}
if (m == 38) {u8g2.drawLine(66,34, 90,13); u8g2.drawLine(63,30, 90,13);}
if (m == 39) {u8g2.drawLine(66,35, 92,15); u8g2.drawLine(63,30, 92,15);}
if (m == 40) {u8g2.drawLine(66,35, 94,17); u8g2.drawLine(63,30, 94,17);}
if (m == 41) {u8g2.drawLine(65,35, 96,19); u8g2.drawLine(64,30, 96,19);}
if (m == 42) {u8g2.drawLine(65,35, 98,21); u8g2.drawLine(64,30, 98,21);}
if (m == 43) {u8g2.drawLine(65,35, 99,23); u8g2.drawLine(64,29, 99,23);}
if (m == 44) {u8g2.drawLine(64,35, 100,26); u8g2.drawLine(64,29, 100,26);}
if (m == 45) {u8g2.drawLine(64,35, 100,32); u8g2.drawLine(64,29, 100,32);}
if (m == 46) {u8g2.drawLine(64,35, 100,35); u8g2.drawLine(64,29, 100,35);}
if (m == 47) {u8g2.drawLine(64,35, 99,37); u8g2.drawLine(64,29, 99,37);}
if (m == 48) {u8g2.drawLine(64,35, 98,40); u8g2.drawLine(64,29, 98,40);}
if (m == 49) {u8g2.drawLine(64,35, 96,42); u8g2.drawLine(65,28, 96,42);}
if (m == 50) {u8g2.drawLine(64,35, 94,44); u8g2.drawLine(65,28, 94,44);}
if (m == 51) {u8g2.drawLine(63,35, 92,46); u8g2.drawLine(66,30, 92,46);}
if (m == 52) {u8g2.drawLine(63,35, 90,48); u8g2.drawLine(66,30, 90,48);}
if (m == 53) {u8g2.drawLine(64,34, 87,48); u8g2.drawLine(66,29, 87,48);}
if (m == 54) {u8g2.drawLine(63,35, 85,48); u8g2.drawLine(67,31, 85,48);}
if (m == 55) {u8g2.drawLine(67,31, 82,52); u8g2.drawLine(63,35, 82,52);}
if (m == 56) {u8g2.drawLine(67,31, 79,53); u8g2.drawLine(62,35, 79,53);}
if (m == 57) {u8g2.drawLine(67,31, 76,54); u8g2.drawLine(62,35, 76,54);}
if (m == 58) {u8g2.drawLine(67,31, 72,54); u8g2.drawLine(62,34, 72,54);}
if (m == 59) {u8g2.drawLine(67,31, 68,54); u8g2.drawLine(62,32, 68,54);}
} while ( u8g2.nextPage() );
delayMicroseconds(10000);
}
void toggleOutput(){
s++;
if (s == 60) {
s = 0;
m++;
}
if (m == 60) {
m = 0;
g++;
}
if (g == 24) {
g = 0;
}
kropki = !kropki;
}
void Dipsw(){
byte readPin1, readPin1A, readPin2, readPin2A, readPin3, readPin3A;
readPin1 = digitalRead(inPin1);
readPin2 = digitalRead(inPin2);
readPin3 = digitalRead(inPin3);
delay(1);
readPin1A = digitalRead(inPin1);
readPin2A = digitalRead(inPin2);
readPin3A = digitalRead(inPin3);
if (readPin1 == LOW and readPin1 == readPin1A) {
P1++;
delay(200);
if (P1 == 3){
P1 = 0;
}
}
if (readPin2 == LOW and readPin2 == readPin2A) {
if (P1 == 1){
m++;
if (m == 59) {m = 0;}
}
if (P1 == 2){
g++;
if (g == 24){g = 0;}
}
delay(200);
}
if (readPin3 == LOW and readPin3 == readPin3A) {
if (P1 == 1){
m--;
if (m >= 60) {m = 59;}
if (m <= 0) {m = 59;}
}
if (P1 == 2){
g--;
if (g >= 24){g = 23;}
if (g <= 0){g = 23;}
}
delay(200);
}
}