K.I.T.T. Scanner (Knight Rider) http://mbed.org/users/okini3939/programs/KittScanner_sample/latest

Revision:
0:9d29ea3f1886
Child:
1:bb116abfe905
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/KITTScanner.cpp	Mon Oct 18 14:27:30 2010 +0000
@@ -0,0 +1,78 @@
+/*
+ * mbed library for K.I.T.T. Scanner
+ * Copyright (c) 2010 Hiroshi Suga
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+ 
+#include "mbed.h"
+#include "KITTScanner.h"
+
+PwmOut led[] = {
+    PwmOut(LED1),
+    PwmOut(LED2),
+    PwmOut(LED3),
+    PwmOut(LED4)
+};
+
+//KITTScanner::KITTScanner () : led{LED1, LED2, LED3, LED4} {
+/*
+KITTScanner::KITTScanner () {
+    new(led + 0) PwmOut(LED1);
+    new(led + 1) PwmOut(LED2);
+    new(led + 2) PwmOut(LED3);
+    new(led + 3) PwmOut(LED4);
+*/
+KITTScanner::KITTScanner () {
+}
+
+void KITTScanner::start (float speed) {
+	int i;
+
+	for (i = 0; i < 4; i ++)
+		bright[i] = 0.0;
+	num = 0;
+	kill = 0;
+	ticker.attach(this, &KITTScanner::int_KITTScanner, speed / 6.0);
+}
+
+void KITTScanner::stop (int flg) {
+	int i;
+
+	if (flg) {
+		ticker.detach();
+		for (i = 0; i < 4; i ++)
+			led[i] = 0.0;
+	} else {
+		kill = 1;
+	}
+}
+
+void KITTScanner::int_KITTScanner () {
+	int i, flg;
+
+	for (i = 0; i < 4; i ++) {
+		led[i] = bright[i];
+		bright[i] = bright[i] / 3.0;
+		if (bright[i] < (1.0 / 3.0 / 3.0)) bright[i] = 0.0;
+	}
+
+	if (! kill) {
+		if (num >= 0) {
+			bright[num] = 1.0;
+			num ++;
+			if (num > 3) num = -2;
+		} else {
+			bright[- num] = 1.0;
+			num ++;
+		}
+	} else {
+		flg = 0;
+		for (i = 0; i < 4; i ++)
+			if (bright[i] > 0) flg = 1;
+		if (! flg) {
+			ticker.detach();
+		    for (i = 0; i < 4; i ++)
+			    led[i] = 0.0;
+	    }
+	}
+}