1 (edited by LinkinPark-34 2017-06-11 21:06:02)

Topic: Задержка вращения моторов.

Имеется дистанционное управление вращением двух моторов, хочу сделать чтоб при переключении switch в положение on моторы вращались по заданной программе.

Не получается сделать задержку вращения  моторов, пробовал через delay - моторы вращаются в одном направлении и больше не реагируют.
Через  функцию millis(), вращение не происходит (но звук срабатывания есть) и при переключении switch в off дистанционное управление возвращается.

нерабочая реализация:

if (RemoteXY.switch_1!=0) {
time1=millis();
     
  digitalWrite (PIN_MOTOR_RIGHT_UP, HIGH);   \\вращение моторов вперед
  digitalWrite (PIN_MOTOR_RIGHT_DN, LOW);
  analogWrite(PIN_MOTOR_RIGHT_SPEED,220);
  digitalWrite (PIN_MOTOR_LEFT_UP, HIGH);
  digitalWrite (PIN_MOTOR_LEFT_DN, LOW);
  analogWrite(PIN_MOTOR_LEFT_SPEED,220);
if (time1+2000>millis ())
{
  digitalWrite (PIN_MOTOR_RIGHT_UP, HIGH);  \\ через 2 се вращение моторов назад
  digitalWrite (PIN_MOTOR_RIGHT_DN, LOW);
  analogWrite(PIN_MOTOR_RIGHT_SPEED,120);
  digitalWrite (PIN_MOTOR_LEFT_DN, HIGH);
  digitalWrite (PIN_MOTOR_LEFT_UP, LOW);
  analogWrite(PIN_MOTOR_LEFT_SPEED,120);
}
 
if (time1+3000>millis ()){
  analogWrite(PIN_MOTOR_RIGHT_SPEED,0);  \\через 3 сек остановка
  analogWrite(PIN_MOTOR_LEFT_SPEED,0);
}

2 (edited by Spell 2017-09-15 20:06:18)

Re: Задержка вращения моторов.

Если еще актуально.
У Вас time1 не там устанавливается.
Смотрите, что происходит: Вы установили Time1 и, фактически, тут же делаете сравнение time1+2000>millis (). Шесть команд между этими строчками не будут выполняться 2 сек, поэтому условие никогда не выполнится.
Кроме этого, первые шесть команд будут выполняться всегда, т.е. каждый цикл loop.
По идее должен подойти delay, если, конечно, в программе не требуется чего-то еще.
Т.е. в модулях.
Команды вперед
delay(2000)
Команды назад
delay(3000)
Команды стоп
delay(хххх)
Последняя задержка обязательно, чтобы они какое-то время постояли.
Если не поставить, то программа будет пролетать этот кусок, и Вы его выполнения просто не заметите.