Error handling ';digitalWrite';不能用作函数-新问题
首先,请接受我的道歉,我对arduino和一般的编码是完全陌生的。虽然我有技术背景,但这对我来说是一个新领域 我正在尝试创建一个Arduino控制的水箱系统,以总结我试图实现的目标Error handling ';digitalWrite';不能用作函数-新问题,error-handling,arduino,Error Handling,Arduino,首先,请接受我的道歉,我对arduino和一般的编码是完全陌生的。虽然我有技术背景,但这对我来说是一个新领域 我正在尝试创建一个Arduino控制的水箱系统,以总结我试图实现的目标 系列浮子开关,当处于特定位置时,将激活我的反渗透系统并填充水箱 4个按钮,一个用于将油箱加注至A级,第二个用于加注至B级,第三个用于取消操作,另一个用于启动泵以排空油箱。此外,当浮子触发时,加热器和循环泵将启动。(当水滴落下时,系统将停用) 一系列的LED灯还可以提供过程状态的视觉指示。RO系统在运行前后也需
- 系列浮子开关,当处于特定位置时,将激活我的反渗透系统并填充水箱
- 4个按钮,一个用于将油箱加注至A级,第二个用于加注至B级,第三个用于取消操作,另一个用于启动泵以排空油箱。此外,当浮子触发时,加热器和循环泵将启动。(当水滴落下时,系统将停用)
if (!digitalRead(empty)) { // "!" is used to negate, you can look at it like "not"
digitalWrite(heater, LOW);
digitalWrite(sysrunning, LOW);
digitalWrite(standby, HIGH);
}
delay(300);
}
我想你需要检查一下if语句是如何工作的 这些链接将帮助您: 基本语法是:
if (condition) {
// block of code to be executed if the condition is true
}
在您的具体案例中,我认为它可能是这样的:
...
digitalWrite(flushroled,LOW);
int isWatsenwat = digitalRead(watsenwat);
if(isWatsenwat==HIGH){
digitalWrite(flushroled,HIGH);
...
...
digitalWrite(heater,HIGH);
int isEmpty = digitalRead(empty);
if(isEmpty==LOW){
digitalWrite(heater,LOW);
digitalWrite(sysrunning,LOW);
digitalWrite(standby,HIGH);
}
delay(300);
}
虽然这可能编译得很好,但您可以将其编写得更紧凑:
...
digitalWrite(flushroled,LOW);
int isWatsenwat = digitalRead(watsenwat); //isWatsenwat is 0 or 1
if(isWatsenwat){ // if it is 1...
digitalWrite(flushroled,HIGH);
...
...
digitalWrite(heater,HIGH);
int isEmpty = digitalRead(empty);
if(!isEmpty){ // "!" is used to negate, you can look at it like a "not"
digitalWrite(heater,LOW);
digitalWrite(sysrunning,LOW);
digitalWrite(standby,HIGH);
}
delay(300);
}
澄清:
如果你将val
与HIGH
相比较,比如(val==HIGH)
你基本上将1
或0
与1
相比较,结果是1
或0
,所以你可以直接使用你原来的1
或0
像(val)
您可以编写得更简洁:您不需要将此值赋给变量。您可以做的只是:
...
digitalWrite(flushroled,LOW);
if(digitalRead(watsenwat)){
digitalWrite(flushroled,HIGH);
...
...
digitalWrite(heater,HIGH);
if(!digitalRead(empty)){ // "!" is used to negate, you can look at it like "not"
digitalWrite(heater,LOW);
digitalWrite(sysrunning,LOW);
digitalWrite(standby,HIGH);
}
delay(300);
}
如果你想知道更多关于什么是true
和false
的信息,请查看以下帖子:
还有一点:如果你将代码复制到文章中而不是链接图像,我想这是非常感谢的。如果val=digitalRead(空);?那是什么(如果我做得对的话)按下按钮,将启动排放泵并清空水箱,基本上为继电器供电。一旦启动泵,将关闭水箱中加热器和冷凝泵的继电器,以保护它们:)如果val=数字读取(清空);(val==低);可能会把编译器搞糊涂,就像我一样。如果“empty”是pin码,请尝试:val=digitalRead(empty);如果(val==LOW){code goes here}@ocrdu谢谢,您建议我将其更改为/替换为please吗?“try:”后面的位。你的“如果”语法是关闭的;首先用digitalRead读取val,然后执行“如果(val==LOW){digitalWrite等}”,如果高出几行,同样适用于watsenwat。感谢您提供的详细答案,我将尽快尝试,并让您知道结果!我似乎无法像你那样把代码粘贴进去,我会继续阅读,下次再把它弄对。再次感谢您的详细回复:)感谢@Ingumeta的修改,我现在已经将这些修改加入到代码中,链接真的帮助了我的理解。遗憾的是,代码仍然返回错误digitalWrite不能用作函数,红色框突出显示最后一行digitalWrite:
code
如果(!digitalRead(empty)){/“!”用于求反,您可以将其视为“not”digitalWrite(加热器,低);digitalWrite(系统运行,低);digitalWrite(待机,高);}delay(300);我刚刚看到代码中缺少一些分号:delay(x);
但我认为还需要更多……也许你可以发布所有代码。嗨@Ingumeta,很抱歉我的无能,发布整个文库的最佳方式是什么,因为它太大,无法发表评论,我的问题已经结束。我可以将文库上传到某个地方吗?再次非常感谢你查看这个:)我的意思是只发布你的ROSystem.ino。当然,如果你把它上传到某个地方,我会看一看。