Как рандомизировать задержку в коде шагового двигателя Arduino?
Как добавить случайную ЗАДЕРЖКУ между 10 и 20 секундами?
Например, в следующей логике шагового двигателя задержка составляет 11 секунд, что выражается в миллисекундах как: delay(11000).
Что мне нужно добавить (или изменить), чтобы это время было случайным от 10 до 20 секунд?
//#define IN1 8
//#define IN2 9
//#define IN3 10
//#define IN4 11
int Steps = 0;
boolean Direction = true;
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4095;
long time;
void setup()
{
Serial.begin(115200);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
while(steps_left>0){
currentMillis = micros();
if(currentMillis-last_time>=1000){
stepper(1);
time=time+micros()-last_time;
last_time=micros();
steps_left--;
}
}
Serial.println(time);
Serial.println("Wait...!");
delay(11000); // delay timing
Direction=!Direction;
steps_left=4095;
}
Прошу прощения за внешний вид кода. Каждый раз, когда я его публикую, он искажается. Надеюсь, это понятно.
@ebucket, 👍1
Обсуждение1 ответ
Лучший ответ:
В setup()
добавьте
randomSeed(analogRead(0));
Это считывает значение аналогового входного контакта, который, если не подключен, будет колебаться в относительно случайных значениях от 0 до 1023. Это «задает» генератор случайных чисел, поэтому шаблон случайных чисел, который вы получите позже, не всегда будет давать одни и те же результаты каждый раз, когда вы запускаете скетч.
В вызове delay()
просто замените фиксированное значение вызовом функции random(min, max)
, например:
delay(random(10000, 20000));
Но во время отладки рассмотрите возможность использования постоянного начального числа, чтобы можно было получать повторяющиеся результаты или проверять результат одного изменения., @JRobert
Эй, спасибо вам большое, ребята. Очень признателен. Я учусь по ходу дела, и это очень помогает!, @ebucket
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Использовать timer0, не влияя на millis() и micros().
- Запустить два степпера одновременно
- Могу ли я запретить библиотеке Stepper удерживать двигатель?
- Arduino Мигает двумя светодиодами без задержки (количество повторений)
- Питание двух шаговых двигателей с драйверами A4988
- Управление функцией включения на драйвере микрошагового устройства
- Шаговый двигатель с датчиком HCSR-04
https://www.arduino.cc/reference/en/language/functions/random-numbers/random/, @Juraj