Как воспроизвести голосом большую переменную

wenom86
Offline
Зарегистрирован: 04.11.2012

Здравствуйте. Не могу решить возникшую проблему.

Задача стоит в том, чтобы ардуино воспроизвела значение переменной *допустим 1022, как отдельные файлы с записями "тысяча" "двадцать" " два". Файлы в формате wav имеются, но как заставить ардуину составить последовательность?

Мне путь решения видится так:

в цикле loop() 
проверяем воспроизводится ли файл и нужно ли начать воспроизведение.
если чило больше или равно100 то находим его цифру сотен, отнимаем от числа его сотни тоесть из 235 вычитаем 200 (var*100), формируем имя файла функцией sprintf(buf, "%d00.wav", var); 
если число больше или равно 20 то находим его цифру десятков, вычитаем десятки из 35 надо вычесть 30(var*10) ,формируем имя файла sprintf(buf, "%d0.wav", var); 
иначе (от 0 до 19) - формируем имя файла sprintf(buf, "%d.wav", var); 
Запускаем воспроизведение и идем далее по циклу loop()
в итоге постепенно уменьшая число мы знаем что еще осталось воспроизвести.
 
 
Но как это все выразить в коде, запутался!
 
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Переусложнили, потому и запутались. Думайте над упрощением.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016
unsigned int число = начальное_число;

тысячи = число / 1000;

число = число % 1000;

сотни = число / 100;

число = число % 100;

десятки = число  /  10;

единицы=(десятки > 1)?(число % 10) : (число);

if (тысячи) Произнести (тысяч (тысячи));

if (сотни) Произнести (сотен(сотни));

if (десятки > 1) Произнести (десятков(десятки));

if (единицы) Произнести (единиц(единицы));

else if (начальное_число) Произнести ("ровно");

else Произнести ("ноль");

====================

функции тысяч, сотен, десятков, единиц - задают правильное произношение числительных, например

9 - девятьсот, а 4 - четыреста. Единицы - произносят все от 1 до 19.

Функция Произнести () - символическая, при кодировании вся конструкция из "Произнести (сотен(сотни))" и т.п., должна определяться программистом.