#include <Wire.h> #include <Adafruit_VL6180X.h> #include <Stepper.h> #define STEPS 100 Stepper stepper(STEPS, 8, 10, 9, 11); Adafruit_VL6180X vl = Adafruit_VL6180X(); void setup() { Serial.begin(9600); if (!vl.begin()) { Serial.println("Failed to find sensor"); while (1); } vl.startRangeContinuous(); stepper.setSpeed(90); Serial.begin(9600); } void loop() { uint8_t range = vl.readRange(); Serial.print("Range: "); Serial.println(range); if (range < 50) { // 当距离小于50时步进电机正转 Serial.println("shun"); stepper.step(2048); //4步模式下旋转一周用2048 步。 delay(500); } else if (range > 50) { // 大于50时步进电机反转 Serial.println("ni"); stepper.step(-1024); //4步模式下旋转一周用2048 步。 delay(500); } }修改代码为步进电机旋转两圈后停止,直到距离变为大于或小于50时才会改变状态
时间: 2024-03-24 13:42:00 浏览: 61
好的,以下是修改后的代码:
```C++
#include <Wire.h>
#include <Adafruit_VL6180X.h>
#include <Stepper.h>
#define STEPS 100
Stepper stepper(STEPS, 8, 10, 9, 11);
Adafruit_VL6180X vl = Adafruit_VL6180X();
void setup() {
Serial.begin(9600);
if (!vl.begin()) {
Serial.println("Failed to find sensor");
while (1);
}
vl.startRangeContinuous();
stepper.setSpeed(90);
Serial.begin(9600);
}
void loop() {
uint8_t range = vl.readRange();
Serial.print("Range: ");
Serial.println(range);
static int stepsTaken = 0; // 记录步进电机已经旋转的步数
if (range < 50) {
// 当距离小于50时步进电机正转
Serial.println("shun");
stepper.step(2048); // 4步模式下旋转一周用2048步。
stepsTaken += 2048;
if (stepsTaken >= 2 * 2048) { // 旋转两圈后停止
stepper.step(-stepsTaken); // 反转回原来的位置
stepsTaken = 0; // 重置步数计数器
delay(1000); // 停止1秒
}
} else if (range > 50) {
// 大于50时步进电机反转
Serial.println("ni");
stepper.step(-1024); // 4步模式下旋转一周用2048步。
stepsTaken += 1024;
if (stepsTaken >= 2 * 1024) { // 旋转两圈后停止
stepper.step(-stepsTaken); // 反转回原来的位置
stepsTaken = 0; // 重置步数计数器
delay(1000); // 停止1秒
}
}
}
```
在这个修改后的代码中,我们添加了一个 `stepsTaken` 变量来记录步进电机已经旋转的步数。当距离小于50时,步进电机会正转并旋转两圈,然后停止1秒。当距离大于50时,步进电机会反转并旋转两圈,然后停止1秒。在旋转过程中,我们将 `stepsTaken` 变量更新为已经旋转的步数。当 `stepsTaken` 达到2圈时,步进电机会反转回原来的位置,并将 `stepsTaken` 重置为0,以便下一次旋转。
阅读全文