93 lines
2.4 KiB
C
93 lines
2.4 KiB
C
|
|
#include "support.h"
|
|
|
|
void printMilliseconds(uint16_t value) {
|
|
/* Given a value in milliseconds, prints out how many seconds
|
|
you took over the serial port. Does ascii conversion, prints
|
|
decimal point, and drops extra leading zeros.
|
|
*/
|
|
uint8_t digit;
|
|
|
|
printString("\r\nYou took ");
|
|
/* add up ten-thousands */
|
|
digit = 0;
|
|
while (value >= 10000) {
|
|
digit++;
|
|
value -= 10000;
|
|
}
|
|
if (digit) {
|
|
transmitByte('0' + digit);
|
|
}
|
|
/* add up thousands */
|
|
digit = 0;
|
|
while (value >= 1000) {
|
|
digit++;
|
|
value -= 1000;
|
|
}
|
|
transmitByte('0' + digit);
|
|
|
|
/* decimal point here b/c dividing by 1000 */
|
|
transmitByte('.');
|
|
|
|
/* add up hundreds */
|
|
digit = 0;
|
|
while (value >= 100) {
|
|
digit++;
|
|
value -= 100;
|
|
}
|
|
transmitByte('0' + digit);
|
|
/* add up tens */
|
|
digit = 0;
|
|
while (value >= 10) {
|
|
digit++;
|
|
value -= 10;
|
|
}
|
|
transmitByte('0' + digit);
|
|
|
|
// Ones digit is easy.
|
|
transmitByte('0' + value);
|
|
|
|
printString(" seconds.\r\n");
|
|
}
|
|
|
|
void printComments(uint16_t value) {
|
|
/* Given a value in milliseconds, rates your reaction time */
|
|
if (value > 2000) {
|
|
printString("----> Ummm...this is a reaction timer...\r\n");
|
|
}
|
|
else if (value > 1000) {
|
|
printString("----> Hello?\r\n");
|
|
}
|
|
else if (value > 500) {
|
|
printString("----> Slow.\r\n");
|
|
}
|
|
else if (value > 250) {
|
|
printString("----> Have another cup of coffee.\r\n");
|
|
}
|
|
else if (value > 200) {
|
|
printString("----> Respectable.\r\n");
|
|
}
|
|
else if (value >= 150) {
|
|
printString("----> Fast.\r\n");
|
|
}
|
|
else if (value < 150) {
|
|
printString("----> Amazing!\r\n");
|
|
}
|
|
}
|
|
|
|
void randomDelay(void) {
|
|
/* Waits for a "random" delay from 1 - 3.5 sec */
|
|
/* Requires timer 1 initialized and running */
|
|
/* It's not really random, but very hard to control --
|
|
like coin-flipping. */
|
|
uint8_t randomTime;
|
|
|
|
_delay_ms(1000); /* wait at least 1 sec */
|
|
randomTime = (uint8_t) TCNT1;
|
|
/* type-casting the 16-bit TCNT1 as an 8-bit number keeps
|
|
only the 8 least-significant (fastest-changing) bits */
|
|
while (--randomTime) {
|
|
_delay_ms(10); /* max value is 255 ~= 2.5 sec */
|
|
}
|
|
}
|