我正在开发一个简单的机器人(有 4 个轮式底座),它向前移动并通过距离传感器检测物体,用手臂捡起它。对象是一个带有某种向上方向手柄的盒子,因此手臂放在所谓的对象手柄下方并将其向上抬起。我想要实现的任务是机器人应该向前移动并将对象放在放置在某个指定位置的容器(它也是物理对象)中。
机器人通过其底座轮子中的 4 个直流电机移动,手臂由单独的直流电机控制。
我想要的是:
机器人应该向前移动,直到它检测到物体。
当检测到物体时,它应该停止轮子并启动手臂将物体向上抬起。
然后它应该向前移动,直到它检测到第二个对象,即容器。
当检测到第二个物体(容器)时,应停止轮子并激活手臂以将物体放入容器中。
为此,我编写了以下代码
#define mp1 3
#define mp2 4
#define m2p1 5
#define m2p2 6
#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED
#define armPin1 9 // Pin 1 of arm
#define armPin2 10 // Pin 2 of arm
int maximumRange = 200; // Maximum range needed
int minimumRange = 18; // Minimum range needed
long duration, distance; // Duration used to calculate distance
int first = 0;
void setup()
{
Serial.begin(9600);
//Setting the pins of motors
pinMode(mp1, OUTPUT);
pinMode(mp2, OUTPUT);
pinMode(m2p1, OUTPUT);
pinMode(m2p2, OUTPUT);
//Setting the pins of distance sensor
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
pinMode(armPin1, OUTPUT);
pinMode(armPin2, OUTPUT);
}// end setup method
long calculateDistance(){
//Code of distance sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(20);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
//Calculate the distance (in cm) based on the speed of sound.
return duration/58.2;
}
void loop()
{
distance = calculateDistance();
while(distance > minimumRange) {
forward();
distance = calculateDistance();
}
while(distance <= minimumRange && first == 0){
stopMotors();
pickObject();
distance = calculateDistance();
}
while(distance > minimumRange) {
forward();
distance = calculateDistance();
}
while(distance <= minimumRange && first == 1){
stopMotors();
putObject();
distance = calculateDistance();
}// end second while copied
first = 1;
}// end loop function
void pickObject(){
digitalWrite(armPin1, LOW);
digitalWrite(armPin2, HIGH);
}
void putObject(){
digitalWrite(armPin1, HIGH);
digitalWrite(armPin2, LOW);
}
void stopMotors(){
digitalWrite(mp1, LOW);
digitalWrite(mp2, LOW);
digitalWrite(m2p1, LOW);
digitalWrite(m2p2, LOW);
}
void forward(){
digitalWrite(mp1, LOW);
digitalWrite(mp2, HIGH);
digitalWrite(m2p1, HIGH);
digitalWrite(m2p2, LOW);
}
但是代码不能像我想要的那样工作。它实际上是向下移动手臂。可能是因为我没有理解loop()
函数的流程。
谁能说出我的代码中有什么问题以及我的代码应该是什么才能获得所需的结果?