2011-06-12 3 views
4

У меня есть Ардуино с Адафрутом Моторным щитом как часть моего робота. Я хочу запускать двигатели одновременно, я играю тон на пьезоэлементе.Как «подделать» многозадачность на 8-битный процессор?

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

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

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

+0

Хм ... проблема в том, что моторный щит использует оба таймерных прерывания. –

+0

Затем найдите внешний зуммер с фиксированной частотой, который будет генерировать звук при подаче простого сигнала ON. – avra

0

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

0

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

Смежные вопросы