我正在尝试为一个学校项目制作一个自动洗手液分配器,其中包括 Arduino uno、水泵和红外传感器。基本上它工作得很好。我对编码一无所知,所以我使用了 Pictoblox。现在,我希望水泵启动后只运行 3 秒。尝试了chatgpt和各种代码,但每个解决方案都只是在IR打开泵后将泵的响应延迟了3秒。请帮忙。
这工作正常,但只要 IR 检测到某些东西,泵就会持续运行。
//This c++ code is generated by PictoBlox
void setup() { //put your setup code here, to run once:
pinMode(9, OUTPUT); pinMode(2, INPUT);
digitalWrite(9, false);
}
void loop() {
//put your main code here, to run repeatedly:
if(digitalRead(2)) {
delay(0.5 * 1000); while(undefined);
digitalWrite(9, true); }
else {
digitalWrite(9, false);
delay(.5 * 1000);
}
}
重新编写您的代码,我赞同评论部分中发布的@Computable 的建议。尝试将您的代码重构为:
void setup() {
pinMode(9, OUTPUT);
pinMode(2, INPUT);
digitalWrite(9, false);
}
void loop() {
if(digitalRead(2)) {
digitalWrite(9, true); // activate pump
delay(3000); // let the pump run for 3s
digitalWrite(9, false); // deactivate pump
while(digitalRead(2)) { // wait until hand is no longer close to IR sensor
delay(.5 * 1000);
}
}
else {
digitalWrite(9, false); // deactivate pump
delay(.5 * 1000); // This avoids looping too often (re-read IR sensor only every 0.5 seconds)
}
}
请分享结果!