Skip to content
Snippets Groups Projects
Commit 76e380a4 authored by Mario Engelmann's avatar Mario Engelmann
Browse files

stufff

parents 3fe725e0 728508c5
Branches
Tags android-wear-6.0.1_r0.61
No related merge requests found
#ifndef SAYNUMBERS_H
#define SAYNUMBERS_H
void sayNumber(int32_t number);
void sayNumber(double number, uint8_t roundDigits);
#endif
#include "mp3.h"
#include "soundFiles.h"
// says the digit
static void sayDigit(int8_t number) {
switch (number) {
case 0:
playFileQueue(SOUND_NULL);
break;
case 1:
playFileQueue(SOUND_EINS);
break;
case 2:
playFileQueue(SOUND_ZWEI);
break;
case 3:
playFileQueue(SOUND_DREI);
break;
case 4:
playFileQueue(SOUND_VIER);
break;
case 5:
playFileQueue(SOUND_FUNF);
break;
case 6:
playFileQueue(SOUND_SECHS);
break;
case 7:
playFileQueue(SOUND_SIEBEN);
break;
case 8:
playFileQueue(SOUND_ACHT);
break;
case 9:
playFileQueue(SOUND_NEUN);
break;
default:
break;
}
}
// Same as sayNumber(int32_t n) only for 1 it says EIN instead of EINS.
static void sayPreNumber(int32_t number) {
if (number == 1)
playFileQueue(SOUND_EIN);
else
sayNumber(number);
}
// Same as sayNumber(int32_t n) only for 0 it does nothing
static void sayAftNumber(int32_t number) {
if (number)
sayNumber(number);
}
// say integer number
void sayNumber(int32_t number) {
// Negative numbers are spoken the same way as positive numbers only with "Minus" at the beginning.
if (number < 0) {
playFileQueue(SOUND_MINUS);
sayNumber(-number);
// 1-digit numbers
} else if (number < 10) {
sayDigit(number);
// 2-digit numbers
} else if (number < 100) {
// extra cases for 11 and 12
switch (number) {
case 11:
playFileQueue(SOUND_ELF);
break;
case 12:
playFileQueue(SOUND_ZWOLF);
break;
default:
// German specific: Say the 1-digit first, then the 10-digit
int32_t tens = number / 10;
int32_t ones = number - 10 * tens;
// first say the 1-digit
if (ones) {
sayPreNumber(ones);
// UND only for numbers > 20. (VierUNDzwanzig, but not VierUNDzehn.)
if (tens >= 2)
playFileQueue(SOUND_UND);
}
// then say the 10-digit
switch (tens) {
case 1:
playFileQueue(SOUND_ZEHN);
break;
case 2:
playFileQueue(SOUND_ZWANZIG);
break;
case 3:
playFileQueue(SOUND_DREISSIG);
break;
case 4:
playFileQueue(SOUND_VIERZIG);
break;
case 5:
playFileQueue(SOUND_FUNFZIG);
break;
case 6:
playFileQueue(SOUND_SECHZIG);
break;
case 7:
playFileQueue(SOUND_SIEBZIG);
break;
case 8:
playFileQueue(SOUND_ACHTZIG);
break;
case 9:
playFileQueue(SOUND_NEUNZIG);
break;
default:
break;
}
break;
}
// 3-digit numbers
} else {
int32_t hundreds = number / 100;
sayPreNumber(hundreds);
playFileQueue(SOUND_HUNDERT);
sayAftNumber(number - 100 * hundreds);
}
}
/*
* Say any number in the int-range between -999999 and 999999 (in German)
* double n: The number to say
* uint8_t roundDigits: How many digits after the comma should be said (last one will get rounded)
* Example: sayNumber(34.236, 2) will say "Vierunddreißig Komma Zwei Vier"
*/
void sayNumber(double number, uint8_t roundDigits) {
// do the rounding at the correct digit
number = round(number * pow(10, roundDigits)) / pow(10, roundDigits);
// say the pre-decimal digits
int32_t int_n = (int32_t)number;
sayNumber(int_n);
// say the decimals
if (roundDigits) {
number = abs(number - int_n);
playFileQueue(SOUND_KOMMA);
for (int8_t digit = 1; digit <= roundDigits; ++digit) {
double d_newDigit = number * pow(10, digit) - 10 * (int32_t)(number * pow(10, digit-1));
int8_t newDigit;
// round correctly for the last digit
if (digit == roundDigits)
newDigit = (int8_t)round(d_newDigit);
else
newDigit = (int8_t)d_newDigit;
sayDigit(newDigit);
}
}
}
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "temperature.h" #include "temperature.h"
#include "mp3.h" #include "mp3.h"
#include "soundFiles.h" #include "soundFiles.h"
#include "sayNumber.h"
#include <LiquidCrystal_I2C.h> #include <LiquidCrystal_I2C.h>
// LCD display at address 0x27 with 16 columns and 2 rows // LCD display at address 0x27 with 16 columns and 2 rows
...@@ -187,6 +188,7 @@ void loop(void) { ...@@ -187,6 +188,7 @@ void loop(void) {
if (checkButton() == LOW) { if (checkButton() == LOW) {
displayLight(true); displayLight(true);
<<<<<<< HEAD
playFileQueue(SOUND_EINS) playFileQueue(SOUND_EINS)
playFileQueue(SOUND_OBEN); playFileQueue(SOUND_OBEN);
sayNumber(t1up_C, nachKommaStellen); sayNumber(t1up_C, nachKommaStellen);
...@@ -202,6 +204,12 @@ void loop(void) { ...@@ -202,6 +204,12 @@ void loop(void) {
playFileQueue(SOUND_EINS) playFileQueue(SOUND_EINS)
playFileQueue(SOUND_OBEN); playFileQueue(SOUND_OBEN);
sayNumber(t1up_C, nachKommaStellen); sayNumber(t1up_C, nachKommaStellen);
=======
playFileQueue(SOUND_TEMPERATURE);
playFileQueue(SOUND_HOCHSTER_WERT);
playFileQueue(SOUND_KOMMA);
sayNumber(14);
>>>>>>> 728508c5cadfd2a5e5b3a23185858e4c4d0d5c45
} else { } else {
displayLight(false); displayLight(false);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment