JINXIN WEI
/
mh-z14_CO2sensor
sef
Fork of kc_mh-z19_CO2sensor by
main.cpp
- Committer:
- jw17594
- Date:
- 2018-09-14
- Revision:
- 2:efdada46c319
- Parent:
- 1:c7a36fa2c772
File content as of revision 2:efdada46c319:
/* Read from MH-Z14A CO2 Sensor by serial and show data to PC throw the softserial for LPC1768 MH-Z14A Datasheet https://www.compel.ru/item-pdf/2ef21253651a5e4838151c427769e7b6/pn/winsen~mh-z14a-ndir-co2-sensor.pdf */ #include "mbed.h" #include "SoftSerial.h" // by Erick Olieman https://os.mbed.com/users/Sissors/code/SoftSerial/ SoftSerial pc(p13,p14); //Tx,Rx to USB serial Serial co2sensor(USBTX, USBRX); //Tx,Rx to mh-z14 CO2 sensor int main() { pc.baud(9600); co2sensor.baud(9600); char command[] = { 0xff , 0x01 , 0x86 , 0 , 0 , 0 , 0 , 0 , 0x79 }; //command of Read CO2 concentration char responds[9]; while( co2sensor.readable() ) // throw received data away responds[0] = co2sensor.getc(); while( pc.readable() ) // throw received data away responds[0] = pc.getc(); long time=0; while(1) { //send command for( int i=0 ; i<9 ; i++ ) { while( co2sensor.writeable() == 0 ); //wait for writable a data co2sensor.putc( command[i] ); } //receve responds unsigned char csm=0; //clear check sum for( int i=0 ; i<9 ; i++ ) //clear responds variable responds[i] = 0; pc.printf("responds:"); int i=0; for( int timeout = 0 ; timeout < 10000 ; timeout++ ) { if( co2sensor.readable() ) { responds[i] = co2sensor.getc( ); pc.printf("%x ",responds[i]); if( responds[0] == 0xff ) { // wether the first data is 0xff // sdd check sum csm += responds[i]; timeout = 0; i++; if( i>8 ) break; // received all data } } } //check the check sum and show to PC csm -= responds[8]; csm = ( 0xff - csm ); if( responds[8] == csm ) { // compare with check sum pc.printf("csm:%x CO2:%dppm temp:%dC stat:%d," , csm , responds[2]*256 + responds[3] , responds[4]-40 , responds[5]); pc.printf("%d,%d,%d,%d\r" , time , responds[2]*256 + responds[3] , responds[4]-40 , responds[5]); } wait(1); time++; } }