我现在在做有关arduino的超声波自动感应门实验,遇到了问题
具体情况是这样的:我能实现超声波的双面测距,当测出的两面的距离只要有一侧小于100(即1米)时候,电机反转开门,当测出的距离都大于100时候 正传关门 电机反转两圈刚好开门到极限位置,停止十秒 正转两圈刚好把门关好 但是还有种突发情况 当关门的时候有人来了即测出的距离小于100时 电机要立即停止正转 反转开门到极限位置 我现在无法保证电机能刚好到极限位置 请问 编程如何实现 谢谢 下面是我的程序
int inputPin1=4;
int inputPin2=2;
int outputPin1=5;
int outputPin2=3;
int motorPin1 = 8; // Blue - 28BYJ48 pin 1
int motorPin2 = 9; // Pink - 28BYJ48 pin 2
int motorPin3 = 10; // Yellow - 28BYJ48 pin 3
int motorPin4 = 11; // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
int motorSpeed = 2400; //variable to set stepper speed
int count = 0; // count of steps made
int countsperrev = 512; // number of steps per full revolution
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
void setOutput(int out)
{
digitalWrite(motorPin1, bitRead(lookup[out], 0));
digitalWrite(motorPin2, bitRead(lookup[out], 1));
digitalWrite(motorPin3, bitRead(lookup[out], 2));
digitalWrite(motorPin4, bitRead(lookup[out], 3));
}
void wise()
{
for(int s=0;s<1024;s++)
{
for(int i =0; i<8; i++)
{
setOutput(i);
delayMicroseconds(motorSpeed);
}
}
delay(10000);
for(int j=0;j<1024;j++)
for(int i =7; i >=0; i--)
{
setOutput(i);
delayMicroseconds(motorSpeed);
}
}
void setup()
{
Serial.begin(9600);
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
pinMode(outputPin1, OUTPUT);
pinMode(outputPin2, OUTPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
digitalWrite(outputPin1,LOW);
delayMicroseconds(2);
digitalWrite(outputPin1,HIGH);
delayMicroseconds(10);
digitalWrite(outputPin1,LOW);
int distance1 =pulseIn(inputPin1,HIGH);
distance1=distance1/58;
Serial.print("distance1=");
Serial.println(distance1);
digitalWrite(outputPin2,LOW);
delayMicroseconds(2);
digitalWrite(outputPin2,HIGH);
delayMicroseconds(10);
digitalWrite(outputPin2,LOW);
int distance2 =pulseIn(inputPin2,HIGH);
distance2=distance2/58;
Serial.print("distance2=");
Serial.println(distance2);
if((distance1<70) || (distance2<70))
wise();
//else
//break();
} |