Adafruit Silent Tilt Stand Timer


Adafruit Metro Mini
MPU 6050 Accelerometer
8X8 64 LED Matrix Display
Female USB Module
Toggle Switch



  1. // silent tilt stand timer
  2. // pkvi
  3. #include <LedControl.h>
  4. #include "Wire.h"
  5. #include <MPU6050_light.h>
  6. // SCL A4 SDA A5
  7. MPU6050 mpu(Wire);
  8. unsigned long timer = 0;
  9. // display pins
  10. int DIN = 7;
  11. int CS = 6;
  12. int CLK = 5;
  13. // credit: xantorohara.github.io/led-matrix-editor/
  14. // 00 to 30
  15. const uint8_t numbers_off[][8] = {
  16. {
  17. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00111110, 0b01000001, 0b01000001, 0b00111110
  18. }, {
  19. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000000, 0b00000000, 0b01111111, 0b00000000
  20. }, {
  21. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00110001, 0b01001001, 0b01001001, 0b01000110
  22. }, {
  23. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b01000001, 0b01001001, 0b01001001, 0b00110110
  24. }, {
  25. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000111, 0b00001000, 0b00001000, 0b01111111
  26. }, {
  27. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b01000110, 0b01001001, 0b01001001, 0b00110001
  28. }, {
  29. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00111110, 0b01001001, 0b01001001, 0b00110000
  30. }, {
  31. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000001, 0b00000001, 0b01111001, 0b00000111
  32. }, {
  33. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00110110, 0b01001001, 0b01001001, 0b00110110
  34. }, {
  35. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000110, 0b01001001, 0b01001001, 0b00111110
  36. }, {
  37. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00111110, 0b01000001, 0b01000001, 0b00111110
  38. }, {
  39. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000000, 0b00000000, 0b01111111, 0b00000000
  40. }, {
  41. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00110001, 0b01001001, 0b01001001, 0b01000110
  42. }, {
  43. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b01000001, 0b01001001, 0b01001001, 0b00110110
  44. }, {
  45. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000111, 0b00001000, 0b00001000, 0b01111111
  46. }, {
  47. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b01000110, 0b01001001, 0b01001001, 0b00110001
  48. }, {
  49. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00111110, 0b01001001, 0b01001001, 0b00110000
  50. }, {
  51. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000001, 0b00000001, 0b01111001, 0b00000111
  52. }, {
  53. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00110110, 0b01001001, 0b01001001, 0b00110110
  54. }, {
  55. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000110, 0b01001001, 0b01001001, 0b00111110
  56. }, {
  57. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00111110, 0b01000001, 0b01000001, 0b00111110
  58. }, {
  59. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000000, 0b00000000, 0b01111111, 0b00000000
  60. }, {
  61. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00110001, 0b01001001, 0b01001001, 0b01000110
  62. }, {
  63. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b01000001, 0b01001001, 0b01001001, 0b00110110
  64. }, {
  65. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000111, 0b00001000, 0b00001000, 0b01111111
  66. }, {
  67. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b01000110, 0b01001001, 0b01001001, 0b00110001
  68. }, {
  69. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00111110, 0b01001001, 0b01001001, 0b00110000
  70. }, {
  71. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000001, 0b00000001, 0b01111001, 0b00000111
  72. }, {
  73. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00110110, 0b01001001, 0b01001001, 0b00110110
  74. }, {
  75. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000110, 0b01001001, 0b01001001, 0b00111110
  76. }, {
  77. 0b01000001, 0b01001001, 0b01001001, 0b00110110, 0b00111110, 0b01000001, 0b01000001, 0b00111110
  78. }
  79. };
  80. const uint8_t numbers_on[][8] = {
  81. {
  82. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00111110, 0b01000001, 0b01000001, 0b10111110
  83. }, {
  84. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000000, 0b00000000, 0b01111111, 0b10000000
  85. }, {
  86. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00110001, 0b01001001, 0b01001001, 0b11000110
  87. }, {
  88. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b01000001, 0b01001001, 0b01001001, 0b10110110
  89. }, {
  90. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000111, 0b00001000, 0b00001000, 0b11111111
  91. }, {
  92. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b01000110, 0b01001001, 0b01001001, 0b10110001
  93. }, {
  94. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00111110, 0b01001001, 0b01001001, 0b10110000
  95. }, {
  96. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000001, 0b00000001, 0b01111001, 0b10000111
  97. }, {
  98. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00110110, 0b01001001, 0b01001001, 0b10110110
  99. }, {
  100. 0b00111110, 0b01000001, 0b01000001, 0b00111110, 0b00000110, 0b01001001, 0b01001001, 0b10111110
  101. }, {
  102. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00111110, 0b01000001, 0b01000001, 0b10111110
  103. }, {
  104. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000000, 0b00000000, 0b01111111, 0b10000000
  105. }, {
  106. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00110001, 0b01001001, 0b01001001, 0b11000110
  107. }, {
  108. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b01000001, 0b01001001, 0b01001001, 0b10110110
  109. }, {
  110. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000111, 0b00001000, 0b00001000, 0b11111111
  111. }, {
  112. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b01000110, 0b01001001, 0b01001001, 0b10110001
  113. }, {
  114. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00111110, 0b01001001, 0b01001001, 0b10110000
  115. }, {
  116. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000001, 0b00000001, 0b01111001, 0b10000111
  117. }, {
  118. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00110110, 0b01001001, 0b01001001, 0b10110110
  119. }, {
  120. 0b00000000, 0b00000000, 0b01111111, 0b00000000, 0b00000110, 0b01001001, 0b01001001, 0b10111110
  121. }, {
  122. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00111110, 0b01000001, 0b01000001, 0b10111110
  123. }, {
  124. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000000, 0b00000000, 0b01111111, 0b10000000
  125. }, {
  126. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00110001, 0b01001001, 0b01001001, 0b11000110
  127. }, {
  128. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b01000001, 0b01001001, 0b01001001, 0b10110110
  129. }, {
  130. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000111, 0b00001000, 0b00001000, 0b11111111
  131. }, {
  132. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b01000110, 0b01001001, 0b01001001, 0b10110001
  133. }, {
  134. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00111110, 0b01001001, 0b01001001, 0b10110000
  135. }, {
  136. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000001, 0b00000001, 0b01111001, 0b10000111
  137. }, {
  138. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00110110, 0b01001001, 0b01001001, 0b10110110
  139. }, {
  140. 0b00110001, 0b01001001, 0b01001001, 0b01000110, 0b00000110, 0b01001001, 0b01001001, 0b10111110
  141. }, {
  142. 0b01000001, 0b01001001, 0b01001001, 0b00110110, 0b00111110, 0b01000001, 0b01000001, 0b10111110
  143. }
  144. };
  145. const uint8_t arrow[][8] = {
  146. {
  147. 0b10000000, 0b11000000, 0b11100000, 0b11110000, 0b11110000, 0b11100000, 0b11000000, 0b10000000
  148. }, {
  149. 0b01000000, 0b01100000, 0b11110000, 0b11111000, 0b11111000, 0b11110000, 0b01100000, 0b01000000
  150. }, {
  151. 0b00100000, 0b00110000, 0b11111000, 0b11111100, 0b11111100, 0b11111000, 0b00110000, 0b00100000
  152. }, {
  153. 0b00010000, 0b00011000, 0b11111100, 0b11111110, 0b11111110, 0b11111100, 0b00011000, 0b00010000
  154. }, {
  155. 0b00001000, 0b00001100, 0b11111110, 0b11111111, 0b11111111, 0b11111110, 0b00001100, 0b00001000
  156. }
  157. };
  158. LedControl lc = LedControl(DIN, CLK, CS, 0);
  159. int state = 0;
  160. int number = 0;
  161. int last = 0;
  162. int x_angle;
  163. int y_angle;
  164. int z_angle;
  165. void setup() {
  166. Serial.begin(9600);
  167. Wire.begin();
  168. // display setup
  169. lc.shutdown(0, false);
  170. lc.setIntensity(0, 10);
  171. lc.clearDisplay(0);
  172. // calibrate
  173. byte status = mpu.begin();
  174. while (status != 0) { }
  175. delay(1000);
  176. mpu.calcOffsets();
  177. }
  178. void loop() {
  179. angle();
  180. if (state == 0) {
  181. if (last > 0) {
  182. number = last;
  183. }
  184. printByte(numbers_off[number]);
  185. } else if (state == 1) {
  186. if (number == 0) {
  187. arrow_up();
  188. } else {
  189. minute(number);
  190. }
  191. }
  192. }
  193. void minute(int m) {
  194. int p = 0;
  195. while (p < 30) {
  196. printByte(numbers_off[m]);
  197. delay(1000);
  198. printByte(numbers_on[m]);
  199. delay(1000);
  200. angle();
  201. if (state == 0 || state == 2) {
  202. break;
  203. }
  204. p++;
  205. }
  206. number--;
  207. }
  208. void angle() {
  209. mpu.update();
  210. delay(10);
  211. x_angle = mpu.getAngleX();
  212. y_angle = mpu.getAngleY();
  213. // z_angle = mpu.getAngleZ();
  214. // Serial.print("X: ");
  215. // Serial.print(x_angle);
  216. // Serial.print(" Y: ");
  217. // Serial.print(y_angle);
  218. // Serial.print(" Z: ");
  219. // Serial.println(z_angle);
  220. // left tilt count up
  221. if (y_angle > 25) {
  222. number++;
  223. last = number;
  224. delay(1000);
  225. // right tilt start-stop
  226. } else if (y_angle < -25) {
  227. if (state == 0) {
  228. state = 1;
  229. delay(1000);
  230. } else if (state == 1) {
  231. state = 2;
  232. delay(1000);
  233. } else if (state == 2) {
  234. state = 1;
  235. delay(1000);
  236. }
  237. // forward tilt reset
  238. } else if (x_angle < -10 && y_angle < 2 && y_angle > -2) {
  239. if (state == 0) {
  240. last = 0;
  241. }
  242. number = 0;
  243. state = 0;
  244. }
  245. }
  246. void arrow_up() {
  247. while (state == 1) {
  248. for (int k = 0; k < 4; k++) {
  249. printByte(arrow[k]);
  250. delay(300);
  251. }
  252. for (int k = 4; k > 0; k--) {
  253. printByte(arrow[k]);
  254. delay(300);
  255. }
  256. angle();
  257. }
  258. }
  259. void printByte(byte character []) {
  260. for (int g = 0; g < 9; g++) {
  261. lc.setRow(0, g, character[g]);
  262. }
  263. }

Menu
Index
Engineering
Entertainment
Literature
Miscellaneous
Contact
Search
tiktok.com/@pkvi.xyz
Why Ayh?
Miter
Miter
@pkvi
"...may not meet professional standards."
2,364 miters
123 tenons
Subscribe
0.00396