Невозможно заставить ультразвуковой датчик работать с контроллером двигателя.

Я только начал использовать Arduino Uno, не могу заставить работать ультразвуковой преобразователь, с платой контроллера двигателя выходное значение всегда равно нулю.

Просто чтобы убедиться, что я говорю о правильной теме: Я использовал это руководство, чтобы попытаться заставить его работать (посмотрите на картинку, как я соединил детали).

А это мой код:

#define trigPin A4//Подключите Trig к порту 8
#define echoPin A5// Подключаем Echo к порту 7
#include <AFMotor.h>
//SMARS Demo 2 с линейным датчиком

AF_DCMotor R_motor(2); // определяет правый вывод двигателя
AF_DCMotor L_motor(1); // определяет вывод левого двигателя

int lmotorpin1 = 3;
int lmotorpin2 = 5;
int rmotorpin1 = 6;
int rmotorpin2 = 9;
int distancecm = 0;
//const int trigPin = 18;
//const int echoPin = 19;

// определяет переменные
long duration;
int distance;
void setup() {


  Serial.begin(9600); // настраиваем последовательную библиотеку на скорости 9600 бит/с

  //изменяет следующие значения, чтобы робот двигался как можно прямо
  L_motor.setSpeed(200); // устанавливает скорость двигателя L
  R_motor.setSpeed(140); // устанавливает скорость двигателя R

  R_motor.run(RELEASE); //включаем двигатель L
  L_motor.run(RELEASE); //включаем двигатель R

  pinMode(trigPin, OUTPUT); // Устанавливает trigPin как выход
  pinMode(echoPin, INPUT); // Устанавливает echoPin как вход
}

void loop() {
      Serial.println(trigPin);
    Serial.println(echoPin);
  distancecm = mdistance();
  if (distance < 5) {
    L_motor.run(BACKWARD); //двигает мотор L вперед
    R_motor.run(FORWARD); //двигает мотор L вперед
// задержка(1000);
// L_motor.run(ВПЕРЕД); //двигает мотор L вперед
// R_motor.run(ВПЕРЕД); //двигает двигатель L вперед
// задержка(1000);
  }
  else {
    L_motor.run(FORWARD); //двигает двигатель L вперед
    R_motor.run(FORWARD); //двигает двигатель L вперед
  }
}

int mdistance()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Устанавливает trigPin в состояние HIGH на 10 микросекунд
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Считывает echoPin, возвращает время прохождения звуковой волны в микросекундах
  duration = pulseIn(echoPin, HIGH);
  Serial.print("Duration: ");
  Serial.println(duration);
  // Расчет расстояния
  distance = duration * 0.034 / 2;
  // Печатает расстояние на последовательном мониторе
  Serial.print("Distance: ");
  Serial.println(distance);
}

Как видите, я пробовал разные номера контактов, но всегда 0....

Как вы думаете, что может быть не так?

Двигатели работают. Контроллер двигателя: KEYES L293D Щит управления двигателем Датчик: Ультразвуковой Рейнджер V2.0

, 👍0

Обсуждение

а моторы работают? у тебя есть щит?, @Juraj

какой датчик вы используете?, @MichaelT

Добавил информацию в основной пост в конце, @11alex11

в описании вашей проблемы написано: "Рейнджер не работает с контроллером мотора, но работает без контроллера мотора"..... вот что происходит?, @jsotola

Без контроллера мотора не проверял., @11alex11


1 ответ


-1

Номера контактов 0 и 1 зарезервированы для последовательного монитора, который вы используете на плате. Функция int mdistance() должна возвращать целое число. Вы также, похоже, не установили контакты двигателя как ВЫХОД.

,

Кажется, это скорее комментарий, чем фактическое решение проблемы ОП., @MichaelT

Где контакты 0 и 1? Я не понимаю, почему это проблема, потому что моторы работают. Проблема в ультразвуковом датчике. Пожалуйста, объясните., @11alex11

номер двигателя не является номером контакта, @Juraj