Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 只执行一次程序的一部分_Arduino - Fatal编程技术网

Arduino 只执行一次程序的一部分

Arduino 只执行一次程序的一部分,arduino,Arduino,我正在用Arduino设计一个发电机的自动转换。当EB电源关闭时,我需要打开发电机起动马达5秒钟,然后将其关闭,然后打开接触器C2。当发电机接通时,如果EB电源接通,我必须关闭接触器C2,打开发电机停止电机5秒钟,然后打开接触器C2。我的代码是 int ebin=2;//电子束输入 int gin=3;//发电机输入 int GonR1=4;//发电机接通(继电器1)起动马达 int GoffR2=5;//发电机关闭(继电器2)停止电机 int C1=6;//接触器1 int C2=7//接触器

我正在用Arduino设计一个发电机的自动转换。当EB电源关闭时,我需要打开发电机起动马达5秒钟,然后将其关闭,然后打开接触器C2。当发电机接通时,如果EB电源接通,我必须关闭接触器C2,打开发电机停止电机5秒钟,然后打开接触器C2。我的代码是

int ebin=2;//电子束输入
int gin=3;//发电机输入
int GonR1=4;//发电机接通(继电器1)起动马达
int GoffR2=5;//发电机关闭(继电器2)停止电机
int C1=6;//接触器1
int C2=7//接触器2
int e=0;
int g=0;
无效设置()
{
pinMode(ebin,输入);
pinMode(gin,输入);
pinMode(GonR1,输出);
pinMode(GoffR2,输出);
pinMode(C1,输出);
pinMode(C2,输出);
}
void循环()
{
e=数字读取(ebin);
g=数字读取(gin);
如果(e==低){
数字写入(GoffR2,低电平);
数字写入(C1,低电平);
延迟(4000);
数字写入(GonR1,高);
延迟(5000);
数字写入(GonR1,低);
数字写入(C2,高);
}
否则如果(e==高和&g==低){
数字写入(GoffR2,低电平);
数字写入(GonR1,低);
数字写入(C2,低电平);
数字写入(C1,高);
}
否则如果(g==高&&e==高){
数字写入(GonR1,低);
延迟(5000);
数字写入(C2,低电平);
数字写入(GoffR2,高);
延迟(4000);
数字写入(GoffR2,低电平);
数字写入(C1,高);
}
}
e==LOW
时,我想要这个部件

digitalWrite(GoffR2,低位);
数字写入(C1,低电平);
延迟(4000);
数字写入(GonR1,高);
延迟(5000);
数字写入(GonR1,低);
只执行一次,我想要这个部分

digitalWrite(C2,高电平);
持续执行,直到条件失效


但实际情况是,当条件(
e==LOW
)为真时,整个循环将连续执行。这将使发电机起动马达每4秒运行一次。因此,我需要帮助来解决此问题。

我还没有尝试理解您的所有代码,但这说明了您所问的问题:

调用LOW if语句时,您需要保持先前的
e
状态,如果它不是
LOW
,则需要运行一次性代码:

inte=0;
int e_previous=1;
无效设置(){
//将安装代码放在此处,以便运行一次:
序列号开始(115200);
}
void循环(){
//将主代码放在此处,以便重复运行:
对于(int i=0;i<10;i++){
如果(e==0){
如果(e_previous!=0){
串行打印(“e低一次关闭”);
e_previous=0;
}
连续打印(“e低连续”);
}
否则{
序列号。打印号(“e高连续”);
e_previous=1;
}
延迟(2000年);
//这模拟了不断变化的状态,理解代码并不重要。
如果(i==3)
e=1;
else如果(i==6)
e=0;
}
}
将为您提供:

e LOW once off
e LOW continual
e LOW continual
e LOW continual
e LOW continual
e HIGH continual
e HIGH continual
e HIGH continual
e LOW once off
e LOW continual
e LOW continual
e LOW continual
更正代码:
int ebin=2;//电子束输入
int gin=3;//发电机输入
int GonR1=4;//发电机接通(继电器1)起动马达
int GoffR2=5;//发电机关闭(继电器2)停止电机
int C1=6;//接触器1
int C2=7//接触器2
int e=0;
int e_previous=高//将初始值更改为任何有意义的值
int g=0;
无效设置(){
pinMode(ebin,输入);
pinMode(gin,输入);
pinMode(GonR1,输出);
pinMode(GoffR2,输出);
pinMode(C1,输出);
pinMode(C2,输出);
}
void循环(){
e=数字读取(ebin);
g=数字读取(gin);
如果(e==低)
{
如果(e_previous!=LOW){//此部件将运行一次
数字写入(GoffR2,低电平);
数字写入(C1,低电平);
延迟(4000);
数字写入(GonR1,高);
延迟(5000);
数字写入(GonR1,低);
e_previous=LOW;//这将停止再次运行此内部if
}
数字写入(C2,高);
}
否则如果(e==高和&g==低)
{
数字写入(GoffR2,低电平);
数字写入(GonR1,低);
数字写入(C2,低电平);
数字写入(C1,高);
e_previous=HIGH;//重置它
}
否则如果(g==高&&e==高)
{
数字写入(GonR1,低);
延迟(5000);
数字写入(C2,低电平);
数字写入(GoffR2,高);
延迟(4000);
数字写入(GoffR2,低电平);
数字写入(C1,高);
e_previous=HIGH;//重置它
}
否则{//以防万一
e_previous=HIGH;//重置它
}
}