На алиэкспресс нашел интересного робота. Купил, собрал, мне дали ссылку на код. Разобрался что за что отвечает, но когда запуская один код(1_Auto_move), после этого запуская 2 код(2_follow) мне пишет, что два кода запускать нельзя. Я перерыл данную мне папку и общего кода не нашел. Подскажите пожалуйста как мне поступить. Может можно их как-то объединить в один? Я новичок в ардуино.
Понятно. Дальше. Что делает каждый код в отдельности и что хотите получить в итоговом скетче? И выложите коды чтобы их можно было посмотреть иначе никак Вам не сможем помочь. Ибо не видно ничего Это несложно—типа так
Код (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); }
Код (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); } }
Код (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(); } }
Код (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"); }
Спасибо! Посмотрел. Первый скетч хаотично гоняет Робота влево вправо вперед назад. Можно жостко запрограмировать маршрут движения. Второй скетч ведет по линии 4 сенсорами. Третий скетч определяет препятствие по УЗ датчику и обьезжает их. Четвертый видимо делает то же самое. Вы их загружали каждый в отдельности? Что хотите получить в итоге?
Машинка работает полноценно если загруженно 4 кода. По отдельности загружать нельзя. В файле объединенного кода нет. Может какой-то совет дадите?
Что значит полноценно? 4 кода загрузить нельзя—правильно. Каждый код в отдельности сам по себе полноценный и демонстрирует свои функции и может работать отдельно. Миксовать все 4 я не вижу смысла потому как код 1 обнуляет все три остальных. Код 4 наиболее функциональный и полноценный. Туда можено что то добавить. Что именно в нем не устраивает?
В 4 коде по сути уже все есть. Там самый простой 1. 2 это управление сенсорами 3 управление УЗ датчиками а 4 это управление сенсорами и УЗ датчиками. Там по факту все уже добавлено.
Ну да! А Вы я так понял еще не пробовали? Она будет ездить в любом случае. Только станет умнее с кодом 4 по сравнению с кодами 1-2-3. Поиграйтесь со всеми кодами сравните. Кстати что за машинка? Самому интересно стало