work.

Dependencies:   Blynk mbed

Committer:
lixianyu
Date:
Fri Jun 10 15:20:20 2016 +0000
Revision:
0:d8f4c441e032
Child:
1:0e75de2a5d21
u8glib???????????i2c???

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 0:d8f4c441e032 1 //#include <SoftwareSerial.h>
lixianyu 0:d8f4c441e032 2 //#include <AM2321.h>
lixianyu 0:d8f4c441e032 3 #include "MicroduinoPinNames.h"
lixianyu 0:d8f4c441e032 4
lixianyu 0:d8f4c441e032 5 #define INTERVAL_pm25 200
lixianyu 0:d8f4c441e032 6 unsigned long pm25_time = 0;
lixianyu 0:d8f4c441e032 7
lixianyu 0:d8f4c441e032 8 //SoftwareSerial pmSerial(4,5); //PM2.5传感器通讯软串口
lixianyu 0:d8f4c441e032 9 Serial pmSerial(D4, D5); //rx,tx
lixianyu 0:d8f4c441e032 10 AnalogIn gLight(A0);
lixianyu 0:d8f4c441e032 11 AnalogIn gCH4(A2);
lixianyu 0:d8f4c441e032 12 //AM2321 am2321;
lixianyu 0:d8f4c441e032 13
lixianyu 0:d8f4c441e032 14 float sensor_tem,sensor_hum,sensor_light,
lixianyu 0:d8f4c441e032 15 Sensor_etoh;
lixianyu 0:d8f4c441e032 16
lixianyu 0:d8f4c441e032 17 float sensorPM25;
lixianyu 0:d8f4c441e032 18
lixianyu 0:d8f4c441e032 19 long map(long x, long in_min, long in_max, long out_min, long out_max)
lixianyu 0:d8f4c441e032 20 {
lixianyu 0:d8f4c441e032 21 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
lixianyu 0:d8f4c441e032 22 }
lixianyu 0:d8f4c441e032 23
lixianyu 0:d8f4c441e032 24 // 读取PM2.5传感器
lixianyu 0:d8f4c441e032 25 float PM25()
lixianyu 0:d8f4c441e032 26 {
lixianyu 0:d8f4c441e032 27 int data_s = 0; //串口接收数据
lixianyu 0:d8f4c441e032 28 int num = -1; //串口接收数据计数
lixianyu 0:d8f4c441e032 29 int sum = 0; //校验和
lixianyu 0:d8f4c441e032 30 int cal[6]; //接收数据缓存
lixianyu 0:d8f4c441e032 31 float dustDensity = 0; //PM2.5浓度
lixianyu 0:d8f4c441e032 32
lixianyu 0:d8f4c441e032 33 //pmSerial.begin(2400); //首先启动软串口
lixianyu 0:d8f4c441e032 34 pmSerial.baud(2400);
lixianyu 0:d8f4c441e032 35 //pmSerial.flush(); //清空串口缓存
lixianyu 0:d8f4c441e032 36
lixianyu 0:d8f4c441e032 37 while(1) {
lixianyu 0:d8f4c441e032 38 //if(pmSerial.available() > 0) { //串口缓存有数据
lixianyu 0:d8f4c441e032 39 if (pmSerial.readable() > 0) {
lixianyu 0:d8f4c441e032 40 //data_s = pmSerial.read(); //读取串口缓存数据
lixianyu 0:d8f4c441e032 41 data_s = pmSerial.getc();
lixianyu 0:d8f4c441e032 42 if(data_s == 0xAA) { //得到数据帧起始位
lixianyu 0:d8f4c441e032 43 num = 0; //开始计数
lixianyu 0:d8f4c441e032 44 } else if(num >= 0) {
lixianyu 0:d8f4c441e032 45 num++; //读到数据,计数+1
lixianyu 0:d8f4c441e032 46 cal[num-1] = data_s; //数据保存到缓存中
lixianyu 0:d8f4c441e032 47 if(num == 6) { //读到数据帧最后一位
lixianyu 0:d8f4c441e032 48 sum = cal[0] + cal[1] + cal[2] + cal[3]; //计算校验和
lixianyu 0:d8f4c441e032 49 if(sum == cal[4] && cal[5] == 0xFF) { //校验和匹配,数据帧最后一位为0xFF,说明接收的数据帧正常
lixianyu 0:d8f4c441e032 50 dustDensity = (cal[0]*256 + cal[1])*(5.0/1024)*550; //计算PM2.5浓度,单位ug/m3
lixianyu 0:d8f4c441e032 51 } else { //接收的数据不正常
lixianyu 0:d8f4c441e032 52 dustDensity = 0; //浓度清零
lixianyu 0:d8f4c441e032 53 }
lixianyu 0:d8f4c441e032 54 break;
lixianyu 0:d8f4c441e032 55 }
lixianyu 0:d8f4c441e032 56 }
lixianyu 0:d8f4c441e032 57 }
lixianyu 0:d8f4c441e032 58 }
lixianyu 0:d8f4c441e032 59 //pmSerial.end(); //关闭软串口
lixianyu 0:d8f4c441e032 60 return dustDensity; //返回值
lixianyu 0:d8f4c441e032 61 }
lixianyu 0:d8f4c441e032 62
lixianyu 0:d8f4c441e032 63 // 读取光照传感器
lixianyu 0:d8f4c441e032 64 void updateLight()
lixianyu 0:d8f4c441e032 65 {
lixianyu 0:d8f4c441e032 66 //sensor_light = map(analogRead(A0), 0, 1023, 0, 255);
lixianyu 0:d8f4c441e032 67 sensor_light = map(gLight.read_u16(), 0, 65535, 0, 255);
lixianyu 0:d8f4c441e032 68 }
lixianyu 0:d8f4c441e032 69
lixianyu 0:d8f4c441e032 70 // 读取甲醛传感器
lixianyu 0:d8f4c441e032 71 void updateCH4()
lixianyu 0:d8f4c441e032 72 {
lixianyu 0:d8f4c441e032 73 //Sensor_etoh = map(analogRead(A2), 0, 1023, 0, 30);
lixianyu 0:d8f4c441e032 74 Sensor_etoh = map(gCH4.read_u16(), 0, 65535, 0, 30);
lixianyu 0:d8f4c441e032 75 }
lixianyu 0:d8f4c441e032 76
lixianyu 0:d8f4c441e032 77 // 读取温湿度传感器
lixianyu 0:d8f4c441e032 78 void updateTempHumi()
lixianyu 0:d8f4c441e032 79 {
lixianyu 0:d8f4c441e032 80 #if 0
lixianyu 0:d8f4c441e032 81 am2321.read();
lixianyu 0:d8f4c441e032 82 sensor_tem = am2321.temperature / 10.0;
lixianyu 0:d8f4c441e032 83 sensor_hum = am2321.humidity / 10.0;
lixianyu 0:d8f4c441e032 84 #endif
lixianyu 0:d8f4c441e032 85 }