Compare commits
	
		
			4 Commits
		
	
	
		
			95152f5a65
			...
			8b6c9e0674
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 8b6c9e0674 | ||
|  | 7eb3bcf158 | ||
|  | 2c0f23ee38 | ||
|  | 71bb613944 | 
| @ -257,13 +257,47 @@ | ||||
| 											"height": 13, | ||||
| 											"text": "+enableOnChipHeater(enabled: boolean): boolean", | ||||
| 											"horizontalAlignment": 0 | ||||
| 										}, | ||||
| 										{ | ||||
| 											"_type": "UMLOperationView", | ||||
| 											"_id": "AAAAAAFwQGCQSLPmIVQ=", | ||||
| 											"_parent": { | ||||
| 												"$ref": "AAAAAAFupxeuwAk/ZqA=" | ||||
| 											}, | ||||
| 											"model": { | ||||
| 												"$ref": "AAAAAAFwQGCQE7PjlD0=" | ||||
| 											}, | ||||
| 											"font": "Arial;13;0", | ||||
| 											"left": 2221, | ||||
| 											"top": 704, | ||||
| 											"width": 291.63671875, | ||||
| 											"height": 13, | ||||
| 											"text": "+reset(): boolean", | ||||
| 											"horizontalAlignment": 0 | ||||
| 										}, | ||||
| 										{ | ||||
| 											"_type": "UMLOperationView", | ||||
| 											"_id": "AAAAAAFwQMQ/eLRkThk=", | ||||
| 											"_parent": { | ||||
| 												"$ref": "AAAAAAFupxeuwAk/ZqA=" | ||||
| 											}, | ||||
| 											"model": { | ||||
| 												"$ref": "AAAAAAFwQMQ/RLRhTD0=" | ||||
| 											}, | ||||
| 											"font": "Arial;13;0", | ||||
| 											"left": 2221, | ||||
| 											"top": 719, | ||||
| 											"width": 291.63671875, | ||||
| 											"height": 13, | ||||
| 											"text": "+lowBattery(): boolean", | ||||
| 											"horizontalAlignment": 0 | ||||
| 										} | ||||
| 									], | ||||
| 									"font": "Arial;13;0", | ||||
| 									"left": 2216, | ||||
| 									"top": 639, | ||||
| 									"width": 301.63671875, | ||||
| 									"height": 68 | ||||
| 									"height": 98 | ||||
| 								}, | ||||
| 								{ | ||||
| 									"_type": "UMLReceptionCompartmentView", | ||||
| @ -5630,6 +5664,44 @@ | ||||
| 									"direction": "return" | ||||
| 								} | ||||
| 							] | ||||
| 						}, | ||||
| 						{ | ||||
| 							"_type": "UMLOperation", | ||||
| 							"_id": "AAAAAAFwQGCQE7PjlD0=", | ||||
| 							"_parent": { | ||||
| 								"$ref": "AAAAAAFupxeuvgk2JFo=" | ||||
| 							}, | ||||
| 							"name": "reset", | ||||
| 							"parameters": [ | ||||
| 								{ | ||||
| 									"_type": "UMLParameter", | ||||
| 									"_id": "AAAAAAFwQGDRMbQXu2E=", | ||||
| 									"_parent": { | ||||
| 										"$ref": "AAAAAAFwQGCQE7PjlD0=" | ||||
| 									}, | ||||
| 									"type": "boolean", | ||||
| 									"direction": "return" | ||||
| 								} | ||||
| 							] | ||||
| 						}, | ||||
| 						{ | ||||
| 							"_type": "UMLOperation", | ||||
| 							"_id": "AAAAAAFwQMQ/RLRhTD0=", | ||||
| 							"_parent": { | ||||
| 								"$ref": "AAAAAAFupxeuvgk2JFo=" | ||||
| 							}, | ||||
| 							"name": "lowBattery", | ||||
| 							"parameters": [ | ||||
| 								{ | ||||
| 									"_type": "UMLParameter", | ||||
| 									"_id": "AAAAAAFwQMTQprSwKNg=", | ||||
| 									"_parent": { | ||||
| 										"$ref": "AAAAAAFwQMQ/RLRhTD0=" | ||||
| 									}, | ||||
| 									"type": "boolean", | ||||
| 									"direction": "return" | ||||
| 								} | ||||
| 							] | ||||
| 						} | ||||
| 					] | ||||
| 				}, | ||||
|  | ||||
							
								
								
									
										55
									
								
								lib/I2CDeviceLib/I2CDeviceLib.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								lib/I2CDeviceLib/I2CDeviceLib.ino
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| /*
 | ||||
|  * Anatole SCHRAMM-HENRY | ||||
|  * Tim THUREL | ||||
|  * Température groupe 3 | ||||
|  *  | ||||
|  * Test de la bibliothèque permettant de piloter le STS21 | ||||
|  * Capteur de température de la marque SENSIRION | ||||
|  * Précision : 0.2°C | ||||
|  */ | ||||
| 
 | ||||
| #include "STS21.h" | ||||
| 
 | ||||
| STS21 sts21; | ||||
| 
 | ||||
| void setup() | ||||
| { | ||||
|   Serial.begin(115200); | ||||
|   Serial.println("Starting sts21 test"); | ||||
|   if(sts21.begin()) | ||||
|     Serial.println("Sensor present !"); | ||||
|   else | ||||
|     Serial.println("Sensor missing !"); | ||||
|   Serial.println("End setup"); | ||||
|   sts21.reset(); | ||||
|   Serial.println("Setting chip heater"); | ||||
|   sts21.enableOnChipHeater(true); | ||||
|   delay(100); | ||||
|   Serial.println("Setting chip heater"); | ||||
|   sts21.enableOnChipHeater(false); | ||||
|   delay(100); | ||||
|   Serial.println("Setting resolution 12"); | ||||
|   sts21.setResolution(STS21::RES_12); | ||||
|   delay(100); | ||||
|   Serial.println("Setting resolution 14"); | ||||
|   sts21.setResolution(STS21::RES_14); | ||||
|   delay(100); | ||||
|   Serial.println("Setting resolution 13"); | ||||
|   sts21.setResolution(STS21::RES_13); | ||||
|   delay(100); | ||||
|   Serial.println("Setting resolution 11"); | ||||
|   sts21.setResolution(STS21::RES_11); | ||||
|   delay(100); | ||||
|   sts21.setResolution(STS21::RES_14); | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| void loop() | ||||
| { | ||||
|   double temp = sts21.getTemperature(); | ||||
|   Serial.printf("No Hold -> temp : %.2f\n",temp); | ||||
|   temp = sts21.getTemperature(false); | ||||
|   Serial.printf("Hold -> temp : %.2f, Battery level low : %s\n",temp, sts21.lowBattery() ? "true":"false"); | ||||
| 
 | ||||
|   delay(1000); | ||||
| } | ||||
| @ -1 +1,172 @@ | ||||
| #include "STS21.h" | ||||
| 
 | ||||
| #define DEBUG | ||||
| 
 | ||||
| double STS21::getTemperature(boolean noHold) | ||||
| { | ||||
|   uint8_t data[2] = {0,0}; | ||||
|   double temperature(0.0); | ||||
|   uint16_t alignement(0); | ||||
|    | ||||
|   twi->beginTransmission(address); | ||||
|   if(noHold) | ||||
|     twi->write(NO_HOLD_MASTER); | ||||
|   else | ||||
|     twi->write(HOLD_MASTER); | ||||
|      | ||||
|   if(twi->endTransmission() != 0) | ||||
|     return temperature;//Error
 | ||||
| 
 | ||||
|   if(noHold) | ||||
|   { | ||||
|     switch(_stsRes) | ||||
|     { | ||||
|       case RES_13: | ||||
|         delay(50); | ||||
|         break; | ||||
|       case RES_12: | ||||
|         delay(35); | ||||
|         break; | ||||
|       case RES_11: | ||||
|         delay(20); | ||||
|         break; | ||||
|       default: | ||||
|         delay(95); | ||||
|         break; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   //On recupère les deux octets contenant la température
 | ||||
|   twi->requestFrom(address, (uint8_t)2); | ||||
|   if(twi->available() == 2) | ||||
|   { | ||||
|     data[0] = twi->read(); | ||||
|     data[1] = twi->read(); | ||||
|   } | ||||
| 
 | ||||
|   alignement = data[0]; | ||||
|   alignement <<= 8; | ||||
|   alignement += data[1] & 0xFC; | ||||
|    | ||||
|   temperature = -46.85 + 175.72 * ((double)alignement / 65536.0); | ||||
| 
 | ||||
|   return temperature; | ||||
| } | ||||
| 
 | ||||
| uint8_t STS21::readUserRegister() | ||||
| { | ||||
|   uint8_t returned(0); | ||||
|    | ||||
|   twi->beginTransmission(address); | ||||
|   twi->write(READ_USER_REG); | ||||
|   if(twi->endTransmission() != 0) | ||||
|     return 0; | ||||
| 
 | ||||
|   twi->requestFrom(address, (uint8_t)1); | ||||
| 
 | ||||
|   if(twi->available() == 1) | ||||
|   { | ||||
|     returned = twi->read(); | ||||
|   } | ||||
|    | ||||
|   return returned; | ||||
| } | ||||
| 
 | ||||
| boolean STS21::writeUserRegister(uint8_t value) | ||||
| { | ||||
|   twi->beginTransmission(address); | ||||
|   twi->write(WRITE_USER_REG); | ||||
|   twi->write(value); | ||||
|    | ||||
|   return twi->endTransmission() == 0; | ||||
| } | ||||
| 
 | ||||
| boolean STS21::setResolution(STS_RES res) | ||||
| { | ||||
|   uint8_t userReg = readUserRegister(); | ||||
|   boolean toBeReturned(false); | ||||
|   #ifdef DEBUG | ||||
|   Serial.printf("User Reg value before : %X\n",userReg); | ||||
|   #endif | ||||
|    | ||||
|   switch(res) | ||||
|   { | ||||
|     case RES_13: | ||||
|         userReg |= 0b10000000; | ||||
|         userReg &= 0b11111110; | ||||
|         break; | ||||
|       case RES_12: | ||||
|         userReg |= 0b00000001; | ||||
|         userReg &= 0b01111111; | ||||
|         break; | ||||
|       case RES_11: | ||||
|         userReg |= 0b10000001; | ||||
|         break; | ||||
|       default://Default is 14 bit resolution
 | ||||
|         userReg &= 0b01111110; | ||||
|         break; | ||||
|   } | ||||
| 
 | ||||
|   if(writeUserRegister(userReg)) | ||||
|   { | ||||
|     toBeReturned = true; | ||||
|     _stsRes = res; | ||||
|     #ifdef DEBUG | ||||
|     Serial.printf("Set resolution success\n"); | ||||
|     #endif | ||||
|   } | ||||
|    | ||||
|   userReg = readUserRegister(); | ||||
|   #ifdef DEBUG | ||||
|   Serial.printf("User Reg value after : %X\n",userReg); | ||||
|   #endif | ||||
| 
 | ||||
|   return toBeReturned; | ||||
| } | ||||
| 
 | ||||
| boolean STS21::enableOnChipHeater(boolean enabled) | ||||
| { | ||||
|   uint8_t userReg = readUserRegister(); | ||||
|   boolean toBeReturned(false); | ||||
|    | ||||
|   #ifdef DEBUG | ||||
|   Serial.printf("User Reg value before : %X\n",userReg); | ||||
|   #endif | ||||
| 
 | ||||
|   if(enabled) | ||||
|     userReg |= CHIP_HEATER; | ||||
|   else | ||||
|     userReg &= (~CHIP_HEATER); | ||||
| 
 | ||||
|   if(writeUserRegister(userReg)) | ||||
|   { | ||||
|     toBeReturned = true; | ||||
|     _onChipHeater = enabled; | ||||
|     #ifdef DEBUG | ||||
|     Serial.printf("Set chip heater success\n"); | ||||
|     #endif | ||||
|   } | ||||
|    | ||||
|   userReg = readUserRegister(); | ||||
|   #ifdef DEBUG | ||||
|   Serial.printf("User Reg value after : %X\n",userReg); | ||||
|   #endif | ||||
| 
 | ||||
|   return toBeReturned; | ||||
| } | ||||
| 
 | ||||
| boolean STS21::reset() | ||||
| { | ||||
|   boolean result; | ||||
|   twi->beginTransmission(address); | ||||
|   twi->write(SOFT_RST); | ||||
|   result = twi->endTransmission() == 0; | ||||
|   delay(30); | ||||
|   return result; | ||||
| } | ||||
| 
 | ||||
| boolean STS21::lowBattery() | ||||
| { | ||||
|   uint8_t userReg = readUserRegister(); | ||||
|   return userReg & END_OF_BAT; | ||||
| } | ||||
|  | ||||
| @ -1 +1,48 @@ | ||||
| /*
 | ||||
|  * Anatole SCHRAMM-HENRY | ||||
|  * Tim THUREL | ||||
|  * Température groupe 3 | ||||
|  * Date 14/02/2020 00:05 | ||||
|  *  | ||||
|  * Classe permettant de piloter le STS21 | ||||
|  * Capteur de température de la marque SENSIRION | ||||
|  * Précision : 0.2°C | ||||
|  *  | ||||
|  * Tout droit réservé | ||||
|  */ | ||||
| #ifndef STS21_H | ||||
| #define STS21_H | ||||
| 
 | ||||
| #include "I2CDevice.h" | ||||
| //Définition des commandes
 | ||||
| #define HOLD_MASTER 0xE3 | ||||
| #define NO_HOLD_MASTER 0xF3 | ||||
| #define WRITE_USER_REG 0xE6 | ||||
| #define READ_USER_REG 0xE7 | ||||
| #define SOFT_RST 0xFE | ||||
| 
 | ||||
| //User register bits
 | ||||
| #define END_OF_BAT 0x40 | ||||
| #define CHIP_HEATER 0x04 | ||||
| 
 | ||||
| class STS21 : public I2CDevice | ||||
| { | ||||
|   public: | ||||
|     enum STS_RES {RES_11 = 3, RES_12 = 1, RES_13 = 2, RES_14 = 0}; | ||||
|     STS21(uint8_t addr = 0x4A):I2CDevice(addr), _onChipHeater(false), _stsRes(RES_14) {delay(20);} | ||||
|     ~STS21(){} | ||||
|     virtual boolean begin(){return I2CDevice::begin();}; | ||||
|     double getTemperature(boolean noHold = true);//Degré celsius
 | ||||
|     boolean setResolution(STS_RES res); | ||||
|     boolean enableOnChipHeater(boolean enabled); | ||||
|     boolean reset(); | ||||
|     boolean lowBattery();//Retourne vrai si le bit indiquant un niveau de batterie faible est present, faux sinon
 | ||||
|   protected: | ||||
|   private: | ||||
|     uint8_t readUserRegister(); | ||||
|     boolean writeUserRegister(uint8_t value); | ||||
|     boolean _onChipHeater; | ||||
|     STS_RES _stsRes; | ||||
| }; | ||||
| 
 | ||||
| #endif //STS21_H
 | ||||
|  | ||||
| @ -20,6 +20,9 @@ sampleVoltage	KEYWORD2 | ||||
| getTemperature	KEYWORD2 | ||||
| setResolution	KEYWORD2 | ||||
| enableOnChipHeater	KEYWORD2 | ||||
| reset	KEYWORD2 | ||||
| lowBattery	KEYWORD2 | ||||
| 
 | ||||
| 
 | ||||
| ####################################### | ||||
| # Constants (LITERAL1) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user