hadif azli
/
TEST123
BLYNK TEST
sensor.h@0:d8f4c441e032, 2016-06-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |