segments.ino 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. ////////////////////////////////////////////////////////////////////////////////////////////////////
  2. ///////////////////////////////////////////////////////////////////////////////////////////////////
  3. void showNumber(float value)
  4. {
  5. // changed from int to float
  6. long numberX = ((value+.0005)*1000); //Remove negative signs and any decimals
  7. // Serial.print("number: ");
  8. // Serial.println(numberX,3);
  9. // Serial.print("mph: ");
  10. // Serial.println(mph,3);
  11. for (byte x = 0 ; x < 6 ; x++)
  12. {
  13. long remainder = numberX % 10;
  14. postNumber(remainder, x==3);
  15. //Serial.print("remainder: ");
  16. //Serial.println (remainder,4);
  17. //Serial.print("value: ");
  18. //Serial.println (value,3);
  19. //Serial.print("number: ");
  20. // Serial.println(number );
  21. numberX /= 10;
  22. // Serial.print("number: ");
  23. // Serial.println(numberX,3 );
  24. }
  25. //Latch the current segment data
  26. digitalWrite(segmentLatch, LOW);
  27. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  28. }
  29. //Given a number, or '-', shifts it out to the display
  30. void postNumber(int number, boolean decimal)
  31. {
  32. // - A
  33. // / / F/B
  34. // - G
  35. // / / E/C
  36. // -. D/DP
  37. #define a 1<<0
  38. #define b 1<<6
  39. #define c 1<<5
  40. #define d 1<<4
  41. #define e 1<<3
  42. #define f 1<<1
  43. #define g 1<<2
  44. #define dp 1<<7
  45. byte segments;
  46. switch (number)
  47. {
  48. case 1: segments = b | c; break;
  49. case 2: segments = a | b | d | e | g; break;
  50. case 3: segments = a | b | c | d | g; break;
  51. case 4: segments = f | g | b | c; break;
  52. case 5: segments = a | f | g | c | d; break;
  53. case 6: segments = a | f | g | e | c | d; break;
  54. case 7: segments = a | b | c; break;
  55. case 8: segments = a | b | c | d | e | f | g; break;
  56. case 9: segments = a | b | c | d | f | g; break;
  57. // case 0:
  58. // if (number > 9) {
  59. // segments = a | b | c | d | e | f; break;
  60. // } else segments = 0; break;
  61. case 0: segments = a | b | c | d | e | f; break;
  62. case ' ': segments = 0; break;
  63. case 'c': segments = g | e | d; break;
  64. case '-': segments = g; break;
  65. }
  66. if (decimal) segments |= dp;
  67. //Clock these bits out to the drivers
  68. for (byte x = 0 ; x < 8 ; x++)
  69. {
  70. digitalWrite(segmentClock, LOW);
  71. digitalWrite(segmentData, segments & 1 << (7 - x));
  72. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  73. }
  74. }
  75. void showShape(int shape)
  76. {
  77. // - A
  78. // / / F/B
  79. // - G
  80. // / / E/C
  81. // -. D/DP
  82. #define a 1<<0
  83. #define b 1<<6
  84. #define c 1<<5
  85. #define d 1<<4
  86. #define e 1<<3
  87. #define f 1<<1
  88. #define g 1<<2
  89. #define dp 1<<7
  90. byte segments1;
  91. byte segments2;
  92. byte segments3;
  93. byte segments4;
  94. byte segments5;
  95. byte segments6;
  96. switch (shape)
  97. {
  98. //
  99. case 0:
  100. segments1 = a | f | b | e | c | d;
  101. segments2 = a | f | b | e | c | d;
  102. segments3 = a | f | b | e | c | d;
  103. segments4 = a | f | b | e | c | d;
  104. segments5 = a | f | b | e | c | d;
  105. segments6 = a | f | b | e | c | d;
  106. break;
  107. // . .
  108. case 1:
  109. segments1 = dp;
  110. segments2 = dp;
  111. segments3 = dp;
  112. segments4 = dp;
  113. segments5 = dp;
  114. segments6 = dp;
  115. break;
  116. // _ _
  117. case 2:
  118. segments1 = d;
  119. segments2 = d;
  120. break;
  121. // Double 88
  122. case 3:
  123. segments1 = a | f | b | e | c | d | g;
  124. segments2 = a | f | b | e | c | d | g;
  125. break;
  126. // - -
  127. case 4:
  128. segments1 = g;
  129. segments2 = g;
  130. segments3 = g;
  131. segments4 = g;
  132. segments5 = g;
  133. segments6 = g;
  134. break;
  135. // NOTHING
  136. case 5:
  137. segments1 = 0;
  138. segments2 = 0;
  139. break;
  140. }
  141. //Clock these bits out to the drivers
  142. // Segment1
  143. for (byte x = 0 ; x < 8 ; x++)
  144. {
  145. digitalWrite(segmentClock, LOW);
  146. digitalWrite(segmentData, segments1 & 1 << (7 - x));
  147. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  148. }
  149. digitalWrite(segmentLatch, LOW);
  150. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  151. // Segment2
  152. for (byte x = 0 ; x < 8 ; x++)
  153. {
  154. digitalWrite(segmentClock, LOW);
  155. digitalWrite(segmentData, segments2 & 1 << (7 - x));
  156. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  157. }
  158. digitalWrite(segmentLatch, LOW);
  159. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  160. // Segment3
  161. for (byte x = 0 ; x < 8 ; x++)
  162. {
  163. digitalWrite(segmentClock, LOW);
  164. digitalWrite(segmentData, segments3 & 1 << (7 - x));
  165. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  166. }
  167. digitalWrite(segmentLatch, LOW);
  168. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  169. // Segment4
  170. for (byte x = 0 ; x < 8 ; x++)
  171. {
  172. digitalWrite(segmentClock, LOW);
  173. digitalWrite(segmentData, segments4 & 1 << (7 - x));
  174. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  175. }
  176. digitalWrite(segmentLatch, LOW);
  177. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  178. // Segment5
  179. for (byte x = 0 ; x < 8 ; x++)
  180. {
  181. digitalWrite(segmentClock, LOW);
  182. digitalWrite(segmentData, segments5 & 1 << (7 - x));
  183. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  184. }
  185. digitalWrite(segmentLatch, LOW);
  186. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  187. // Segment6
  188. for (byte x = 0 ; x < 8 ; x++)
  189. {
  190. digitalWrite(segmentClock, LOW);
  191. digitalWrite(segmentData, segments6 & 1 << (7 - x));
  192. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  193. }
  194. digitalWrite(segmentLatch, LOW);
  195. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  196. }
  197. /////////////////////////////////////////////////////////////////////////////////////
  198. /////////////////////////////////////////////////////////////////////////////////////
  199. // LAP SEGMENT CODE
  200. /////////////////////////////////////////////////////////////////////////////////////
  201. /////////////////////////////////////////////////////////////////////////////////////
  202. void showNumberLAP(float valueLAP)
  203. {
  204. // changed from int to float
  205. long numberLAP = abs(valueLAP); //Remove negative signs and any decimals
  206. // Serial.print("numberLAP: ");
  207. // Serial.println(numberLAP,3);
  208. // Serial.print("mph: ");
  209. // Serial.println(mph,3);
  210. for (byte x = 0 ; x < 2 ; x++)
  211. {
  212. long remainderLAP = numberLAP % 10;
  213. postNumberLAP(remainderLAP, false);
  214. //Serial.print("remainder: ");
  215. //Serial.println (remainder,4);
  216. //Serial.print("value: ");
  217. //Serial.println (value,3);
  218. //Serial.print("number: ");
  219. // Serial.println(number );
  220. numberLAP /= 10;
  221. // Serial.print("number: ");
  222. // Serial.println(numberX,3 );
  223. }
  224. //Latch the current segment data
  225. digitalWrite(segmentLatchLAP, LOW);
  226. digitalWrite(segmentLatchLAP, HIGH); //Register moves storage register on the rising edge of RCK
  227. }
  228. //Given a number, or '-', shifts it out to the display
  229. void postNumberLAP(int number, boolean decimal)
  230. {
  231. // - A
  232. // / / F/B
  233. // - G
  234. // / / E/C
  235. // -. D/DP
  236. #define a 1<<0
  237. #define b 1<<6
  238. #define c 1<<5
  239. #define d 1<<4
  240. #define e 1<<3
  241. #define f 1<<1
  242. #define g 1<<2
  243. #define dp 1<<7
  244. byte segmentsLAP;
  245. switch (number)
  246. {
  247. case 1: segmentsLAP = b | c; break;
  248. case 2: segmentsLAP = a | b | d | e | g; break;
  249. case 3: segmentsLAP = a | b | c | d | g; break;
  250. case 4: segmentsLAP = f | g | b | c; break;
  251. case 5: segmentsLAP = a | f | g | c | d; break;
  252. case 6: segmentsLAP = a | f | g | e | c | d; break;
  253. case 7: segmentsLAP = a | b | c; break;
  254. case 8: segmentsLAP = a | b | c | d | e | f | g; break;
  255. case 9: segmentsLAP = a | b | c | d | f | g; break;
  256. // case 0:
  257. // if (number > 9) {
  258. // segments = a | b | c | d | e | f; break;
  259. // } else segments = 0; break;
  260. case 0: segmentsLAP = a | b | c | d | e | f; break;
  261. case ' ': segmentsLAP = 0; break;
  262. case 'c': segmentsLAP = g | e | d; break;
  263. case '-': segmentsLAP = g; break;
  264. }
  265. if (decimal) segmentsLAP |= dp;
  266. //Clock these bits out to the drivers
  267. for (byte x = 0 ; x < 8 ; x++)
  268. {
  269. digitalWrite(segmentClockLAP, LOW);
  270. digitalWrite(segmentDataLAP, segmentsLAP & 1 << (7 - x));
  271. digitalWrite(segmentClockLAP, HIGH); //Data transfers to the register on the rising edge of SRCK
  272. }
  273. }
  274. void showShapeLAP(int shape)
  275. {
  276. // - A
  277. // / / F/B
  278. // - G
  279. // / / E/C
  280. // -. D/DP
  281. #define a 1<<0
  282. #define b 1<<6
  283. #define c 1<<5
  284. #define d 1<<4
  285. #define e 1<<3
  286. #define f 1<<1
  287. #define g 1<<2
  288. #define dp 1<<7
  289. byte segmentsLAP1;
  290. byte segmentsLAP2;
  291. switch (shape)
  292. {
  293. //
  294. case 0:
  295. segmentsLAP1 = a | f | b | e | c | d;
  296. segmentsLAP2 = a | f | b | e | c | d;
  297. break;
  298. // . .
  299. case 1:
  300. segmentsLAP1 = dp;
  301. segmentsLAP2 = dp;
  302. break;
  303. // _ _
  304. case 2:
  305. segmentsLAP1 = d;
  306. segmentsLAP2 = d;
  307. break;
  308. // Double 88
  309. case 3:
  310. segmentsLAP1 = a | f | b | e | c | d | g;
  311. segmentsLAP2 = a | f | b | e | c | d | g;
  312. break;
  313. // - -
  314. case 4:
  315. segmentsLAP1 = g;
  316. segmentsLAP2 = g;
  317. break;
  318. // NOTHING
  319. case 5:
  320. segmentsLAP1 = 0;
  321. segmentsLAP2 = 0;
  322. break;
  323. }
  324. //Clock these bits out to the drivers
  325. // SegmentLAP1
  326. for (byte x = 0 ; x < 8 ; x++)
  327. {
  328. digitalWrite(segmentClockLAP, LOW);
  329. digitalWrite(segmentDataLAP, segmentsLAP1 & 1 << (7 - x));
  330. digitalWrite(segmentClockLAP, HIGH); //Data transfers to the register on the rising edge of SRCK
  331. }
  332. digitalWrite(segmentLatchLAP, LOW);
  333. digitalWrite(segmentLatchLAP, HIGH); //Register moves storage register on the rising edge of RCK
  334. // SegmentLAP2
  335. for (byte x = 0 ; x < 8 ; x++)
  336. {
  337. digitalWrite(segmentClockLAP, LOW);
  338. digitalWrite(segmentDataLAP, segmentsLAP2 & 1 << (7 - x));
  339. digitalWrite(segmentClockLAP, HIGH); //Data transfers to the register on the rising edge of SRCK
  340. }
  341. digitalWrite(segmentLatchLAP, LOW);
  342. digitalWrite(segmentLatchLAP, HIGH); //Register moves storage register on the rising edge of RCK
  343. }