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

Files at this revision

API Documentation at this revision

Comitter:
okini3939
Date:
Sat Jul 16 16:17:57 2011 +0000
Parent:
0:9d29ea3f1886
Commit message:

Changed in this revision

KITTScanner.cpp Show annotated file Show diff for this revision Revisions of this file
KITTScanner.h Show annotated file Show diff for this revision Revisions of this file
--- a/KITTScanner.cpp	Mon Oct 18 14:27:30 2010 +0000
+++ b/KITTScanner.cpp	Sat Jul 16 16:17:57 2011 +0000
@@ -7,72 +7,105 @@
 #include "mbed.h"
 #include "KITTScanner.h"
 
-PwmOut led[] = {
-    PwmOut(LED1),
-    PwmOut(LED2),
-    PwmOut(LED3),
-    PwmOut(LED4)
-};
+KITTScanner::KITTScanner () {
+    led[0] = new PwmOut(LED1);
+    led[1] = new PwmOut(LED2);
+    led[2] = new PwmOut(LED3);
+    led[3] = new PwmOut(LED4);
+    newflg = 1;
+}
 
-//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 () {
+KITTScanner::KITTScanner (PwmOut &led1, PwmOut &led2, PwmOut &led3, PwmOut &led4) {
+    led[0] = &led1;
+    led[1] = &led2;
+    led[2] = &led3;
+    led[3] = &led4;
+    newflg = 0;
+}
+
+KITTScanner::~KITTScanner () {
+    int i;
+
+    stop(1);
+    if (newflg) {
+        for (i = 0; i < 4; i ++) {
+            delete led[i];
+        }
+    }
 }
 
 void KITTScanner::start (float speed) {
-	int i;
+    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);
+    for (i = 0; i < 4; i ++) {
+        bright[i] = 0;
+    }
+    num = 0;
+    quit = 0;
+    ticker.attach(this, &KITTScanner::int_KITTScanner, speed / 6.0);
 }
 
 void KITTScanner::stop (int flg) {
-	int i;
+    int i;
 
-	if (flg) {
-		ticker.detach();
-		for (i = 0; i < 4; i ++)
-			led[i] = 0.0;
-	} else {
-		kill = 1;
-	}
+    if (flg) {
+        // fast stop
+        ticker.detach();
+        for (i = 0; i < 4; i ++) {
+            *led[i] = 0;
+        }
+    } else {
+        // slow stop
+        quit = 1;
+    }
 }
 
 void KITTScanner::int_KITTScanner () {
-	int i, flg;
+    int i, flg;
+
+    for (i = 0; i < 4; i ++) {
+        *led[i] = bright[i];
 
-	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;
-	}
+        // fade out
+        bright[i] = bright[i] / 3.0;
+        if (bright[i] < (1.0 / 3.0 / 3.0)) {
+            bright[i] = 0;
+        }
+    }
+
+    if (! quit) {
+        // scan
 
-	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;
-	    }
-	}
+        if (num >= 0) {
+            // right
+            bright[num] = 1.0;
+            num ++;
+            if (num > 3) {
+                num = -2;
+            }
+        } else {
+            // left
+            bright[- num] = 1.0;
+            num ++;
+        }
+
+    } else {
+        // slow stop
+
+        flg = 0;
+        for (i = 0; i < 4; i ++) {
+            if (bright[i] > 0) {
+                flg = 1;
+                break;
+            }
+        }
+        if (! flg) {
+            // all led off
+            ticker.detach();
+            for (i = 0; i < 4; i ++) {
+                *led[i] = 0;
+            }
+        }
+
+    }
 }
--- a/KITTScanner.h	Mon Oct 18 14:27:30 2010 +0000
+++ b/KITTScanner.h	Sat Jul 16 16:17:57 2011 +0000
@@ -1,29 +1,30 @@
-/*
- * mbed library for K.I.T.T. Scanner
- * Copyright (c) 2010 Hiroshi Suga
- * Released under the MIT License: http://mbed.org/license/mit
- */
- 
-#ifndef KITTScanner_H
-#define KITTScanner_H
-
-#include "mbed.h"
-#include <new> 
-
-class KITTScanner : public Base {
-public:
-	KITTScanner ();
-
-	void start (float speed = 1.0);
-	void stop (int flg = 0);
-
-private:
-	Ticker ticker;
-//	PwmOut led[];
-	int num, kill;
-	float bright[4];
-
-	void int_KITTScanner();
-};
-
+/*
+ * mbed library for K.I.T.T. Scanner
+ * Copyright (c) 2010 Hiroshi Suga
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+ 
+#ifndef KITTScanner_H
+#define KITTScanner_H
+
+#include "mbed.h"
+
+class KITTScanner {
+public:
+    KITTScanner ();
+    KITTScanner (PwmOut &led1, PwmOut &led2, PwmOut &led3, PwmOut &led4);
+    ~KITTScanner ();
+
+    void start (float speed = 1.0);
+    void stop (int flg = 0);
+
+private:
+    Ticker ticker;
+    PwmOut *led[4];
+    float bright[4];
+    volatile int num, quit, newflg;
+
+    void int_KITTScanner();
+};
+
 #endif
\ No newline at end of file