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