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

KITTScanner.cpp

Committer:
okini3939
Date:
2010-10-18
Revision:
0:9d29ea3f1886
Child:
1:bb116abfe905

File content as of revision 0:9d29ea3f1886:

/*
 * 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;
	    }
	}
}