善良的迷魂 善良的迷魂
我真的真的真的不是坏人,而是正义的伙伴!
关注数: 26 粉丝数: 40 发帖数: 1,697 关注贴吧数: 69
【求助】用Arduino使用串口发送数据,突然停止工作 使用arduino采集气体传感器的输出,再通过串口发送数据 大致这个流程 其中arduino还使用两个数字口控制两个继电器开关选择通入什么气体 还外接了一个12V气泵来抽气 如果气泵不打开,即arduino只控制继电器开断时,能正常发送数据 但是如果开启气泵,当状态发送改变(改变继电器的状态),arduino的串口就会停止工作,串口监视器什么值也没有了 下附代码 //////////////////////////////////////////////////////////// #include<SoftwareSerial.h> #include <FlexiTimer2.h> 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); }
1 下一页