Очередной 2WD робот

Нет ответов
Мастер
Offline
Зарегистрирован: 18.09.2015

Всем привет,

Собрал 2wd робота из: Arduino Nano, L293E, HC-SR04, 2 dc двигателя с редукторомами

залил приведёный ниже скетч 

хотелось бы услышать полезных советов или ссылок на похожее, а то я считаю фигня какая-то получилась)))


struct MOTOR    // структура для хранения номеров pin-ов, к которым подключены моторчики
{
  int in1;      // INPUT1
  int in2;      // INPUT2
  int enable;   // ENABLE1
};
int Trig = 11; // УЗИ
int Echo = 10; // УЗИ
int ledPin = 13; // светодиод на плате ардуино
unsigned int impulseTime = 0; // импульс для УЗИ
unsigned int distance_sm = 0;

// определяем порты, к которым подключены моторчики
MOTOR MOTOR1 = { 7, 8, 9 };
MOTOR MOTOR2 = { 2, 4, 6 };

void setup()
{
  Serial.begin(9600);
  pinMode(MOTOR1.in1, OUTPUT); // настраиваем выводы
  pinMode(MOTOR1.in2, OUTPUT); // на ВЫВОД
  pinMode(MOTOR2.in1, OUTPUT);
  pinMode(MOTOR2.in2, OUTPUT);
  pinMode(Trig, OUTPUT); // выход УЗИ
  pinMode(Echo, INPUT); // вход УЗИ
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  digitalWrite(Trig, HIGH);
  /* Подаем импульс на вход trig дальномера */
  delayMicroseconds(10); // равный 10 микросекундам
  digitalWrite(Trig, LOW); // Отключаем
  impulseTime = pulseIn(Echo, HIGH); // Замеряем длину импульса
  distance_sm = impulseTime / 58; // Пересчитываем в сантиметры
  Serial.println(distance_sm); // Выводим на порт
  delay(100);
  if (distance_sm < 15) // Если расстояние менее X сантиметров
  {
    forward1() ;
    back2() ;
  }
  else
  {
    forward1() ;
    forward2();
  }
  delay(100);
}

void forward1() // первый вперёд
{
  digitalWrite(MOTOR1.in1, HIGH);
  digitalWrite(MOTOR1.in2, LOW);
  for (int i = 0; i <= 255; i++)
    analogWrite(MOTOR1.enable, i);
}

void forward2() // второй вперёд
{
  digitalWrite(MOTOR2.in1, HIGH);
  digitalWrite(MOTOR2.in2, LOW);
  for (int i = 0; i <= 255; i++)
    analogWrite(MOTOR2.enable, i);
}

void back1() // первый назад
{
  digitalWrite(MOTOR1.in1, LOW);
  digitalWrite(MOTOR1.in2, HIGH);
  for (int i = 0; i <= 255; i++)
    analogWrite(MOTOR1.enable, i);
}

void back2() // второй назад
{
  digitalWrite(MOTOR2.in1, LOW);
  digitalWrite(MOTOR2.in2, HIGH);
  for (int i = 0; i <= 255; i++)
    analogWrite(MOTOR2.enable, i);
}