Compare commits
4 Commits
95152f5a65
...
8b6c9e0674
Author | SHA1 | Date | |
---|---|---|---|
|
8b6c9e0674 | ||
|
7eb3bcf158 | ||
|
2c0f23ee38 | ||
|
71bb613944 |
@ -257,13 +257,47 @@
|
|||||||
"height": 13,
|
"height": 13,
|
||||||
"text": "+enableOnChipHeater(enabled: boolean): boolean",
|
"text": "+enableOnChipHeater(enabled: boolean): boolean",
|
||||||
"horizontalAlignment": 0
|
"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",
|
"font": "Arial;13;0",
|
||||||
"left": 2216,
|
"left": 2216,
|
||||||
"top": 639,
|
"top": 639,
|
||||||
"width": 301.63671875,
|
"width": 301.63671875,
|
||||||
"height": 68
|
"height": 98
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"_type": "UMLReceptionCompartmentView",
|
"_type": "UMLReceptionCompartmentView",
|
||||||
@ -5630,6 +5664,44 @@
|
|||||||
"direction": "return"
|
"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
|
getTemperature KEYWORD2
|
||||||
setResolution KEYWORD2
|
setResolution KEYWORD2
|
||||||
enableOnChipHeater KEYWORD2
|
enableOnChipHeater KEYWORD2
|
||||||
|
reset KEYWORD2
|
||||||
|
lowBattery KEYWORD2
|
||||||
|
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# Constants (LITERAL1)
|
# Constants (LITERAL1)
|
||||||
|
Loading…
Reference in New Issue
Block a user