Объединение 4 кодов в один

Тема в разделе "Arduino & Shields", создана пользователем Danil0000, 4 мар 2023.

  1. Danil0000

    Danil0000 Нуб

    На алиэкспресс нашел интересного робота. Купил, собрал, мне дали ссылку на код. Разобрался что за что отвечает, но когда запуская один код(1_Auto_move), после этого запуская 2 код(2_follow) мне пишет, что два кода запускать нельзя. Я перерыл данную мне папку и общего кода не нашел. Подскажите пожалуйста как мне поступить. Может можно их как-то объединить в один? Я новичок в ардуино.
     

    Вложения:

  2. Airbus

    Airbus Радиохулиган Модератор

    А как Вы их «запускаете»?
     
  3. Danil0000

    Danil0000 Нуб

    Я открываю код и загружаю.
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Понятно. Дальше. Что делает каждый код в отдельности и что хотите получить в итоговом скетче? И выложите коды чтобы их можно было посмотреть иначе никак Вам не сможем помочь. Ибо не видно ничего Это несложно—типа так
    [​IMG]
     
  5. Danil0000

    Danil0000 Нуб

    Код (C++):
    #define ENA 5
    #define ENB 6
    #define IN1 3
    #define IN2 4
    #define IN3 2
    #define IN4 7

    #define carSpeed 130//Set the carSpeed to 130

    void forward(){//forward function
      analogWrite(ENA, carSpeed);//Set the speed of ENA
      analogWrite(ENB, carSpeed);//Set the speed of ENB
        //The right forward
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      //The left forward
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);

      Serial.println("Forward");
    }

    void back() {//back function
      analogWrite(ENA, carSpeed);//Set the speed of ENA
      analogWrite(ENB, carSpeed);//Set the speed of ENB
      //The rihgt back
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      //The left back
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);
      Serial.println("Back");
    }

    void left() {//left function
      analogWrite(ENA, 200);//Set the speed of ENA
      analogWrite(ENB, 200);//Set the speed of ENB
       //The right forward
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      //The left back
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);

      Serial.println("Left");
    }

    void right() {//right function
      analogWrite(ENA, 200);//Set the speed of ENA
      analogWrite(ENB, 200);//Set the speed of ENB
      //The rihgt back
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
       //The left forward
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);

      Serial.println("Right");
    }

    void stop() {//stop function
      digitalWrite(ENA, LOW);//Set the speed of ENA to low
      digitalWrite(ENB, LOW);//Set the speed of ENB to low
      Serial.println("Stop!");
    }

    void setup() {
      Serial.begin(9600);
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
      pinMode(ENA, OUTPUT);
      pinMode(ENB, OUTPUT);
      stop();
    }

    void loop(){
      forward();
      delay(1000);
      back();
      delay(1000);
      left();
      delay(1000);
      right();
      delay(1000);
    }
     
  6. Danil0000

    Danil0000 Нуб

    Код (C++):
    /*************************************
    *     TIME:2022.06.25
    *     Development Team: Zhiyi Technology Co., Ltd.
    *
    *  **************************************/

    #define ENA 5
    #define ENB 6
    #define IN1 3
    #define IN2 4
    #define IN3 2
    #define IN4 7

    int Sensor1;
    int Sensor2;
    int Sensor3;
    int Sensor4;

    void setup() {

      pinMode(ENA, OUTPUT);
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);

      pinMode(ENB, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);

      pinMode(8, INPUT);
      pinMode(9, INPUT);
      pinMode(10, INPUT);
      pinMode(11, INPUT);
      Serial.begin(9600);
    }

    void loop()
    {

        Sensor1 = digitalRead(8);
        Sensor2 = digitalRead(9);
        Sensor3 = digitalRead(10);
        Sensor4 = digitalRead(11);
       
        if ((Sensor4 == HIGH || Sensor3 == HIGH) && (Sensor2 == LOW || Sensor1 == LOW))
        {
            analogWrite(ENA, 150);
            analogWrite(ENB, 150);

            digitalWrite(IN1, LOW);
            digitalWrite(IN2, HIGH);

            digitalWrite(IN3, HIGH);
            digitalWrite(IN4, LOW);
            Serial.println("left");
        }
       
        else if((Sensor4 == LOW || Sensor3 == LOW) && (Sensor2 == HIGH || Sensor1 == HIGH))
        {
            analogWrite(ENA, 150);
            analogWrite(ENB, 150);
         
            digitalWrite(IN1, HIGH);
            digitalWrite(IN2, LOW);

            digitalWrite(IN3,LOW );
            digitalWrite(IN4, HIGH);
            Serial.println("right");
        }

        else  if(Sensor4 == LOW && Sensor3 == LOW && Sensor2 == LOW && Sensor1 == LOW)
        {
            analogWrite(ENA, 180);
            analogWrite(ENB, 180);
            //FORWARD
            digitalWrite(IN1, HIGH);
            digitalWrite(IN2, LOW);
            digitalWrite(IN3, HIGH);
            digitalWrite(IN4, LOW);
            Serial.println("run");
        }
        else  if((Sensor3 == HIGH || Sensor2 == HIGH ) && Sensor4 == LOW && Sensor1 == LOW)
        {
            analogWrite(ENA, 180);
            analogWrite(ENB, 180);
            //FORWARD
            digitalWrite(IN1, HIGH);
            digitalWrite(IN2,LOW);
            digitalWrite(IN3, HIGH);
            digitalWrite(IN4, LOW);
            Serial.println("run");
        }
        else
        {
            analogWrite(ENA, 0);
            analogWrite(ENB, 0);
            digitalWrite(IN1, LOW);
            digitalWrite(IN2,LOW);
            digitalWrite(IN3, LOW);
            digitalWrite(IN4, LOW);
        }    
    }
     
  7. Danil0000

    Danil0000 Нуб

    Код (C++):
    /*************************************
    *     TIME:2022.6.25
    *     Development Team: Zhiyi Technology Co., Ltd.
    *
    *  **************************************/

    #include <Servo.h>  //servo library
    Servo myservo;      // create servo object to control servo

    int Echo = 13;//Pin to D13
    int Trig = 12;//Pin to D12


    #define ENA 5
    #define ENB 6
    #define IN1 3
    #define IN2 4
    #define IN3 2
    #define IN4 7


    #define carSpeed 130//Set the carSpeed to 130
    int Sensor1 = A2;//pin A2
    int Sensor2 = A5;//pin A5

    int SensorLeft;
    int SensorRight;
    int rightDistance = 0, leftDistance = 0, middleDistance = 0;

    void forward(){//forward function
      analogWrite(ENA, carSpeed);//Set the speed of ENA
      analogWrite(ENB, carSpeed);//Set the speed of ENB
        //The right forward
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      //The left forward
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);

      Serial.println("Forward");
    }

    void back() {//back function
      analogWrite(ENA, carSpeed);//Set the speed of ENA
      analogWrite(ENB, carSpeed);//Set the speed of ENB
      //The rihgt back
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      //The left back
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);
      Serial.println("Back");
    }

    void left() {//left function
      analogWrite(ENA, 200);//Set the speed of ENA
      analogWrite(ENB, 200);//Set the speed of ENB
       //The right forward
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, HIGH);
      //The left back
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);

      Serial.println("Left");
    }

    void right() {//right function
      analogWrite(ENA, 200);//Set the speed of ENA
      analogWrite(ENB, 200);//Set the speed of ENB
      //The rihgt back
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
       //The left forward
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);

      Serial.println("Right");
    }

    void stop() {//stop function
      digitalWrite(ENA, LOW);//Set the speed of ENA to low
      digitalWrite(ENB, LOW);//Set the speed of ENB to low
      Serial.println("Stop!");
    }

    float GetDistance()
    {
        float distance;
        // Send a low short pulse to Trig to trigger the ranging
        digitalWrite(Trig, LOW); //Send a low level to Trig
        delayMicroseconds(2);
        digitalWrite(Trig, HIGH);
        delayMicroseconds(10);
        digitalWrite(Trig, LOW);
        distance = pulseIn(Echo, HIGH) / 58.00;
        //Serial.print("Distance = ");
        //Serial.println(distance);//The serial output distance is converted into cm
          return distance;
    }

    void setup() {
      myservo.attach(A0,700,2400);  // attach servo on pin 3 to servo object
      Serial.begin(9600);
      pinMode(Echo, INPUT);
      pinMode(Trig, OUTPUT);
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
      pinMode(ENA, OUTPUT);
      pinMode(ENB, OUTPUT);
      stop();
      myservo.write(100);  //setservo position according to scaled value
      delay(100);
    }

    void loop()
    {
        SensorLeft  =  digitalRead(A2);//The sensor on the left
        SensorRight =  digitalRead(A5);//The sensor on the Right
       
        middleDistance = GetDistance();//getDistance();
       
        if(middleDistance <= 18 && middleDistance > 0)
        {
            stop();
            delay(500);
            myservo.write(10);
            delay(500);
            rightDistance = GetDistance();//getDistance();

            delay(500);
            myservo.write(100);
            delay(500);
            myservo.write(180);
            delay(500);
            leftDistance = GetDistance();//getDistance();

            delay(500);
            myservo.write(100);
            delay(500);
       
            if(rightDistance > leftDistance){
                stop();
                delay(300);
                right();
                delay(300);
            }
            else if(rightDistance < leftDistance) {
                stop();
                delay(300);
                left();
                delay(300);
            }
            else{
                forward();
            }
        }
        else{
            forward();
        }
        if(!SensorLeft){
          right();
          delay(300);
        }
        else if(!SensorRight){
          left();
          delay(300);
        }
        else{
            forward();
        }
    }
     
  8. Danil0000

    Danil0000 Нуб

    Код (C++):
    /*************************************
    *     TIME:2022.06.25
    *     Development Team: Zhiyi Technology Co., Ltd.
    *
    *  **************************************/


    #include <Servo.h>
    #define Trig 12 //Pin Tring connects to D12
    #define Echo 13 //Pin Echo connects to D13
    float cm; //Distance variable
    // float temp; //

    int ENA = 5;
    int IN1 = 3;
    int IN2 = 4;

    int ENB = 6;
    int IN3 = 2;
    int IN4 = 7;

    int Sensor1 = A2;//pin A2
    int Sensor2 = A5;//pin A5

    int SensorLeft;
    int SensorRight;

    Servo myservo;  // create servo object to control a servo
    // twelve servo objects can be created on most boards

    void setup()
    {
        myservo.attach(A0);  // attaches the servo on pin 9 to the servo object
        //Set the pin mode
        pinMode(ENA, OUTPUT);
        pinMode(IN1, OUTPUT);
        pinMode(IN2, OUTPUT);

        pinMode(ENB, OUTPUT);
        pinMode(IN3, OUTPUT);
        pinMode(IN4, OUTPUT);

        pinMode(Sensor1, INPUT);
        pinMode(Sensor2, INPUT);
        pinMode(Trig, OUTPUT);
        pinMode(Echo, INPUT);
        Serial.begin(9600);
        myservo.write(100);
    }

    void loop()
    {
        cm = GetDistance();

        SensorLeft  =  digitalRead(A2);//The sensor on the left
        SensorRight =  digitalRead(A5);//The sensor on the Right
       
        // If the right sensor detects the signal, the left sensor does not detect the signal,
        // the ultrasonic detection of the obstacle distance between 5cm to 10cm, turn to the right
        if (SensorLeft == HIGH && SensorRight == LOW && ( cm > 5 && cm < 10))
        {
            right();
        }
        else if(SensorLeft == LOW && SensorRight == HIGH&& ( cm >5 && cm <10))
        {
            left();
        }
        else  if(SensorLeft == HIGH && SensorRight == HIGH&&( cm >11 && cm <20))
        {
            forward();
        }
        else if(SensorLeft == HIGH && SensorRight == HIGH && ( cm >20 || cm <3))
        {
            stop();
        }
        else  if((SensorLeft == LOW && SensorRight == LOW)||( cm <5))
        {
            back();
        }

        if (SensorLeft == LOW)
        {
            myservo.write(160);
        }
        else if (SensorRight == LOW)
        {
            myservo.write(40);
        }
        else
        {
            myservo.write(100);
        }
       
    }

    /*
    Function: obtain ultrasonic sensor ranging data
    Parameters: Trig, Echo
    Parameter description: sensor connected to the motherboard pin port A4,A5
    Trig -------> pin D12
    Echo -------> pin D13
    */

    float GetDistance()
    {
        float distance;
        // Send a low short pulse to Trig to trigger the ranging
        digitalWrite(Trig, LOW); //Send a low level to Trig
        delayMicroseconds(2);
        digitalWrite(Trig, HIGH);
        delayMicroseconds(10);
        digitalWrite(Trig, LOW);
        distance = pulseIn(Echo, HIGH) / 58.00;
       
        Serial.print("Distance = ");
        Serial.println(distance);//The serial output distance is converted into cm

          return distance;
    }

    //turn left
    void left(){
      //Set the speed of the motor
        analogWrite(ENA, 60);
        analogWrite(ENB, 160);
        //The right forward
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        //The left STOP
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
        Serial.println("left");
      }
    //turn right
    void right(){
        //Set the speed of the motor
       analogWrite(ENA, 160);
       analogWrite(ENB, 60);
        //The right stop
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
      //The left forward
        digitalWrite(IN3,LOW);
        digitalWrite(IN4,LOW);
         Serial.println("right");
      }
    //turn forward
    void forward(){
        //FORWARD
        //Set the speed of the motor
         analogWrite(ENA, 130);
         analogWrite(ENB, 130);
         //The right forward
         digitalWrite(IN1, HIGH);
         digitalWrite(IN2,LOW);
         //The left forward
         digitalWrite(IN3, HIGH);
         digitalWrite(IN4, LOW);
         Serial.println("forward");
      }

    //stop
    void stop(){
        analogWrite(ENA, 0);
        analogWrite(ENB, 0);
      //set IN1,IN2,IN3,IN4 to LOW
        digitalWrite(IN1,LOW);
        digitalWrite(IN2,LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
         Serial.println("stop");
     
      }
      //back up
       void back(){
        //Set the speed of the motor  
         analogWrite(ENA, 110);
         analogWrite(ENB, 110);
         //The right back
         digitalWrite(IN1, LOW);
         digitalWrite(IN2,HIGH);
         //The left back
         digitalWrite(IN3,LOW);
         digitalWrite(IN4, HIGH);
         Serial.println("back");
      }
     
  9. Airbus

    Airbus Радиохулиган Модератор

    Спасибо! Посмотрел. Первый скетч хаотично гоняет Робота влево вправо вперед назад. Можно жостко запрограмировать маршрут движения. Второй скетч ведет по линии 4 сенсорами. Третий скетч определяет препятствие по УЗ датчику и обьезжает их. Четвертый видимо делает то же самое. Вы их загружали каждый в отдельности? Что хотите получить в итоге?
     
  10. Danil0000

    Danil0000 Нуб

    Машинка работает полноценно если загруженно 4 кода. По отдельности загружать нельзя. В файле объединенного кода нет. Может какой-то совет дадите?
     
  11. Airbus

    Airbus Радиохулиган Модератор

    Что значит полноценно? 4 кода загрузить нельзя—правильно. Каждый код в отдельности сам по себе полноценный и демонстрирует свои функции и может работать отдельно. Миксовать все 4 я не вижу смысла потому как код 1 обнуляет все три остальных. Код 4 наиболее функциональный и полноценный. Туда можено что то добавить. Что именно в нем не устраивает?
     
  12. Danil0000

    Danil0000 Нуб

    Спасибо, я вас понял.
     
  13. Danil0000

    Danil0000 Нуб

    получается если я загружу 4 код, моя машинка сможет ездить?
     
  14. Airbus

    Airbus Радиохулиган Модератор

    В 4 коде по сути уже все есть. Там самый простой 1. 2 это управление сенсорами 3 управление УЗ датчиками а 4 это управление сенсорами и УЗ датчиками. Там по факту все уже добавлено.
     
  15. Airbus

    Airbus Радиохулиган Модератор

    Ну да! А Вы я так понял еще не пробовали? Она будет ездить в любом случае. Только станет умнее с кодом 4 по сравнению с кодами 1-2-3. Поиграйтесь со всеми кодами сравните. Кстати что за машинка? Самому интересно стало