Помогите найти ошибку в коде

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем schmitz, 1 мар 2016.

Метки:
  1. schmitz

    schmitz Нуб

    Делаю робота для робот - сумо и столкнулся с проблемой. По непонятной мне причине у меня не работает правый мотор. Загружаю на этого же робота другую программу - все работает исправно. С помощью библиотеки Serial убедился в исправности дальномера. Но меня смущает датчик линии (как ни странно) и команды управления моторами. Буду очень рад услышать, в чем моя ошибка))
    Моторов два, коллекторные.


    Код (C++):
    #define SPEED_1  4   // скорость левого мотора
    #define DIR_1    5   // направление левого мотора
    #define SPEED_2  6   // скорость правого мотора
    #define DIR_2    7   // направление правого мотора
    #include <NewPing.h>
    #define TRIGGER_PIN  12   //пины  дальномера
    #define ECHO_PIN     11
    #define MAX_DISTANCE 200
    NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

    void setup() {
    for (int i = 4; i < 8; i++)
        pinMode(i, OUTPUT);
        pinMode ( 9, INPUT);
    }
    void loop() {
    delay(50);
    if (digitalRead(9)==0) {   //если выехал за линию - вернись обратно!
        analogWrite(SPEED_1, 255);
      digitalWrite(DIR_1, LOW);
      delay(1000);
      analogWrite(SPEED_2, 255);
      digitalWrite(DIR_2, LOW);
      delay(1000);
      }
      int d = sonar.ping_cm();

      if (d==0 || d>200) {              // поиск пративика. Должен поворачиваться
        analogWrite(SPEED_1, 255);      // и посылать сигнал с дальномера, пока не обнаружит
      digitalWrite(DIR_1, LOW);
      analogWrite(SPEED_2, 255);
      digitalWrite(DIR_2, HIGH);
      delay(1000);

     
      }
      if (d<200, d<0) {
         analogWrite(SPEED_1, 255);   //Атака соперника ударом лоб в лоб
      digitalWrite(DIR_1, HIGH);
      analogWrite(SPEED_2, 255);
      digitalWrite(DIR_2, HIGH);


      }
    }
     
    Последнее редактирование: 1 мар 2016
  2. ostrov

    ostrov Гуру

    Это как:
    if(d==0|| d>200)
    и особенно это:
    if(d<200, d<0)
    ?
     
    Tomasina нравится это.
  3. schmitz

    schmitz Нуб

    d - это переменная, отвечающая за расстояние до врага. Первая строка - если он не видит врага (диаметр поля - 200 см.)
    Вторая - если он врага видит, т.е. объект находится в пределах поля.
     
  4. ostrov

    ostrov Гуру

    Первая не имеет смысла при максимальном расстрянии 200, вторая вообще записана неправильно.
     
  5. schmitz

    schmitz Нуб

    Спасибо за указание. Не могли бы посоветовать, как будет лучше?