Как сделать шаговую остановку, если оба датчика находятся на LOW уровне ? l293d motor shield

Я попробовал этот код ниже, но он не останавливает его, просто быстро переключает направление, что выглядит так, как будто он дрожит, я думаю, потому что он всегда читает void startF/R, вот почему он дрожит .

Мне нужна помощь в том, как полностью остановить шаговый двигатель, если он считывает оба датчика на низком уровне

if (sensLval== LOW || sensRval == LOW){
     steppStop(); 
}

это мой код пустого цикла ниже

    void startF()
  {
    motor1.step(10, FORWARD,SINGLE);
    
  }

    void startR()
  {
    motor1.step(10, BACKWARD,SINGLE);
    
  }

    void steppStop(){
  motor1.step(0, BACKWARD, SINGLE);
 
 motor1.step(0, FORWARD, SINGLE);
}

 
    void loop() {
  sensRval=digitalRead(sensR);
  
sensLval=digitalRead(sensL);


  if (sensLval == LOW)

{
    startF();
  }
  
if (sensLval== LOW && sensRval == LOW)

{
     steppStop();
  }

  if (sensRval == LOW)

{
    startR();
  }
  
  
  
}

, 👍1


1 ответ


1

Изолируйте свои условия.

В данный момент вы проверяете:

  • Оба датчика НИЗКИЕ одновременно и
  • Либо датчик НИЗКИЙ сам по себе

Если оба они низкие—не проверяйте, что они НИЗКИЕ (что запускает startX).

if (sensLval == LOW && sensRval == LOW) {
    steppStop();
} else if (sensLval == LOW) {
    startF();
} else if (sensRval == LOW) {
    startR();
}

Могут быть и другие соображения, но этого достаточно, чтобы обойти эту проблему.


Несвязанный, но последовательный отступ имеет большое значение для удобочитаемости кода и помогает другим рассуждать о коде в целом. При публикации кода рекомендуется форматировать код как код, описанный здесь и при редактировании вопроса.

,

Я сожалею о формате , я все еще учусь, но в следующий раз у меня все будет хорошо. Теперь код работает, спасибо большое! Я не знал, что вы могли бы закодировать его таким образом. Это круто!, @Exes