该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
使用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);
}