Pārlūkot izejas kodu

Added example for advanced 11th pane control

Lixie Labs 6 gadi atpakaļ
vecāks
revīzija
df091c430c
1 mainītis faili ar 134 papildinājumiem un 0 dzēšanām
  1. 134 0
      examples/special_panes/special_panes.ino

+ 134 - 0
examples/special_panes/special_panes.ino

@@ -0,0 +1,134 @@
+/*
+ * Lixie II "Special Panes" Example ////////////////////////////////////////////////////
+ * 
+ * Lixie's 11th pane (which is a decimal point by default) can now be arbitrarily
+ * controlled explicitly using the lix.special_pane() function and implicitly through
+ * passing special Strings into lix.write();
+ * 
+ * ----------------------------------------------------------------------------
+ * 
+ * EXPLICIT CONTROL:
+ * lix.special_pane(uint8_t index, bool enabled, [CRGB col1], [CRGB col2]);
+ * 
+ * This function provides explicit control of the 11th panes, and the CRGB colors
+ * passed to this function override any global color settings the displays currently
+ * have. To show the rightmost digit's 11th pane in pure green:
+ * 
+ * lix.special_pane(0, true, CRGB(0,255,0));
+ * 
+ * You can optionally pass a second color to be used in a fashion similar
+ * to lix.color_dual():
+ * 
+ * lix.special_pane(0, true, CRGB(0,255,0), CRGB(0,0,255); // Green on left side, Blue on right
+ * 
+ * These settings will persist indefinitely, until you disable that same pane:
+ * 
+ * lix.special_pane(0, false);
+ * 
+ * ----------------------------------------------------------------------------
+ * IMPLICIT CONTROL:
+ * lix.write(String input);
+ * 
+ * When a String is passed to the lix.write(); function it will be parsed on a
+ * character-by-character basis, where numerals behave as normal, spaces create
+ * blank displays, and any other character is treated as a special pane character.
+ * 
+ * For example, if you called lix.write("2.3 ");, the '.' is treated as an 11th pane
+ * character, and the trailing space leaves your rightmost Lixie blank.
+ * 
+ * This 11th pane behavior differs from explicit control in that it respects the
+ * animation ISR and ON/OFF color groups that are already defined. This means that
+ * they have normal transition-time behaviors and the 11th-pane chars will be colored
+ * just as a normal numeral would at that position.
+ * 
+ * To disable implicity controlled 11th panes once they are on, just write a different
+ * value to the displays as you normally would.
+ */
+
+#include <Lixie_II.h>           // https://github.com/connornishijima/Lixie_II
+#define DATA_PIN        12      // Lixie DIN connects to this pin (D6 on Wemos)
+#define NUM_DIGITS      4
+Lixie_II lix(DATA_PIN, NUM_DIGITS);
+
+void setup() {
+  lix.begin(); // Mandatory, sets up animation timer
+  lix.gradient_rgb(ON, CRGB(255, 0, 0), CRGB(0, 255, 0)); // Gradient from red to green
+}
+
+void loop() {
+  double_panes();     // EXPLICIT
+  fake_load();        // IMPLICIT
+  time_with_pm_dot(); // EXPLICIT
+  delay(1000);
+}
+
+void double_panes() { // double_panes() uses special panes explicitly through lix.special_pane(uint8_t index, bool enabled, CRGB col1, CRGB col2);
+                      // and is independent of any lix.write() or lix.color_* animations
+  
+  lix.write(111111); // Writing a normal integer
+  delay(1000);
+
+  lix.write("222222"); // Passing in a string works as well
+  delay(1000);
+
+  lix.write("2222 2"); // spaces are treated as blank displays
+  delay(1000);
+
+  for (uint8_t i = 0; i < NUM_DIGITS; i++) { // enable special panes in green, one by one
+    lix.special_pane(i, true, CRGB(0, 255, 0));
+    delay(1000);
+  }
+
+  for (uint8_t i = 0; i < NUM_DIGITS; i++) { // enable dual-color special panes, one by one
+    lix.special_pane(i, true, CRGB(0, 255, 255), CRGB(255, 0, 0));
+    delay(1000);
+  }
+
+  for (uint8_t i = 0; i < NUM_DIGITS; i++) { // disable special panes, one by one
+    lix.special_pane(i, false);
+    delay(1000);
+  }
+}
+
+void fake_load() { // fake_load() uses special panes implicitly through lix.write(String input); using spaces and periods, and respects the ON and OFF color groups
+                   // An example of implicitly enabling the special pane at index 2 (rightmost display is index 0) you could run: lix.write("3.14");
+  
+  for (uint8_t i = 0; i < 10; i++) { // repeats 10 times
+    String message;
+    for (uint8_t i = 0; i < NUM_DIGITS; i++) {
+      message.concat(' ');
+    }
+
+    // Creates a "scanning" animation for any display size
+    for (uint8_t x = 0; x < NUM_DIGITS; x++) {
+      for (uint8_t y = 0; y < NUM_DIGITS; y++) {
+        if (x == y) {
+          message.setCharAt(y, '.');
+        }
+        else {
+          message.setCharAt(y, ' ');
+        }
+      }
+
+      // prints: ".   ", then
+      //         " .  ", then
+      //         "  . ", then
+      //         "   .", then loops
+
+      lix.write(message);
+      delay(250);
+    }
+  }
+}
+
+void time_with_pm_dot(){
+  lix.write("1234"); // WRITE "TIME"
+
+  // Blink "PM" dot on and off, in cyan, ten times
+  for(uint8_t i = 0; i < 10; i++){
+    lix.special_pane(3, true, CRGB(0, 255, 255));
+    delay(1000);
+    lix.special_pane(3, false);
+    delay(1000);
+  }
+}