From 5a741d870b46fdff58509e95c080d5241eb9dc68 Mon Sep 17 00:00:00 2001
From: Tangent 128 <Tangent128@gmail.com>
Date: Mon, 28 Oct 2019 00:03:49 -0400
Subject: [PATCH] Add mardi_gras pattern

---
 hello_gradient/src/bin/mardi_gras.rs | 42 ++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 hello_gradient/src/bin/mardi_gras.rs

diff --git a/hello_gradient/src/bin/mardi_gras.rs b/hello_gradient/src/bin/mardi_gras.rs
new file mode 100644
index 0000000..6841330
--- /dev/null
+++ b/hello_gradient/src/bin/mardi_gras.rs
@@ -0,0 +1,42 @@
+#![no_std]
+#![no_main]
+
+use lights::{
+    gamma::correct,
+    rgb::{linear_gradient, Rgb},
+    HardwareRgb, PixelIterator,
+};
+use lights_hal::{boot, delay, entry};
+
+const YELLOW: Rgb = Rgb(255, 255, 0);
+const GREEN: Rgb = Rgb(100, 255, 0);
+const PURPLE: Rgb = Rgb(196, 0, 255);
+
+const SEGMENT_LEN: usize = 50;
+const BUFFER_LEN: usize = 200;
+
+#[entry]
+fn main() -> ! {
+    let mut lights = boot();
+    lights.heartbeat();
+
+    let mut gradient = linear_gradient(YELLOW, GREEN, SEGMENT_LEN)
+        .chain(linear_gradient(GREEN, PURPLE, SEGMENT_LEN))
+        .chain(linear_gradient(PURPLE, YELLOW, SEGMENT_LEN))
+        .cycle();
+
+    let mut buffer = [HardwareRgb(255, 255, 0); BUFFER_LEN];
+    loop {
+        // blink light to demonstrate loop is still running
+        lights.heartbeat();
+
+        for (i, pixel) in gradient.clone().take(BUFFER_LEN).enumerate() {
+            buffer[i] = correct(&pixel);
+        }
+
+        buffer.iter().render_to(&mut lights);
+
+        gradient.next();
+        delay(500_000);
+    }
+}