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

Committer:
okini3939
Date:
Sat Jul 16 16:17:57 2011 +0000
Revision:
1:bb116abfe905
Parent:
0:9d29ea3f1886

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:9d29ea3f1886 1 /*
okini3939 0:9d29ea3f1886 2 * mbed library for K.I.T.T. Scanner
okini3939 0:9d29ea3f1886 3 * Copyright (c) 2010 Hiroshi Suga
okini3939 0:9d29ea3f1886 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:9d29ea3f1886 5 */
okini3939 0:9d29ea3f1886 6
okini3939 0:9d29ea3f1886 7 #include "mbed.h"
okini3939 0:9d29ea3f1886 8 #include "KITTScanner.h"
okini3939 0:9d29ea3f1886 9
okini3939 1:bb116abfe905 10 KITTScanner::KITTScanner () {
okini3939 1:bb116abfe905 11 led[0] = new PwmOut(LED1);
okini3939 1:bb116abfe905 12 led[1] = new PwmOut(LED2);
okini3939 1:bb116abfe905 13 led[2] = new PwmOut(LED3);
okini3939 1:bb116abfe905 14 led[3] = new PwmOut(LED4);
okini3939 1:bb116abfe905 15 newflg = 1;
okini3939 1:bb116abfe905 16 }
okini3939 0:9d29ea3f1886 17
okini3939 1:bb116abfe905 18 KITTScanner::KITTScanner (PwmOut &led1, PwmOut &led2, PwmOut &led3, PwmOut &led4) {
okini3939 1:bb116abfe905 19 led[0] = &led1;
okini3939 1:bb116abfe905 20 led[1] = &led2;
okini3939 1:bb116abfe905 21 led[2] = &led3;
okini3939 1:bb116abfe905 22 led[3] = &led4;
okini3939 1:bb116abfe905 23 newflg = 0;
okini3939 1:bb116abfe905 24 }
okini3939 1:bb116abfe905 25
okini3939 1:bb116abfe905 26 KITTScanner::~KITTScanner () {
okini3939 1:bb116abfe905 27 int i;
okini3939 1:bb116abfe905 28
okini3939 1:bb116abfe905 29 stop(1);
okini3939 1:bb116abfe905 30 if (newflg) {
okini3939 1:bb116abfe905 31 for (i = 0; i < 4; i ++) {
okini3939 1:bb116abfe905 32 delete led[i];
okini3939 1:bb116abfe905 33 }
okini3939 1:bb116abfe905 34 }
okini3939 0:9d29ea3f1886 35 }
okini3939 0:9d29ea3f1886 36
okini3939 0:9d29ea3f1886 37 void KITTScanner::start (float speed) {
okini3939 1:bb116abfe905 38 int i;
okini3939 0:9d29ea3f1886 39
okini3939 1:bb116abfe905 40 for (i = 0; i < 4; i ++) {
okini3939 1:bb116abfe905 41 bright[i] = 0;
okini3939 1:bb116abfe905 42 }
okini3939 1:bb116abfe905 43 num = 0;
okini3939 1:bb116abfe905 44 quit = 0;
okini3939 1:bb116abfe905 45 ticker.attach(this, &KITTScanner::int_KITTScanner, speed / 6.0);
okini3939 0:9d29ea3f1886 46 }
okini3939 0:9d29ea3f1886 47
okini3939 0:9d29ea3f1886 48 void KITTScanner::stop (int flg) {
okini3939 1:bb116abfe905 49 int i;
okini3939 0:9d29ea3f1886 50
okini3939 1:bb116abfe905 51 if (flg) {
okini3939 1:bb116abfe905 52 // fast stop
okini3939 1:bb116abfe905 53 ticker.detach();
okini3939 1:bb116abfe905 54 for (i = 0; i < 4; i ++) {
okini3939 1:bb116abfe905 55 *led[i] = 0;
okini3939 1:bb116abfe905 56 }
okini3939 1:bb116abfe905 57 } else {
okini3939 1:bb116abfe905 58 // slow stop
okini3939 1:bb116abfe905 59 quit = 1;
okini3939 1:bb116abfe905 60 }
okini3939 0:9d29ea3f1886 61 }
okini3939 0:9d29ea3f1886 62
okini3939 0:9d29ea3f1886 63 void KITTScanner::int_KITTScanner () {
okini3939 1:bb116abfe905 64 int i, flg;
okini3939 1:bb116abfe905 65
okini3939 1:bb116abfe905 66 for (i = 0; i < 4; i ++) {
okini3939 1:bb116abfe905 67 *led[i] = bright[i];
okini3939 0:9d29ea3f1886 68
okini3939 1:bb116abfe905 69 // fade out
okini3939 1:bb116abfe905 70 bright[i] = bright[i] / 3.0;
okini3939 1:bb116abfe905 71 if (bright[i] < (1.0 / 3.0 / 3.0)) {
okini3939 1:bb116abfe905 72 bright[i] = 0;
okini3939 1:bb116abfe905 73 }
okini3939 1:bb116abfe905 74 }
okini3939 1:bb116abfe905 75
okini3939 1:bb116abfe905 76 if (! quit) {
okini3939 1:bb116abfe905 77 // scan
okini3939 0:9d29ea3f1886 78
okini3939 1:bb116abfe905 79 if (num >= 0) {
okini3939 1:bb116abfe905 80 // right
okini3939 1:bb116abfe905 81 bright[num] = 1.0;
okini3939 1:bb116abfe905 82 num ++;
okini3939 1:bb116abfe905 83 if (num > 3) {
okini3939 1:bb116abfe905 84 num = -2;
okini3939 1:bb116abfe905 85 }
okini3939 1:bb116abfe905 86 } else {
okini3939 1:bb116abfe905 87 // left
okini3939 1:bb116abfe905 88 bright[- num] = 1.0;
okini3939 1:bb116abfe905 89 num ++;
okini3939 1:bb116abfe905 90 }
okini3939 1:bb116abfe905 91
okini3939 1:bb116abfe905 92 } else {
okini3939 1:bb116abfe905 93 // slow stop
okini3939 1:bb116abfe905 94
okini3939 1:bb116abfe905 95 flg = 0;
okini3939 1:bb116abfe905 96 for (i = 0; i < 4; i ++) {
okini3939 1:bb116abfe905 97 if (bright[i] > 0) {
okini3939 1:bb116abfe905 98 flg = 1;
okini3939 1:bb116abfe905 99 break;
okini3939 1:bb116abfe905 100 }
okini3939 1:bb116abfe905 101 }
okini3939 1:bb116abfe905 102 if (! flg) {
okini3939 1:bb116abfe905 103 // all led off
okini3939 1:bb116abfe905 104 ticker.detach();
okini3939 1:bb116abfe905 105 for (i = 0; i < 4; i ++) {
okini3939 1:bb116abfe905 106 *led[i] = 0;
okini3939 1:bb116abfe905 107 }
okini3939 1:bb116abfe905 108 }
okini3939 1:bb116abfe905 109
okini3939 1:bb116abfe905 110 }
okini3939 0:9d29ea3f1886 111 }