Demo

Dependencies:   mbed

Revision:
2:0ee90da44162
Parent:
1:0c1053275589
diff -r 0c1053275589 -r 0ee90da44162 PeripheralLayer/PeMod_MHZ19.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PeripheralLayer/PeMod_MHZ19.cpp	Thu May 19 15:52:24 2016 +0000
@@ -0,0 +1,84 @@
+#include "SysConfig.h"
+
+#define MHZ19_CMD_LEN   9
+#define MHZ19_DAT_LEN   9
+
+#define uart_mhz19 uart_sen
+//#define uart_db uart_pc
+
+const uint8_t MHZ19_CmdMCalZero[MHZ19_CMD_LEN] = {0xFF, 0x01, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78};
+const uint8_t MHZ19_CmdMCalFull[MHZ19_CMD_LEN] = {0xFF, 0x01, 0x88, 0x07, 0xD0, 0x00, 0x00, 0x00, 0xA0};
+const uint8_t MHZ19_CmdReadCO2[MHZ19_CMD_LEN] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
+
+int MHZ19_Init(void)
+{
+    return 0;   
+}
+
+int MHZ19_ReadCO2(void)
+{
+    int co2Vol, i, sum = 0; 
+    uint8_t data[MHZ19_DAT_LEN];
+           
+    for(i=0; i<MHZ19_CMD_LEN; i++)
+        uart_mhz19.putc(MHZ19_CmdReadCO2[i]);
+        
+    #if defined uart_db
+    uart_db.printf("\n\rMHZ19 return ");
+    #endif
+        
+    for(i=0; i<MHZ19_DAT_LEN; i++)
+    {
+        while(!uart_mhz19.readable());
+        data[i] = uart_mhz19.getc();
+        #if defined uart_db
+        uart_db.printf("0x%02X ", data[i]);
+        #endif
+    }    
+    
+    #if defined uart_db
+    uart_db.printf(".\n\r");
+    #endif
+    
+    sum = MHZ19_CalCheckSum(data);
+    if(data[MHZ19_DAT_LEN - 1] == sum)
+    {
+        co2Vol = data[2] *256 + data[3];
+        return co2Vol;
+    }
+    else
+    {
+        #if defined uart_db
+        uart_db.printf("Incorrect checksum 0x%02X, expect 0x%02X.\n\r", sum, data[MHZ19_DAT_LEN - 1]);
+        #endif
+        return -1;
+    }
+}
+
+int MHZ19_CalZero(void)
+{ 
+    for(int i=0; i<MHZ19_CMD_LEN; i++)
+        uart_mhz19.putc(MHZ19_CmdMCalZero[i]);
+        
+    return 0;        
+}
+
+int MHZ19_CalFull(void)
+{
+    for(int i=0; i<MHZ19_CMD_LEN; i++)
+        uart_mhz19.putc(MHZ19_CmdMCalFull[i]);
+        
+    return 0;        
+}
+
+uint8_t MHZ19_CalCheckSum(uint8_t *packet)
+{
+    uint8_t i, checksum = 0;
+    for( i = 1; i < 8; i++)
+    {
+        checksum += packet[i];
+    }
+    checksum = 0xff - checksum;
+    checksum += 1;
+    return checksum;
+}