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 WaspSensorEvent::WaspSensorEvent()
00032 {
00033 pinMode(DIGITAL0,OUTPUT);
00034 pinMode(DIGITAL1,INPUT);
00035 pinMode(DIGITAL2,OUTPUT);
00036 pinMode(DIGITAL3,OUTPUT);
00037 pinMode(DIGITAL4,OUTPUT);
00038 pinMode(DIGITAL5,INPUT);
00039 pinMode(DIGITAL6,OUTPUT);
00040 pinMode(DIGITAL7,OUTPUT);
00041 pinMode(DIGITAL8,OUTPUT);
00042 pinMode(DIGITAL9,OUTPUT);
00043 pinMode(SENS_PW_3V3,OUTPUT);
00044
00045 digitalWrite(DIGITAL0,LOW);
00046 digitalWrite(DIGITAL2,LOW);
00047 digitalWrite(DIGITAL3,LOW);
00048 digitalWrite(DIGITAL4,LOW);
00049 digitalWrite(DIGITAL6,LOW);
00050 digitalWrite(DIGITAL7,LOW);
00051 digitalWrite(DIGITAL8,LOW);
00052 digitalWrite(DIGITAL9,LOW);
00053 digitalWrite(SENS_PW_3V3,LOW);
00054 }
00055
00056
00057
00058 void WaspSensorEvent::setBoardMode(uint8_t mode)
00059 {
00060 switch( mode )
00061 {
00062 case SENS_ON : digitalWrite(SENS_PW_3V3,HIGH);
00063
00064 RTC.setMode(RTC_ON);
00065 break;
00066 case SENS_OFF: digitalWrite(SENS_PW_3V3,LOW);
00067 break;
00068 }
00069 }
00070
00071
00072
00073
00074
00075
00076 void WaspSensorEvent::setThreshold(uint8_t sensor, float threshold)
00077 {
00078 switch( sensor )
00079 {
00080 case SENS_SOCKET1 : setDigipot1(B0101000,threshold);
00081 break;
00082 case SENS_SOCKET2 : setDigipot0(B0101000,threshold);
00083 break;
00084 case SENS_SOCKET3 : setDigipot0(B0101100,threshold);
00085 break;
00086 case SENS_SOCKET4 : setDigipot1(B0101100,threshold);
00087 break;
00088 case SENS_SOCKET5 : setDigipot0(B0101010,threshold);
00089 break;
00090 case SENS_SOCKET6 : setDigipot1(B0101010,threshold);
00091 break;
00092 }
00093 }
00094
00095
00096 float WaspSensorEvent::readValue(uint8_t sensor)
00097 {
00098 uint16_t aux=0;
00099 switch( sensor )
00100 {
00101 case SENS_SOCKET1 : aux=analogRead(ANALOG1);
00102 break;
00103 case SENS_SOCKET2 : aux=analogRead(ANALOG2);
00104 break;
00105 case SENS_SOCKET3 : aux=analogRead(ANALOG4);
00106 break;
00107 case SENS_SOCKET4 : aux=analogRead(ANALOG3);
00108 break;
00109 case SENS_SOCKET5 : aux=analogRead(ANALOG6);
00110 break;
00111 case SENS_SOCKET6 : aux=analogRead(ANALOG7);
00112 break;
00113 case SENS_SOCKET7 : aux=digitalRead(DIGITAL5);
00114 return aux;
00115 break;
00116 case SENS_SOCKET8 : aux=analogRead(ANALOG5);
00117 break;
00118 }
00119 return (aux*3.3)/1023;
00120 }
00121
00122
00123
00124
00125
00126
00127 void WaspSensorEvent::attachInt()
00128 {
00129 digitalWrite(SENS_INT_ENABLE,HIGH);
00130 enableInterrupts(SENS_INT);
00131 }
00132
00133
00134
00135
00136
00137
00138 void WaspSensorEvent::detachInt()
00139 {
00140 digitalWrite(SENS_INT_ENABLE,LOW);
00141 disableInterrupts(SENS_INT);
00142 }
00143
00144
00145
00146
00147
00148
00149
00150
00151 uint8_t WaspSensorEvent::loadInt()
00152 {
00153 uint8_t a=0;
00154 uint8_t aux=0;
00155
00156 intFlag=0;
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179 delay(1);
00180 digitalWrite(SENS_INT_ENABLE, LOW);
00181 delay(10);
00182 digitalWrite(SENS_INT_CLK_INH, LOW);
00183 delay(1);
00184
00185 if(digitalRead(SENS_INT_DO)) intFlag |= 1;
00186 delay(2);
00187
00188 digitalWrite(SENS_INT_CLK_REG, HIGH);
00189 delay(1);
00190 if(digitalRead(SENS_INT_DO)) intFlag |= 2;
00191 delay(1);
00192 digitalWrite(SENS_INT_CLK_REG, LOW);
00193 delay(2);
00194
00195 digitalWrite(SENS_INT_CLK_REG, HIGH);
00196 delay(1);
00197 if(digitalRead(SENS_INT_DO)) intFlag |= 4;
00198 delay(1);
00199 digitalWrite(SENS_INT_CLK_REG, LOW);
00200 delay(2);
00201
00202 digitalWrite(SENS_INT_CLK_REG, HIGH);
00203 delay(1);
00204 if(digitalRead(SENS_INT_DO)) intFlag |= 8;
00205 delay(1);
00206 digitalWrite(SENS_INT_CLK_REG, LOW);
00207 delay(2);
00208
00209 digitalWrite(SENS_INT_CLK_REG, HIGH);
00210 delay(1);
00211 if(digitalRead(SENS_INT_DO)) intFlag |= 16;
00212 delay(1);
00213 digitalWrite(SENS_INT_CLK_REG, LOW);
00214 delay(2);
00215
00216 digitalWrite(SENS_INT_CLK_REG, HIGH);
00217 delay(1);
00218 if(digitalRead(SENS_INT_DO)) intFlag |= 32;
00219 delay(1);
00220 digitalWrite(SENS_INT_CLK_REG, LOW);
00221 delay(2);
00222
00223 digitalWrite(SENS_INT_CLK_REG, HIGH);
00224 delay(1);
00225 if(digitalRead(SENS_INT_DO)) intFlag |= 64;
00226 delay(1);
00227 digitalWrite(SENS_INT_CLK_REG, LOW);
00228 delay(2);
00229
00230 digitalWrite(SENS_INT_CLK_REG, HIGH);
00231 delay(1);
00232 if(digitalRead(SENS_INT_DO)) intFlag |= 128;
00233 delay(1);
00234 digitalWrite(SENS_INT_CLK_REG, LOW);
00235 delay(2);
00236
00237 delay(200);
00238 digitalWrite(SENS_INT_ENABLE, HIGH);
00239 digitalWrite(SENS_INT_CLK_INH, HIGH);
00240
00241 return intFlag;
00242 }
00243
00244
00245
00246 void WaspSensorEvent::setDigipot1(uint8_t address, float value)
00247 {
00248
00249 float thres=0.0;
00250 uint8_t threshold=0;
00251
00252 thres=(3.3-value);
00253 thres *=128;
00254 thres /=3.3;
00255 threshold = (uint8_t) thres;
00256 Wire.begin();
00257 delay(100);
00258 Wire.beginTransmission(address);
00259 Wire.send(B00010000);
00260 Wire.send(threshold);
00261 Wire.endTransmission();
00262 PWR.closeI2C();
00263 }
00264
00265 void WaspSensorEvent::setDigipot0(uint8_t address, float value)
00266 {
00267 float thres=0.0;
00268 uint8_t threshold=0;
00269
00270 thres=(3.3-value);
00271 thres *=128;
00272 thres /=3.3;
00273 threshold = (uint8_t) thres;
00274 Wire.begin();
00275 delay(100);
00276 Wire.beginTransmission(address);
00277 Wire.send(B00000000);
00278 Wire.send(threshold);
00279 Wire.endTransmission();
00280 PWR.closeI2C();
00281 }
00282
00283 WaspSensorEvent SensorEvent=WaspSensorEvent();