Как «подделать» многозадачность на 8-битном процессоре? - PullRequest
4 голосов
/ 12 июня 2011

У меня есть Arduino с Adafruit Motor Shield как часть моего робота.Я хочу запускать двигатели одновременно, когда я играю тон на пьезоэлементе.

Проблема в том, что я не совсем знаю, как имитировать / симулировать многозадачность в моем коде.Я попробовал что-то вроде этого:

void goForward(int duration) {

    for (int i; i<duration; i++) {
        tl.run(FORWARD);
        tr.run(BACKWARD);
        bl.run(FORWARD);
        br.run(BACKWARD);
        counter++;

        if (counter%4==0) {
            piezo != piezo;
        }

        delay(1);
    }
}

Это запускает двигатели, но не создает тона на моем пьезоэлементе.Что может быть лучше, чтобы запрограммировать это, чтобы пьезо можно было включать / выключать с частотой 440 Гц во время работы команд двигателя?

Ответы [ 3 ]

3 голосов
/ 12 июня 2011

Я не знаю плату Arduino, но большинство микроконтроллеров имеют прерывания по таймеру. Вы пытались настроить такой таймер? В обработчике прерывания по таймеру вы можете включить / отключить пьезоэлемент, а основной контур можно использовать для управления двигателем.

0 голосов
/ 27 июня 2011

Создайте планировщик для создания параллельных задач и используйте два таймера для ваших двигателей, а если у вас есть третий, используйте его для зуммера.

0 голосов
/ 13 июня 2011

Обычные платы Arduino имеют только 3 таймера.Это ограничивает возможности «многозадачности» до 3 «потоков».Arduino Mega имеет 16 таймеров.Другими словами, Arduino Mega может стать вашим решением.Нет

...