functionality:
用户接近连接到Arduino Uno的超声波/红外线传感器,如果接近距离小于20厘米,超声波/红外线传感器的triggerPin将从低到高切换到'0's的->列表中。
当超声波/红外线传感器从'0‘切换到'1’时,状态发光二极管和状态MotorFan将从低切换到高。只要超声波传感器返回的数据为“1”,这两种状态都将保持不变。
当用户离开超声波/红外线传感器的近距离时,超声波/红外线传感器的triggerPin将从高到低的->列表‘1’将切换到'0's列表。
然而,在这一点上,状态发光二极管和状态MotorFan将保持在状态高10s,然后切换到州低点。在这种情况下,另一个用户接近接近传感器,超声波/红外线传感器切换回'1‘在延迟的10s,状态发光二极管和状态MotorFan应该保持在状态高不切换。
因此,正确的流程如下:
超声波/红外线传感器返回'0's ->,但当感知用户距离< 20)超声波/红外线传感器切换到'1's时,MotorFan状态和LED状态将从低超声波/红外线传感器切换到'1's,当感知到近邻时,MotorFan状态和LED状态将恢复'1's,但当感知用户超过(距离> 20)超声波/红外线传感器切换到'0's时,MotorFan状态和LED状态在切换到低端之前将保持在10 s的高位。条件:当另一个用户在10s延迟之前接近时,MotorFan状态和LED状态将保持在较高的状态。
我所做的:
我已为下列可供选择的电子引脚指定下列数字引脚:
超声波传感器的trigPin为数字针,超声波传感器的echoPin为数字针,电机风扇的FanPin为数字针,5 FanPin为继电器。
其次,我尝试使用millis()来获得时间,如果它超过10000的极限,它将digitalWrite从高到低。
码: const int trigPin = 8;const int echoPin = 9;//马达风扇连接到arduino引脚号const int FanPin = 5;字节中继= 4;
long duration;
int distance;
unsigned long Timer;
unsigned long Interval = 10000; //teh repeat Interval
void setup() {
Timer = millis();
pinMode(FanPin, OUTPUT); // Set pinMode for FanPin as OUTPUT, display
pinMode(trigPin, OUTPUT);
pinMode(relay, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600); // Open serial port to communicate with the Ultrasaonic Sensor
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance < 20) {
// Write a pin of HIGH
Serial.println("1");
//Set motor-fan to operate
digitalWrite(FanPin, HIGH);
digitalWrite(relay, HIGH);
} else {
Serial.println("0");
//Check if Timer is longer than 10s
if ((millis() - Timer) > Interval) {
digitalWrite(FanPin, LOW);
digitalWrite(relay, LOW);
}
}
delay(100);
}发行:
传感器能够切换从'0‘到'1’当感觉接近,其次,它也能够切换到从低到高的发光二极管状态和motorFan状态。
然而,当Arduino传感器从高到低切换时,LED状态和motorFan切换回低位,而无需等待10s的延迟。
我想在这方面寻求一些帮助,因为我在这个问题上完全被困住了。
谢谢
发布于 2016-09-20 07:12:24
在Timer函数中为setup()分配一个值,这意味着在系统启动时只执行一次。我会把Timer = millis();移到if (distance < 20) {条件下。然后,如果用户移动如果感知距离,你将有一个时间“最后接触”。
记住:如果你只想在启动时执行某件事情--把它放在setup()中。如果您希望重复执行某项操作--将其放入loop()中。
https://stackoverflow.com/questions/39585982
复制相似问题