Я в Ардуине дуб дубом. Но иногда смотрю скетчи и вот такую вещь заметил - подавляющее большинство даже простыми функциями Ардуины пользуется неправильно. Покажу на примере, взятом прямо с этого форума. Вот есть тема - Помигаем светодиодом. Там какие то простенькие примеры. Вот прямо первый и возьмем оттуда:
Все всем нравится? Мне - нет. Представим ситуацию - Вы хотите купить рояль, но не уверены, что он влезет в вашу комнату. Вы заказали доставку рояля, приехала машина с роялями, вы взяли оттуда рояль и затащили его на 9 этаж. Померили - не входит. И выкинули его в окно. Или - входит и вы... выкинули его в окно и пошли вниз тащить к себе другой, точно такой же рояль. Звучит как бред? Но именно это происходит в примере!
Вызвали millis(), сравнили и если сравнение устроило - вызвали millis() снова. Потом кто то удивляется что Ардуина тормозит?
Там в теме ниже есть пример с ЧЕТЫРЬМЯ вызовами. Хотя в любом варианте достаточно одного. Да, это небольшая потеря времени и немного лишней флеши займет. Но немного там, немного тут - так и набирается.
Да, я ж не сказал как не тащить рояль дважды и четырежды. А это ну очень просто - добавьте локальную переменную и считывайте millis туда. Один раз. А все сравнения и присваивания делайте уже с этой локальной переменной.
C++:
#define LED_1 9
#define LED_2 10
#define TMD 5 // задержка между шагами
void setup() {
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
}
uint8_t step = 0;
uint32_t tmr = 0;
void loop() {
if (millis() - tmr > TMD)
{
tmr = millis();
analogWrite(LED_1, step);
analogWrite(LED_2, step + 128);
step++;
}
}
Вызвали millis(), сравнили и если сравнение устроило - вызвали millis() снова. Потом кто то удивляется что Ардуина тормозит?
Там в теме ниже есть пример с ЧЕТЫРЬМЯ вызовами. Хотя в любом варианте достаточно одного. Да, это небольшая потеря времени и немного лишней флеши займет. Но немного там, немного тут - так и набирается.
Да, я ж не сказал как не тащить рояль дважды и четырежды. А это ну очень просто - добавьте локальную переменную и считывайте millis туда. Один раз. А все сравнения и присваивания делайте уже с этой локальной переменной.