Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Adafruit_SGP30_mbed mbed CCS811 mbed-rtos ALPHASENSE Adafruit_ADS1015_ BME680
HPMA115S0.cpp
00001 #include "HPMA115S0.h" 00002 00003 HPMA115S0::HPMA115S0(Serial* serial) 00004 { 00005 this->serial = serial; 00006 serial->baud(9600); 00007 pm10_count = 0; 00008 pm2_5_count = 0; 00009 } 00010 00011 float HPMA115S0::getPM10() 00012 { 00013 return pm10_count; 00014 } 00015 00016 float HPMA115S0::getPM2_5() 00017 { 00018 return pm2_5_count; 00019 } 00020 00021 void HPMA115S0::read() 00022 { 00023 uint8_t msg[4]={0x68,0x01,0x04,0x93}; 00024 uint8_t ack[8]={0,0,0,0,0,0,0,0}; 00025 printf("%d %d %d %d %d %d\r\n",ack[0],ack[1],ack[2],ack[3],ack[4],ack[5]); 00026 serial->write(msg, sizeof(msg), NULL); 00027 while(serial->readable()==0){} 00028 if(serial->readable()==1){ 00029 //serial->read(ack, sizeof(ack), NULL); 00030 for(int i=0;i<8;i++){ 00031 ack[i]=serial->getc(); 00032 } 00033 } 00034 printf("%d %d %d %d %d %d %d %d\r\n",ack[0],ack[1],ack[2],ack[3],ack[4],ack[5],ack[6],ack[7]); 00035 pm10_count = ((ack[6] << 8) + ack[7]); 00036 pm2_5_count = ((ack[4] << 8) + ack[5]); 00037 } 00038 00039 void HPMA115S0::start() 00040 { 00041 uint8_t msg[4]={0x68,0x01,0x01,0x96}; 00042 uint8_t ack[2]={0,0}; 00043 printf("%d %d \r\n",ack[0],ack[1]); 00044 serial->write(msg, sizeof(msg), NULL); 00045 while(serial->readable()==0){} 00046 if(serial->readable()==1){ 00047 //serial->read(ack, sizeof(ack), NULL); 00048 ack[0]=serial->getc(); 00049 ack[1]=serial->getc(); 00050 } 00051 printf("%d %d \r\n",ack[0],ack[1]); 00052 } 00053 00054 00055 void HPMA115S0::stop() 00056 { 00057 uint8_t msg[4]={0x68,0x01,0x02,0x95}; 00058 uint8_t ack[2]={0,0}; 00059 printf("%d %d \r\n",ack[0],ack[1]); 00060 serial->write(msg, sizeof(msg), NULL); 00061 while(serial->readable()==0){} 00062 if(serial->readable()==1){ 00063 //serial->read(ack, sizeof(ack), NULL); 00064 ack[0]=serial->getc(); 00065 ack[1]=serial->getc(); 00066 } 00067 printf("%d %d \r\n",ack[0],ack[1]); 00068 } 00069 00070 00071 void HPMA115S0::set_customer_coef() 00072 { 00073 uint8_t msg[5]={0x68,0x01,0x08,0x64, 0x2A}; 00074 uint8_t ack[2]={0,0}; 00075 printf("%d %d \r\n",ack[0],ack[1]); 00076 serial->write(msg, sizeof(msg), NULL); 00077 while(serial->readable()==0){} 00078 if(serial->readable()==1){ 00079 //serial->read(ack, sizeof(ack), NULL); 00080 ack[0]=serial->getc(); 00081 ack[1]=serial->getc(); 00082 } 00083 printf("%d %d \r\n",ack[0],ack[1]); 00084 } 00085 00086 00087 void HPMA115S0::read_customer_coef() 00088 { 00089 uint8_t msg[4]={0x68,0x01,0x10,0x87}; 00090 uint8_t ack[2]={0,0}; 00091 printf("%d %d \r\n",ack[0],ack[1]); 00092 serial->write(msg, sizeof(msg), NULL); 00093 while(serial->readable()==0){} 00094 if(serial->readable()==1){ 00095 //serial->read(ack, sizeof(ack), NULL); 00096 ack[0]=serial->getc(); 00097 ack[1]=serial->getc(); 00098 } 00099 printf("%d %d \r\n",ack[0],ack[1]); 00100 } 00101 00102 00103 void HPMA115S0::stop_autosend() 00104 { 00105 uint8_t msg[4]={0x68,0x01,0x20,0x77}; 00106 char ack[2]={0,0}; 00107 printf("%d %d \r\n",ack[0],ack[1]); 00108 serial->write(msg, sizeof(msg), NULL); 00109 while(serial->readable()==0){} 00110 if(serial->readable()==1){ 00111 //serial->read(ack, sizeof(ack), NULL); 00112 ack[0]=serial->getc(); 00113 ack[1]=serial->getc(); 00114 } 00115 printf("%d %d\r\n",ack[0],ack[1]); 00116 } 00117 00118 void HPMA115S0::enable_autosend() 00119 { 00120 uint8_t msg[4]={0x68,0x01,0x40,0x57}; 00121 uint8_t ack[2]={0,0}; 00122 printf("%d %d \r\n",ack[0],ack[1]); 00123 serial->write(msg, sizeof(msg), NULL); 00124 while(serial->readable()==0){} 00125 if(serial->readable()==1){ 00126 //serial->read(ack, sizeof(ack), NULL); 00127 ack[0]=serial->getc(); 00128 ack[1]=serial->getc(); 00129 } 00130 printf("%d %d \r\n",ack[0],ack[1]); 00131 } 00132 00133 void HPMA115S0::read_autosend() 00134 { 00135 printf("yo\r\n"); 00136 while(serial->readable()==0){} 00137 if(serial->readable()==1){ 00138 serial->read(buffer, PACKET_SIZE, NULL); 00139 for(int i=1;i<33;i++){ 00140 printf("%d ",buffer[i]); 00141 } 00142 if(buffer[1]==0x42){ 00143 if(buffer[2]==0x4d){ 00144 pm10_count = ((buffer[9] << 8) + buffer[10]); 00145 pm2_5_count = ((buffer[7] << 8) + buffer[8]); 00146 } 00147 } 00148 } 00149 }
Generated on Wed Jul 13 2022 01:47:14 by
1.7.2