Отдельный поток для звука

RANDREY
Offline
Зарегистрирован: 10.06.2012

 Есть код всякий (ожидание команд по USB), но хочу чтоб в фоне выдавался независимо звук

звук генеруется кодом, и не меняется при выполнении другого основного кода,

не хочется отдельный генератор делать...у меня мега, оригинальная

 

void loop()
{

PIEZO_ON;
delayMicroseconds(100);
PIEZO_OFF;
delayMicroseconds(100);

При других языках было бы не что подобное

код инициализации
 

CreateThread (@beep.... - подпрограмма генерации звука

основной код со своим loop

leshak
Offline
Зарегистрирован: 29.09.2011

 

1. Смотрим прикрепленные ветки на форуме про то как правильно всталять код/картинки.

 

2. Забываем про многопоточность. Вопрос не в языке, а в архитектуре самого процессора. Настоящая "одновременность" возможна только для задачь имеющих "железную реализацию" (генерация PWM и т.п.)

3. Забываем про использование delay() и всего подобного что может "останавливать основной (и единственный) поток. В разделе программирования смотрим пример "мигаем светодиодом без delay()". Любые "долгие действия" делаем только вычисляя/запоминая временные интервалы и проверяя "настало пора что-то делать или нет"

4. Гуглим работу с таймерами на Arduino/AVR. Наиболее близкое, идеологически к потокам, но... не более чем "близкое". И "вникать в железо"  - таки прийдется.
5. Прежде чем изобретать велосипед - смотрим какие уже существуют либы для ардуины. Хотя-бы наиболее популярно-официальные http://arduino.cc/en/Reference/Libraries Помоему там можно найти готовое решени вашей задачи.

 

RANDREY
Offline
Зарегистрирован: 10.06.2012

спасибо,

жалко однозадачный процессор, как Z80, но там хоть эмуляция была про int

придется железный делать таймер... 

leshak
Offline
Зарегистрирован: 29.09.2011

RANDREY пишет:

спасибо,

жалко однозадачный процессор, как Z80, но там хоть эмуляция была про int

Ну дык одного же класса :) Родственники. А "эмуляции" - так и тут в полный рост (хотя "общего решения" - нет. в каждом случае смотреть как лучше это сделать).

RANDREY пишет:

придется железный делать таймер... 

Вы явно не  прочитали все пункты до конца .

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

RANDREY пишет:

спасибо,

жалко однозадачный процессор, как Z80, но там хоть эмуляция была про int

придется железный делать таймер... 

Ну Вы чё? Учите матчасть! Функция тоне/нотоне

RANDREY
Offline
Зарегистрирован: 10.06.2012

а tone интересная штука на счет ШИМа, я уж думал придется в код вставки разбрасывать on, off c выверкой исполнения между ними... 

leshak
Offline
Зарегистрирован: 29.09.2011

RANDREY пишет:

 я уж думал придется в код вставки разбрасывать on, off c выверкой исполнения между ними... 

Ну я же вам ссылку на библиотеки давал. Там в разделе Audio and Waveforms всего две библиотеки. Одна для анализа входящей частоты,  другая - та самая Tone.

А "расбрасывать с выверкой" - инетерестно с учебных целях.