K.I.T.T. Scanner (Knight Rider) http://mbed.org/users/okini3939/programs/KittScanner_sample/latest
Revision 1:bb116abfe905, committed 2011-07-16
- 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