// silent tilt stand timer
// vgmlr
#include "LedControl.h"
#include "Wire.h"
#include "MPU6050_light.h"
// SCL A4 SDA A5
MPU6050 mpu(Wire);
unsigned long timer = 0;
// display pins
int DIN = 7;
int CS = 6;
int CLK = 5;
// credit: xantorohara.github.io/led-matrix-editor/
// 00 to 30
const uint8_t numbers_off[][8] = {
{
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00111110, 0b01000001, 0b01000001, 0b00111110
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000000, 0b00000000, 0b01111111, 0b00000000
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00110001, 0b01001001, 0b01001001, 0b01000110
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b01000001, 0b01001001, 0b01001001, 0b00110110
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000111, 0b00001000, 0b00001000, 0b01111111
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b01000110, 0b01001001, 0b01001001, 0b00110001
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00111110, 0b01001001, 0b01001001, 0b00110000
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000001, 0b00000001, 0b01111001, 0b00000111
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00110110, 0b01001001, 0b01001001, 0b00110110
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000110, 0b01001001, 0b01001001, 0b00111110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00111110, 0b01000001, 0b01000001, 0b00111110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000000, 0b00000000, 0b01111111, 0b00000000
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00110001, 0b01001001, 0b01001001, 0b01000110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b01000001, 0b01001001, 0b01001001, 0b00110110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000111, 0b00001000, 0b00001000, 0b01111111
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b01000110, 0b01001001, 0b01001001, 0b00110001
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00111110, 0b01001001, 0b01001001, 0b00110000
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000001, 0b00000001, 0b01111001, 0b00000111
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00110110, 0b01001001, 0b01001001, 0b00110110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000110, 0b01001001, 0b01001001, 0b00111110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00111110, 0b01000001, 0b01000001, 0b00111110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000000, 0b00000000, 0b01111111, 0b00000000
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00110001, 0b01001001, 0b01001001, 0b01000110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b01000001, 0b01001001, 0b01001001, 0b00110110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000111, 0b00001000, 0b00001000, 0b01111111
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b01000110, 0b01001001, 0b01001001, 0b00110001
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00111110, 0b01001001, 0b01001001, 0b00110000
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000001, 0b00000001, 0b01111001, 0b00000111
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00110110, 0b01001001, 0b01001001, 0b00110110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000110, 0b01001001, 0b01001001, 0b00111110
}, {
0b01000001, 0b01001001, 0b01001001, 0b00110110, 0b00111110, 0b01000001, 0b01000001, 0b00111110
}
};
const uint8_t numbers_on[][8] = {
{
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00111110, 0b01000001, 0b01000001, 0b10111110
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000000, 0b00000000, 0b01111111, 0b10000000
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00110001, 0b01001001, 0b01001001, 0b11000110
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b01000001, 0b01001001, 0b01001001, 0b10110110
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000111, 0b00001000, 0b00001000, 0b11111111
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b01000110, 0b01001001, 0b01001001, 0b10110001
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00111110, 0b01001001, 0b01001001, 0b10110000
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000001, 0b00000001, 0b01111001, 0b10000111
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00110110, 0b01001001, 0b01001001, 0b10110110
}, {
0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000110, 0b01001001, 0b01001001, 0b10111110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00111110, 0b01000001, 0b01000001, 0b10111110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000000, 0b00000000, 0b01111111, 0b10000000
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00110001, 0b01001001, 0b01001001, 0b11000110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b01000001, 0b01001001, 0b01001001, 0b10110110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000111, 0b00001000, 0b00001000, 0b11111111
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b01000110, 0b01001001, 0b01001001, 0b10110001
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00111110, 0b01001001, 0b01001001, 0b10110000
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000001, 0b00000001, 0b01111001, 0b10000111
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00110110, 0b01001001, 0b01001001, 0b10110110
}, {
0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000110, 0b01001001, 0b01001001, 0b10111110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00111110, 0b01000001, 0b01000001, 0b10111110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000000, 0b00000000, 0b01111111, 0b10000000
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00110001, 0b01001001, 0b01001001, 0b11000110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b01000001, 0b01001001, 0b01001001, 0b10110110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000111, 0b00001000, 0b00001000, 0b11111111
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b01000110, 0b01001001, 0b01001001, 0b10110001
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00111110, 0b01001001, 0b01001001, 0b10110000
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000001, 0b00000001, 0b01111001, 0b10000111
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00110110, 0b01001001, 0b01001001, 0b10110110
}, {
0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000110, 0b01001001, 0b01001001, 0b10111110
}, {
0b01000001, 0b01001001, 0b01001001, 0b00110110, 0b00111110, 0b01000001, 0b01000001, 0b10111110
}
};
const uint8_t arrow[][8] = {
{
0b10000000, 0b11000000, 0b11100000, 0b11110000, 0b11110000, 0b11100000, 0b11000000, 0b10000000
}, {
0b01000000, 0b01100000, 0b11110000, 0b11111000, 0b11111000, 0b11110000, 0b01100000, 0b01000000
}, {
0b00100000, 0b00110000, 0b11111000, 0b11111100, 0b11111100, 0b11111000, 0b00110000, 0b00100000
}, {
0b00010000, 0b00011000, 0b11111100, 0b11111110, 0b11111110, 0b11111100, 0b00011000, 0b00010000
}, {
0b00001000, 0b00001100, 0b11111110, 0b11111111, 0b11111111, 0b11111110, 0b00001100, 0b00001000
}
};
LedControl lc = LedControl(DIN, CLK, CS, 0);
int state = 0;
int number = 0;
int last = 0;
int x_angle;
int y_angle;
int z_angle;
void setup() {
Serial.begin(9600);
Wire.begin();
// display setup
lc.shutdown(0, false);
lc.setIntensity(0, 10);
lc.clearDisplay(0);
// calibrate
byte status = mpu.begin();
while (status != 0) { }
delay(1000);
mpu.calcOffsets();
}
void loop() {
angle();
if (state == 0) {
if (last > 0) {
number = last;
}
printByte(numbers_off[number]);
} else if (state == 1) {
if (number == 0) {
arrow_up();
} else {
minute(number);
}
}
}
void minute(int m) {
int p = 0;
while (p < 30) {
printByte(numbers_off[m]);
delay(1000);
printByte(numbers_on[m]);
delay(1000);
angle();
if (state == 0 || state == 2) {
break;
}
p++;
}
number--;
}
void angle() {
mpu.update();
delay(10);
x_angle = mpu.getAngleX();
y_angle = mpu.getAngleY();
// z_angle = mpu.getAngleZ();
// Serial.print("X: ");
// Serial.print(x_angle);
// Serial.print(" Y: ");
// Serial.print(y_angle);
// Serial.print(" Z: ");
// Serial.println(z_angle);
// left tilt count up
if (y_angle > 25) {
number++;
last = number;
delay(1000);
// right tilt start-stop
} else if (y_angle < -25) {
if (state == 0) {
state = 1;
delay(1000);
} else if (state == 1) {
state = 2;
delay(1000);
} else if (state == 2) {
state = 1;
delay(1000);
}
// forward tilt reset
} else if (x_angle < -10 && y_angle < 2 && y_angle > -2) {
if (state == 0) {
last = 0;
}
number = 0;
state = 0;
}
}
void arrow_up() {
while (state == 1) {
for (int k = 0; k < 4; k++) {
printByte(arrow[k]);
delay(300);
}
for (int k = 4; k > 0; k--) {
printByte(arrow[k]);
delay(300);
}
angle();
}
}
void printByte(byte character []) {
for (int g = 0; g < 9; g++) {
lc.setRow(0, g, character[g]);
}
}