00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __WPROGRAM_H__
00025
00026 #include <WaspClasses.h>
00027 #endif
00028
00029
00030
00031 WaspSensorGas::WaspSensorGas()
00032 {
00033 pinMode(DIGITAL7,OUTPUT);
00034 pinMode(DIGITAL6,OUTPUT);
00035 pinMode(DIGITAL5,OUTPUT);
00036 pinMode(DIGITAL2,OUTPUT);
00037 pinMode(DIGITAL4,OUTPUT);
00038 pinMode(DIGITAL3,OUTPUT);
00039 pinMode(DIGITAL1,OUTPUT);
00040 pinMode(SENS_PW_3V3,OUTPUT);
00041 pinMode(SENS_PW_5V,OUTPUT);
00042
00043 digitalWrite(DIGITAL7,LOW);
00044 digitalWrite(DIGITAL6,LOW);
00045 digitalWrite(DIGITAL5,LOW);
00046 digitalWrite(DIGITAL2,LOW);
00047 digitalWrite(DIGITAL4,LOW);
00048 digitalWrite(DIGITAL3,LOW);
00049 digitalWrite(DIGITAL1,LOW);
00050 digitalWrite(SENS_PW_3V3,LOW);
00051 digitalWrite(SENS_PW_5V,LOW);
00052 }
00053
00054
00055
00056 void WaspSensorGas::setBoardMode(uint8_t mode)
00057 {
00058 switch( mode )
00059 {
00060 case SENS_ON : digitalWrite(SENS_PW_3V3,HIGH);
00061 digitalWrite(SENS_PW_5V,HIGH);
00062
00063 RTC.setMode(RTC_ON);
00064 break;
00065 case SENS_OFF: digitalWrite(SENS_PW_3V3,LOW);
00066 digitalWrite(SENS_PW_5V,LOW);
00067 break;
00068 }
00069 }
00070
00071 void WaspSensorGas::configureSensor(uint16_t sensor, uint8_t gain)
00072 {
00073 configureSensor(sensor,gain,0);
00074 }
00075
00076 void WaspSensorGas::configureSensor(uint16_t sensor, uint8_t gain, float resistor)
00077 {
00078 switch( sensor )
00079 {
00080 case SENS_CO2 : configureAmplifier(SENS_AMPLI1,gain);
00081 break;
00082 case SENS_O2 : configureAmplifier(SENS_AMPLI1,gain);
00083 break;
00084 case SENS_SOCKET2A : configureResistor(SENS_R1,resistor);
00085 delay(DELAY_TIME);
00086 configureAmplifier(SENS_AMPLI2,gain);
00087 break;
00088 case SENS_NO2 : configureResistor(SENS_R1,resistor);
00089 delay(DELAY_TIME);
00090 configureAmplifier(SENS_AMPLI2,gain);
00091 break;
00092 case SENS_SOCKET3A : configureResistor(SENS_R2,resistor);
00093 delay(DELAY_TIME);
00094 configureAmplifier(SENS_AMPLI3,gain);
00095 break;
00096 case SENS_SOCKET3B : configureResistor(SENS_R2,resistor);
00097 delay(DELAY_TIME);
00098 configureAmplifier(SENS_AMPLI3,gain);
00099 break;
00100 case SENS_SOCKET3C : configureResistor(SENS_R2,resistor);
00101 delay(DELAY_TIME);
00102 configureAmplifier(SENS_AMPLI3,gain);
00103 break;
00104 case SENS_SOCKET4A : configureResistor(SENS_R3,resistor);
00105 delay(DELAY_TIME);
00106 configureAmplifier(SENS_AMPLI4,gain);
00107 break;
00108 case SENS_SOCKET4B : configureResistor(SENS_R3,resistor);
00109 delay(DELAY_TIME);
00110 configureAmplifier(SENS_AMPLI4,gain);
00111 break;
00112 case SENS_SOCKET4C : configureResistor(SENS_R3,resistor);
00113 delay(DELAY_TIME);
00114 configureAmplifier(SENS_AMPLI4,gain);
00115 break;
00116 }
00117 }
00118
00119 void WaspSensorGas::setSensorMode(uint8_t mode, uint16_t sensor)
00120 {
00121 if( mode==SENS_ON )
00122 {
00123 switch( sensor )
00124 {
00125 case SENS_PRESSURE : digitalWrite(DIGITAL8,HIGH);
00126 break;
00127 case SENS_CO2 : digitalWrite(DIGITAL2,HIGH);
00128 break;
00129 case SENS_O2 : digitalWrite(DIGITAL2,LOW);
00130 break;
00131 case SENS_SOCKET2A : digitalWrite(DIGITAL6,LOW);
00132 digitalWrite(DIGITAL4,HIGH);
00133 break;
00134 case SENS_NO2: digitalWrite(DIGITAL4,LOW);
00135 digitalWrite(DIGITAL6,HIGH);
00136 break;
00137 case SENS_SOCKET3A : digitalWrite(DIGITAL1,HIGH);
00138 digitalWrite(DIGITAL7,HIGH);
00139 break;
00140 case SENS_SOCKET4A : digitalWrite(DIGITAL3,HIGH);
00141 digitalWrite(DIGITAL5,HIGH);
00142 break;
00143 }
00144 }
00145
00146 if( mode==SENS_OFF )
00147 {
00148 switch( sensor )
00149 {
00150 case SENS_PRESSURE : digitalWrite(DIGITAL8,LOW);
00151 break;
00152 case SENS_CO2 : digitalWrite(DIGITAL2,LOW);
00153 break;
00154 case SENS_SOCKET2A : digitalWrite(DIGITAL4,LOW);
00155 break;
00156 case SENS_NO2: digitalWrite(DIGITAL6,LOW);
00157 break;
00158 case SENS_SOCKET3A : digitalWrite(DIGITAL1,LOW);
00159 digitalWrite(DIGITAL7,LOW);
00160 break;
00161 case SENS_SOCKET4A : digitalWrite(DIGITAL3,LOW);
00162 digitalWrite(DIGITAL5,LOW);
00163 break;
00164 }
00165 }
00166 }
00167
00168 float WaspSensorGas::readValue(uint16_t sensor)
00169 {
00170 uint16_t aux=0;
00171 switch( sensor )
00172 {
00173 case SENS_TEMPERATURE : aux=analogRead(ANALOG1);
00174 break;
00175 case SENS_HUMIDITY : aux=analogRead(ANALOG4);
00176 break;
00177 case SENS_PRESSURE : aux=analogRead(ANALOG5);
00178 break;
00179 case SENS_CO2 : aux=analogRead(ANALOG3);
00180 break;
00181 case SENS_O2 : aux=analogRead(ANALOG3);
00182 break;
00183 case SENS_SOCKET2A : aux=analogRead(ANALOG2);
00184 break;
00185 case SENS_NO2 : aux=analogRead(ANALOG2);
00186 break;
00187 case SENS_SOCKET3A : aux=analogRead(ANALOG7);
00188 break;
00189 case SENS_SOCKET3B : aux=pulse(SENS_SOCKET3B);
00190 break;
00191 case SENS_SOCKET3C : aux=pulse(SENS_SOCKET3C);
00192 break;
00193 case SENS_SOCKET4A : aux=analogRead(ANALOG6);
00194 break;
00195 case SENS_SOCKET4B : aux=pulse(SENS_SOCKET4B);
00196 break;
00197 case SENS_SOCKET4C : aux=pulse(SENS_SOCKET4C);
00198 break;
00199 }
00200 return (aux*3.3)/1023;
00201 }
00202
00203
00204
00205 void WaspSensorGas::configureResistor(uint8_t ampli, float resistor)
00206 {
00207 switch( ampli )
00208 {
00209 case SENS_R1 : setResistor(B0101100,resistor);
00210 break;
00211 case SENS_R2 : setResistor(B0101110,resistor);
00212 break;
00213 case SENS_R3 : setResistor(B0101010,resistor);
00214 break;
00215 }
00216 }
00217
00218 void WaspSensorGas::setResistor(uint8_t address, float value)
00219 {
00220 float auxiliar = 0;
00221 uint8_t resist=0;
00222
00223 auxiliar = 128*value;
00224 auxiliar = auxiliar/100;
00225 resist = (uint8_t) 128-auxiliar;
00226
00227 Wire.begin();
00228 delay(100);
00229 Wire.beginTransmission(address);
00230 Wire.send(B00000000);
00231 Wire.send(resist);
00232 Wire.endTransmission();
00233 delay(DELAY_TIME);
00234 PWR.closeI2C();
00235 }
00236
00237 void WaspSensorGas::configureAmplifier(uint8_t ampli, uint8_t gain)
00238 {
00239 switch( ampli )
00240 {
00241 case SENS_AMPLI1 : setAmplifier(B0101000,gain);
00242 break;
00243 case SENS_AMPLI2 : setAmplifier(B0101100,gain);
00244 break;
00245 case SENS_AMPLI3 : setAmplifier(B0101110,gain);
00246 break;
00247 case SENS_AMPLI4 : setAmplifier(B0101010,gain);
00248 break;
00249 }
00250 }
00251
00252 void WaspSensorGas::setAmplifier(uint8_t address, uint8_t value)
00253 {
00254 uint8_t ampli=0;
00255 value--;
00256
00257 ampli=(uint8_t) 128-(128/100)*value;
00258 Wire.begin();
00259 delay(100);
00260 Wire.beginTransmission(address);
00261 Wire.send(B00010000);
00262 Wire.send(ampli);
00263 Wire.endTransmission();
00264 delay(DELAY_TIME);
00265 PWR.closeI2C();
00266 }
00267
00268 uint16_t WaspSensorGas::pulse(uint16_t sensor)
00269 {
00270 uint16_t aux=0;
00271
00272 switch( sensor )
00273 {
00274 case SENS_SOCKET3B : digitalWrite(DIGITAL7, HIGH);
00275 delay(14);
00276 digitalWrite(DIGITAL7, LOW);
00277 delay(980);
00278 digitalWrite(DIGITAL1, HIGH);
00279 delay(3);
00280 aux = analogRead(ANALOG7);
00281 delay(2);
00282 digitalWrite(DIGITAL1, LOW);
00283 break;
00284 case SENS_SOCKET3C : digitalWrite(DIGITAL7, HIGH);
00285 delay(2);
00286 digitalWrite(DIGITAL1, HIGH);
00287 delay(4);
00288 aux = analogRead(ANALOG7);
00289 delay(1);
00290 digitalWrite(DIGITAL1, LOW);
00291 delay(7);
00292 digitalWrite(DIGITAL7, LOW);
00293 delay(236);
00294 break;
00295 case SENS_SOCKET4B : digitalWrite(DIGITAL5, HIGH);
00296 delay(14);
00297 digitalWrite(DIGITAL5, LOW);
00298 delay(980);
00299 digitalWrite(DIGITAL3, HIGH);
00300 delay(3);
00301 aux = analogRead(ANALOG6);
00302 delay(2);
00303 digitalWrite(DIGITAL3, LOW);
00304 break;
00305 case SENS_SOCKET4C : digitalWrite(DIGITAL5, HIGH);
00306 delay(2);
00307 digitalWrite(DIGITAL3, HIGH);
00308 delay(4);
00309 aux = analogRead(ANALOG6);
00310 delay(1);
00311 digitalWrite(DIGITAL3, LOW);
00312 delay(7);
00313 digitalWrite(DIGITAL5, LOW);
00314 delay(236);
00315 break;
00316 }
00317 return aux;
00318 }
00319
00320 WaspSensorGas SensorGas=WaspSensorGas();