arduino向串口发送数据时掉包_【求助】用Arduino使用串口发送数据,突然停止工作...

当Arduino通过串口发送气体传感器数据并控制继电器时,遇到一个问题:一旦开启12V气泵,状态改变导致串口停止工作。在气泵关闭的情况下,仅控制继电器时数据发送正常。代码中包含了对多个气体传感器的读取和串口发送功能。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

使用arduino采集气体传感器的输出,再通过串口发送数据

大致这个流程

其中arduino还使用两个数字口控制两个继电器开关选择通入什么气体

还外接了一个12V气泵来抽气

如果气泵不打开,即arduino只控制继电器开断时,能正常发送数据

但是如果开启气泵,当状态发送改变(改变继电器的状态),arduino的串口就会停止工作,串口监视器什么值也没有了

下附代码

#include

#include const int mq2Pin=A0;

const int mq135Pin=A1;

const int mq3Pin=A2;

const int mq8Pin=A3;

const int tgs882Pin=A4;

const int mq136Pin=A5;

const int mqxPin=A6;

const int tempPin=A7;int mq2Value, mq135Value, mq3Value, mq8Value, tgs882Value;

int mqxPinValue, mq136Value, tempValue;int state;

int time1=0;String toSend;void flash() //中断处理函数,改变灯的状态

{

digitalWrite(13,1);

if(state!=1){

time1=time1+1;

}

else{

time1=0;

}

}void setup()

{

pinMode(mq2Pin, INPUT);

pinMode(mq135Pin, INPUT);

pinMode(mq3Pin, INPUT);

pinMode(mq8Pin, INPUT);

pinMode(tgs882Pin, INPUT);

pinMode(mq136Pin, INPUT);

pinMode(mqxPin, INPUT);

pinMode(tempPin, INPUT);

pinMode(11, OUTPUT);

pinMode(10,OUTPUT);

pinMode(13,OUTPUT);

digitalWrite(11, 1);

digitalWrite(10, 0);

state=1;

time1=0;

FlexiTimer2::set(1000, flash);

FlexiTimer2::start(); Serial.begin(38400);

}

void loop()

{

switch (state)

{

case 1: //待机状态

digitalWrite(11, 1);

digitalWrite(10, 0);

if(Serial.read()=='1'){

state=2;

}

if(Serial.read()=='x'){

time1=0;

state=1;

}

break;

case 2: //等待吸气状态

if(time1>=20){

state=3;

}

if(Serial.read()=='x'){

time1=0;

state=1;

}

readSensors();

sendSensorsValues();

break;

case 3: //吸收待测气体状态

digitalWrite(11, 0);

digitalWrite(10, 1);

if(time1>=70){

state=4;

}

if(Serial.read()=='x'){

time1=0;

state=1;

}

readSensors();

sendSensorsValues();

break;

case 4: //排气状态

digitalWrite(11, 1);

digitalWrite(10, 0);

if(Serial.read()=='x'){

time1=0;

state=1;

}

readSensors();

sendSensorsValues();

break;

}

delay(100);

}void readSensors()

{

mq2Value=analogRead(mq2Pin);

mq135Value=analogRead(mq135Pin);

mq3Value=analogRead(mq3Pin);

mq8Value=analogRead(mq8Pin);

tgs882Value=analogRead(tgs882Pin);

mq136Value=analogRead(mq136Pin);

mqxPinValue=analogRead(mqxPin);

tempValue=analogRead(tempPin);

}

void sendSensorsValues()

{

toSend="";

toSend+=String(mq2Value);

toSend+=",";

toSend+=String(mq135Value);

toSend+=",";

toSend+=String(mq3Value);

toSend+=",";

toSend+=String(mq8Value);

toSend+=",";

toSend+=String(tgs882Value);

toSend+=",";

toSend+=String(mq136Value);

// toSend+=",";

// toSend+=String(mqxPinValue);

// toSend+=",";

// toSend+=String(tempValue);

Serial.println(toSend);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值