|
@@ -0,0 +1,426 @@
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
+///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ void showNumber(float value)
|
|
|
|
|
+{
|
|
|
|
|
+
|
|
|
|
|
+// changed from int to float
|
|
|
|
|
+ long numberX = ((value+.0005)*1000); //Remove negative signs and any decimals
|
|
|
|
|
+
|
|
|
|
|
+// Serial.print("number: ");
|
|
|
|
|
+// Serial.println(numberX,3);
|
|
|
|
|
+// Serial.print("mph: ");
|
|
|
|
|
+// Serial.println(mph,3);
|
|
|
|
|
+ for (byte x = 0 ; x < 6 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+long remainder = numberX % 10;
|
|
|
|
|
+
|
|
|
|
|
+ postNumber(remainder, x==3);
|
|
|
|
|
+
|
|
|
|
|
+//Serial.print("remainder: ");
|
|
|
|
|
+//Serial.println (remainder,4);
|
|
|
|
|
+//Serial.print("value: ");
|
|
|
|
|
+//Serial.println (value,3);
|
|
|
|
|
+//Serial.print("number: ");
|
|
|
|
|
+// Serial.println(number );
|
|
|
|
|
+ numberX /= 10;
|
|
|
|
|
+
|
|
|
|
|
+// Serial.print("number: ");
|
|
|
|
|
+// Serial.println(numberX,3 );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //Latch the current segment data
|
|
|
|
|
+ digitalWrite(segmentLatch, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//Given a number, or '-', shifts it out to the display
|
|
|
|
|
+void postNumber(int number, boolean decimal)
|
|
|
|
|
+{
|
|
|
|
|
+ // - A
|
|
|
|
|
+ // / / F/B
|
|
|
|
|
+ // - G
|
|
|
|
|
+ // / / E/C
|
|
|
|
|
+ // -. D/DP
|
|
|
|
|
+
|
|
|
|
|
+#define a 1<<0
|
|
|
|
|
+#define b 1<<6
|
|
|
|
|
+#define c 1<<5
|
|
|
|
|
+#define d 1<<4
|
|
|
|
|
+#define e 1<<3
|
|
|
|
|
+#define f 1<<1
|
|
|
|
|
+#define g 1<<2
|
|
|
|
|
+#define dp 1<<7
|
|
|
|
|
+
|
|
|
|
|
+ byte segments;
|
|
|
|
|
+
|
|
|
|
|
+ switch (number)
|
|
|
|
|
+ {
|
|
|
|
|
+ case 1: segments = b | c; break;
|
|
|
|
|
+ case 2: segments = a | b | d | e | g; break;
|
|
|
|
|
+ case 3: segments = a | b | c | d | g; break;
|
|
|
|
|
+ case 4: segments = f | g | b | c; break;
|
|
|
|
|
+ case 5: segments = a | f | g | c | d; break;
|
|
|
|
|
+ case 6: segments = a | f | g | e | c | d; break;
|
|
|
|
|
+ case 7: segments = a | b | c; break;
|
|
|
|
|
+ case 8: segments = a | b | c | d | e | f | g; break;
|
|
|
|
|
+ case 9: segments = a | b | c | d | f | g; break;
|
|
|
|
|
+ // case 0:
|
|
|
|
|
+ // if (number > 9) {
|
|
|
|
|
+ // segments = a | b | c | d | e | f; break;
|
|
|
|
|
+ // } else segments = 0; break;
|
|
|
|
|
+
|
|
|
|
|
+ case 0: segments = a | b | c | d | e | f; break;
|
|
|
|
|
+ case ' ': segments = 0; break;
|
|
|
|
|
+ case 'c': segments = g | e | d; break;
|
|
|
|
|
+ case '-': segments = g; break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (decimal) segments |= dp;
|
|
|
|
|
+
|
|
|
|
|
+ //Clock these bits out to the drivers
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClock, LOW);
|
|
|
|
|
+ digitalWrite(segmentData, segments & 1 << (7 - x));
|
|
|
|
|
+ digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+void showShape(int shape)
|
|
|
|
|
+{
|
|
|
|
|
+ // - A
|
|
|
|
|
+ // / / F/B
|
|
|
|
|
+ // - G
|
|
|
|
|
+ // / / E/C
|
|
|
|
|
+ // -. D/DP
|
|
|
|
|
+
|
|
|
|
|
+#define a 1<<0
|
|
|
|
|
+#define b 1<<6
|
|
|
|
|
+#define c 1<<5
|
|
|
|
|
+#define d 1<<4
|
|
|
|
|
+#define e 1<<3
|
|
|
|
|
+#define f 1<<1
|
|
|
|
|
+#define g 1<<2
|
|
|
|
|
+#define dp 1<<7
|
|
|
|
|
+
|
|
|
|
|
+ byte segments1;
|
|
|
|
|
+ byte segments2;
|
|
|
|
|
+ byte segments3;
|
|
|
|
|
+ byte segments4;
|
|
|
|
|
+ byte segments5;
|
|
|
|
|
+ byte segments6;
|
|
|
|
|
+
|
|
|
|
|
+ switch (shape)
|
|
|
|
|
+ {
|
|
|
|
|
+ //
|
|
|
|
|
+ case 0:
|
|
|
|
|
+ segments1 = a | f | b | e | c | d;
|
|
|
|
|
+ segments2 = a | f | b | e | c | d;
|
|
|
|
|
+ segments3 = a | f | b | e | c | d;
|
|
|
|
|
+ segments4 = a | f | b | e | c | d;
|
|
|
|
|
+ segments5 = a | f | b | e | c | d;
|
|
|
|
|
+ segments6 = a | f | b | e | c | d;
|
|
|
|
|
+
|
|
|
|
|
+ break;
|
|
|
|
|
+ // . .
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ segments1 = dp;
|
|
|
|
|
+ segments2 = dp;
|
|
|
|
|
+ segments3 = dp;
|
|
|
|
|
+ segments4 = dp;
|
|
|
|
|
+ segments5 = dp;
|
|
|
|
|
+ segments6 = dp;
|
|
|
|
|
+ break;
|
|
|
|
|
+ // _ _
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ segments1 = d;
|
|
|
|
|
+ segments2 = d;
|
|
|
|
|
+
|
|
|
|
|
+ break;
|
|
|
|
|
+ // Double 88
|
|
|
|
|
+ case 3:
|
|
|
|
|
+ segments1 = a | f | b | e | c | d | g;
|
|
|
|
|
+ segments2 = a | f | b | e | c | d | g;
|
|
|
|
|
+ break;
|
|
|
|
|
+ // - -
|
|
|
|
|
+ case 4:
|
|
|
|
|
+ segments1 = g;
|
|
|
|
|
+ segments2 = g;
|
|
|
|
|
+ segments3 = g;
|
|
|
|
|
+ segments4 = g;
|
|
|
|
|
+ segments5 = g;
|
|
|
|
|
+ segments6 = g;
|
|
|
|
|
+ break;
|
|
|
|
|
+ // NOTHING
|
|
|
|
|
+ case 5:
|
|
|
|
|
+ segments1 = 0;
|
|
|
|
|
+ segments2 = 0;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ //Clock these bits out to the drivers
|
|
|
|
|
+ // Segment1
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClock, LOW);
|
|
|
|
|
+ digitalWrite(segmentData, segments1 & 1 << (7 - x));
|
|
|
|
|
+ digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentLatch, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+
|
|
|
|
|
+ // Segment2
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClock, LOW);
|
|
|
|
|
+ digitalWrite(segmentData, segments2 & 1 << (7 - x));
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentLatch, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+
|
|
|
|
|
+// Segment3
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClock, LOW);
|
|
|
|
|
+ digitalWrite(segmentData, segments3 & 1 << (7 - x));
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentLatch, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+
|
|
|
|
|
+// Segment4
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClock, LOW);
|
|
|
|
|
+ digitalWrite(segmentData, segments4 & 1 << (7 - x));
|
|
|
|
|
+ digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentLatch, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+
|
|
|
|
|
+ // Segment5
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClock, LOW);
|
|
|
|
|
+ digitalWrite(segmentData, segments5 & 1 << (7 - x));
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentLatch, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+
|
|
|
|
|
+// Segment6
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClock, LOW);
|
|
|
|
|
+ digitalWrite(segmentData, segments6 & 1 << (7 - x));
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentLatch, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
+/////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
+// LAP SEGMENT CODE
|
|
|
|
|
+/////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
+/////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+void showNumberLAP(float valueLAP)
|
|
|
|
|
+{
|
|
|
|
|
+
|
|
|
|
|
+// changed from int to float
|
|
|
|
|
+ long numberLAP = abs(valueLAP); //Remove negative signs and any decimals
|
|
|
|
|
+
|
|
|
|
|
+// Serial.print("numberLAP: ");
|
|
|
|
|
+// Serial.println(numberLAP,3);
|
|
|
|
|
+// Serial.print("mph: ");
|
|
|
|
|
+// Serial.println(mph,3);
|
|
|
|
|
+
|
|
|
|
|
+ for (byte x = 0 ; x < 2 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+long remainderLAP = numberLAP % 10;
|
|
|
|
|
+
|
|
|
|
|
+ postNumberLAP(remainderLAP, false);
|
|
|
|
|
+
|
|
|
|
|
+//Serial.print("remainder: ");
|
|
|
|
|
+//Serial.println (remainder,4);
|
|
|
|
|
+//Serial.print("value: ");
|
|
|
|
|
+//Serial.println (value,3);
|
|
|
|
|
+//Serial.print("number: ");
|
|
|
|
|
+// Serial.println(number );
|
|
|
|
|
+ numberLAP /= 10;
|
|
|
|
|
+
|
|
|
|
|
+// Serial.print("number: ");
|
|
|
|
|
+// Serial.println(numberX,3 );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //Latch the current segment data
|
|
|
|
|
+ digitalWrite(segmentLatchLAP, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatchLAP, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+//Given a number, or '-', shifts it out to the display
|
|
|
|
|
+void postNumberLAP(int number, boolean decimal)
|
|
|
|
|
+{
|
|
|
|
|
+ // - A
|
|
|
|
|
+ // / / F/B
|
|
|
|
|
+ // - G
|
|
|
|
|
+ // / / E/C
|
|
|
|
|
+ // -. D/DP
|
|
|
|
|
+
|
|
|
|
|
+#define a 1<<0
|
|
|
|
|
+#define b 1<<6
|
|
|
|
|
+#define c 1<<5
|
|
|
|
|
+#define d 1<<4
|
|
|
|
|
+#define e 1<<3
|
|
|
|
|
+#define f 1<<1
|
|
|
|
|
+#define g 1<<2
|
|
|
|
|
+#define dp 1<<7
|
|
|
|
|
+
|
|
|
|
|
+ byte segmentsLAP;
|
|
|
|
|
+
|
|
|
|
|
+ switch (number)
|
|
|
|
|
+ {
|
|
|
|
|
+ case 1: segmentsLAP = b | c; break;
|
|
|
|
|
+ case 2: segmentsLAP = a | b | d | e | g; break;
|
|
|
|
|
+ case 3: segmentsLAP = a | b | c | d | g; break;
|
|
|
|
|
+ case 4: segmentsLAP = f | g | b | c; break;
|
|
|
|
|
+ case 5: segmentsLAP = a | f | g | c | d; break;
|
|
|
|
|
+ case 6: segmentsLAP = a | f | g | e | c | d; break;
|
|
|
|
|
+ case 7: segmentsLAP = a | b | c; break;
|
|
|
|
|
+ case 8: segmentsLAP = a | b | c | d | e | f | g; break;
|
|
|
|
|
+ case 9: segmentsLAP = a | b | c | d | f | g; break;
|
|
|
|
|
+ // case 0:
|
|
|
|
|
+ // if (number > 9) {
|
|
|
|
|
+ // segments = a | b | c | d | e | f; break;
|
|
|
|
|
+ // } else segments = 0; break;
|
|
|
|
|
+
|
|
|
|
|
+ case 0: segmentsLAP = a | b | c | d | e | f; break;
|
|
|
|
|
+ case ' ': segmentsLAP = 0; break;
|
|
|
|
|
+ case 'c': segmentsLAP = g | e | d; break;
|
|
|
|
|
+ case '-': segmentsLAP = g; break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (decimal) segmentsLAP |= dp;
|
|
|
|
|
+
|
|
|
|
|
+ //Clock these bits out to the drivers
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClockLAP, LOW);
|
|
|
|
|
+ digitalWrite(segmentDataLAP, segmentsLAP & 1 << (7 - x));
|
|
|
|
|
+ digitalWrite(segmentClockLAP, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+void showShapeLAP(int shape)
|
|
|
|
|
+{
|
|
|
|
|
+ // - A
|
|
|
|
|
+ // / / F/B
|
|
|
|
|
+ // - G
|
|
|
|
|
+ // / / E/C
|
|
|
|
|
+ // -. D/DP
|
|
|
|
|
+
|
|
|
|
|
+#define a 1<<0
|
|
|
|
|
+#define b 1<<6
|
|
|
|
|
+#define c 1<<5
|
|
|
|
|
+#define d 1<<4
|
|
|
|
|
+#define e 1<<3
|
|
|
|
|
+#define f 1<<1
|
|
|
|
|
+#define g 1<<2
|
|
|
|
|
+#define dp 1<<7
|
|
|
|
|
+
|
|
|
|
|
+ byte segmentsLAP1;
|
|
|
|
|
+ byte segmentsLAP2;
|
|
|
|
|
+
|
|
|
|
|
+ switch (shape)
|
|
|
|
|
+ {
|
|
|
|
|
+ //
|
|
|
|
|
+ case 0:
|
|
|
|
|
+ segmentsLAP1 = a | f | b | e | c | d;
|
|
|
|
|
+ segmentsLAP2 = a | f | b | e | c | d;
|
|
|
|
|
+ break;
|
|
|
|
|
+ // . .
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ segmentsLAP1 = dp;
|
|
|
|
|
+ segmentsLAP2 = dp;
|
|
|
|
|
+ break;
|
|
|
|
|
+ // _ _
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ segmentsLAP1 = d;
|
|
|
|
|
+ segmentsLAP2 = d;
|
|
|
|
|
+
|
|
|
|
|
+ break;
|
|
|
|
|
+ // Double 88
|
|
|
|
|
+ case 3:
|
|
|
|
|
+ segmentsLAP1 = a | f | b | e | c | d | g;
|
|
|
|
|
+ segmentsLAP2 = a | f | b | e | c | d | g;
|
|
|
|
|
+ break;
|
|
|
|
|
+ // - -
|
|
|
|
|
+ case 4:
|
|
|
|
|
+ segmentsLAP1 = g;
|
|
|
|
|
+ segmentsLAP2 = g;
|
|
|
|
|
+ break;
|
|
|
|
|
+ // NOTHING
|
|
|
|
|
+ case 5:
|
|
|
|
|
+ segmentsLAP1 = 0;
|
|
|
|
|
+ segmentsLAP2 = 0;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ //Clock these bits out to the drivers
|
|
|
|
|
+ // SegmentLAP1
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClockLAP, LOW);
|
|
|
|
|
+ digitalWrite(segmentDataLAP, segmentsLAP1 & 1 << (7 - x));
|
|
|
|
|
+ digitalWrite(segmentClockLAP, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentLatchLAP, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatchLAP, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+
|
|
|
|
|
+ // SegmentLAP2
|
|
|
|
|
+ for (byte x = 0 ; x < 8 ; x++)
|
|
|
|
|
+ {
|
|
|
|
|
+ digitalWrite(segmentClockLAP, LOW);
|
|
|
|
|
+ digitalWrite(segmentDataLAP, segmentsLAP2 & 1 << (7 - x));
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentClockLAP, HIGH); //Data transfers to the register on the rising edge of SRCK
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ digitalWrite(segmentLatchLAP, LOW);
|
|
|
|
|
+ digitalWrite(segmentLatchLAP, HIGH); //Register moves storage register on the rising edge of RCK
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|