K.I.T.T. Scanner (Knight Rider) http://mbed.org/users/okini3939/programs/KittScanner_sample/latest
Diff: KITTScanner.cpp
- 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; + } + } +}