Всем привет! Кто знает как двигать несколькими сервами в ArduinoIDE одновременно, т.е. одновременное выполнение нескольких задач? Примеры кода или в какую сторону мне копать?
Копать в сторону отказа от использования delay(). Временные интервалы засекайте функцией millis(), храня начало интервала в отдельной переменной.
Получается, что я должен в одном временном интервале запустить несколько задач, чтобы достич их одновременного выполнения?
Код (Text): #define INTERVAL1 500 #define INTERVAL2 1000 long _startTime1; long _startTime2; void setup() { Serial.begin(9600); _startTime1 = _startTime2 = millis(); } void loop() { long currentTime = millis(); if(currentTime >= _startTime1 + INTERVAL1) { Serial.print("TASK1 at "); Serial.println(currentTime); _startTime1 = currentTime; } if(currentTime >= _startTime2 + INTERVAL2) { Serial.print("TASK2 at "); Serial.println(currentTime); _startTime2 = currentTime; } } Поиграйте значениями INTERVAL1 и INTERVAL2 и посмотрите, как будет меняться поведение.
Можно использовать прерывание. Код (Text): #include <ve_avr.h> //Инициализация прерывания DEV_TIMER2.setClockSelect(Prescaler2::Prescaler_64); DEV_TIMER2.setWaveGenMode(Timer2::FastPWM); DEV_TICTRL2.outCompIntEnableA(); ISR(TIMER2_COMPA_vect) { Процедура обработки прерывания дергает через ~1 mC } Вам потребуется библиотека VEduino У меня была задача одновременно и медленно вращать 8 сервомашинками. Еще опрашивать кнопки и моргать светодиодами. Все это было реализовано на прерывании.(Arduino UNO)
Для того, чтобы строить всю работу на прерывании таймера, необходимо, чтобы время исполнения каждой задачи делилось без остатка на интервал таймера. В противном случае приходится использовать опрос таймера либо запускать несколько таймеров (если они есть). Кнопки, кстати, тоже не обязательно опрашивать - можно повесить обработчик прерывания на изменение уровня сигнала на некоторых пинах - тогда обработчик будет вызываться только при нажатии кнопки, необходимость опроса отпадет и у контроллера появится дополнительное время на выполнение более важных дел.