Difference between pages "One-Wire Temperature Sensor - DS18B20" and "Temperature & Humidity Sensor Pro"
(Difference between pages)
(Created page with " === Reference Information === <br /> * '''Info Web:''' http://seeedstudio.com/depot/one-wire-temperature-sensor-p-1235.html?cPath=25_27 * '''Techinical Spec:''' Temperature...") |
(Created page with " * '''Product Web:''' http://seeedstudio.com/depot/grove-temperaturehumidity-sensor-pro-p-838.html?cPath=25_27 * '''Wiki:''' http://seeedstudio.com/wiki/Grove_-_Temperature_...") |
||
| Line 1: | Line 1: | ||
| − | |||
| − | |||
| − | |||
| − | * ''' | + | * '''Product Web:''' http://seeedstudio.com/depot/grove-temperaturehumidity-sensor-pro-p-838.html?cPath=25_27 |
| + | |||
| + | * '''Wiki:''' http://seeedstudio.com/wiki/Grove_-_Temperature_and_Humidity_Sensor_Pro | ||
| + | |||
| + | * '''Code Source:''' http://seeedstudio.com/wiki/File:Humidity_Temperature_Sensor.zip | ||
| + | |||
| + | * '''Technical Spec:''' Humidytly: 5% RH - 99% RH - Temperature -40°C - 80°C - Acuracy: 2% RH / 0.5°C | ||
* '''Connector Type:''' Base Shield V1.3 - Grove compatible - http://seeedstudio.com/depot/base-shield-v13-p-1378.html | * '''Connector Type:''' Base Shield V1.3 - Grove compatible - http://seeedstudio.com/depot/base-shield-v13-p-1378.html | ||
| − | |||
| − | |||
---- | ---- | ||
| + | ===Temperature & Humidity Sensor Pro=== | ||
| + | <br /> | ||
| − | + | [[File:Grove_Tem_Humid.jpg]] | |
| − | |||
| − | [[File: | ||
| Line 25: | Line 26: | ||
<br /> | <br /> | ||
| − | '''In order to run this code you should copy the following code into the area delimited by the | + | '''In order to run this code you should copy the following code into the area delimited by the MY_NBIOS CUSTOM CODE banners in the Hello_World_xxx.ino example.''' |
| + | |||
<pre> | <pre> | ||
| − | + | void Nearbus::MyNbios_0( byte portId, UINT setValue, ULONG* pRetValue, byte vmcuMethod, PRT_CNTRL_STRCT* pPortControlStruct ) | |
| − | + | { | |
| − | + | UINT data[6]; | |
| − | + | UINT _pin; | |
| − | void Nearbus::MyNbios_0( byte portId, | + | UINT _count = 6; |
| − | { | + | ULONG _lastreadtime = 0; |
| − | + | boolean firstreading = true; | |
| − | + | float h; | |
| − | + | float t; | |
| − | + | byte ret; | |
| − | byte | + | UINT laststate = HIGH; |
| − | + | UINT counter = 0; | |
| − | + | UINT j = 0; | |
| − | + | UINT i; | |
| − | + | ULONG currenttime; | |
| − | + | ||
| − | + | //************************************ | |
| − | + | // Reconfiguring Ports as I/O | |
| − | + | //************************************ | |
| − | + | if( pPortControlStruct->portMode != MYDRIVER_MODE ) | |
| − | if ( | + | { |
| − | + | PortModeConfig( portId, MYDRIVER_MODE ); | |
| − | |||
} | } | ||
| + | |||
| + | //************************************ | ||
| + | // Custom Function | ||
| + | //************************************ | ||
| + | _pin = pPortControlStruct->pinId; | ||
| + | |||
| + | // pull the pin high and wait 250 milliseconds | ||
| + | digitalWrite(_pin, HIGH); | ||
| + | delay(250); | ||
| − | + | currenttime = millis(); | |
| − | + | if (currenttime < _lastreadtime) { | |
| − | + | // ie there was a rollover | |
| − | + | _lastreadtime = 0; | |
| + | } | ||
| + | if (!firstreading && ((currenttime - _lastreadtime) < 2000)) { | ||
| + | ret = 0; // return last correct measurement | ||
| + | //delay(2000 - (currenttime - _lastreadtime)); | ||
| + | } | ||
| + | else { | ||
| + | firstreading = false; | ||
| + | _lastreadtime = millis(); | ||
| + | |||
| + | data[0] = data[1] = data[2] = data[3] = data[4] = 0; | ||
| + | |||
| + | // now pull it low for ~20 milliseconds | ||
| + | pinMode(_pin, OUTPUT); | ||
| + | digitalWrite(_pin, LOW); | ||
| + | delay(20); | ||
| + | cli(); | ||
| + | digitalWrite(_pin, HIGH); | ||
| + | delayMicroseconds(40); | ||
| + | pinMode(_pin, INPUT); | ||
| + | |||
| + | // read in timings | ||
| + | for ( i=0; i< 85; i++) { // #define MAXTIMINGS = 85 // how many timing transitions we need to keep track of. 2 * number bits + extra | ||
| + | counter = 0; | ||
| + | while (digitalRead(_pin) == laststate) { | ||
| + | counter++; | ||
| + | delayMicroseconds(1); | ||
| + | if (counter == 255) { | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | laststate = digitalRead(_pin); | ||
| + | |||
| + | if (counter == 255) break; | ||
| + | |||
| + | // ignore first 3 transitions | ||
| + | if ((i >= 4) && (i%2 == 0)) { | ||
| + | // shove each bit into the storage bytes | ||
| + | data[j/8] <<= 1; | ||
| + | if (counter > _count) | ||
| + | data[j/8] |= 1; | ||
| + | j++; | ||
| + | } | ||
| + | } | ||
| + | sei(); | ||
| + | |||
| + | // check we read 40 bits and that the checksum matches | ||
| + | if ((j >= 40) && | ||
| + | (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) { | ||
| + | ret = 0; | ||
| + | } | ||
| + | else{ | ||
| + | ret = 1; | ||
| + | } | ||
| + | } | ||
| + | if (ret == 0) { | ||
| + | h = data[0]; | ||
| + | h *= 256; | ||
| + | h += data[1]; | ||
| + | h *= 10; | ||
| − | + | t = data[2] & 0x7F; | |
| − | + | t *= 256; | |
| − | + | t += data[3]; | |
| − | + | t *= 10; | |
| − | + | if (data[2] & 0x80) | |
| − | + | t *= -1; | |
| − | + | } | |
| − | + | else { | |
| − | + | t = 0; | |
| − | + | h = 0; | |
| − | + | } | |
| − | + | // delay(250); | |
| − | + | ||
| − | + | //************************************ | |
| − | + | // Updating register | |
| − | + | //************************************ | |
| − | + | * pRetValue = (ULONG) t; | |
| − | + | } | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
</pre> | </pre> | ||
Latest revision as of 21:17, 29 March 2018
- Product Web: http://seeedstudio.com/depot/grove-temperaturehumidity-sensor-pro-p-838.html?cPath=25_27
- Technical Spec: Humidytly: 5% RH - 99% RH - Temperature -40°C - 80°C - Acuracy: 2% RH / 0.5°C
- Connector Type: Base Shield V1.3 - Grove compatible - http://seeedstudio.com/depot/base-shield-v13-p-1378.html
Temperature & Humidity Sensor Pro
MyNbios Code - Example
In order to run this code you should copy the following code into the area delimited by the MY_NBIOS CUSTOM CODE banners in the Hello_World_xxx.ino example.
void Nearbus::MyNbios_0( byte portId, UINT setValue, ULONG* pRetValue, byte vmcuMethod, PRT_CNTRL_STRCT* pPortControlStruct )
{
UINT data[6];
UINT _pin;
UINT _count = 6;
ULONG _lastreadtime = 0;
boolean firstreading = true;
float h;
float t;
byte ret;
UINT laststate = HIGH;
UINT counter = 0;
UINT j = 0;
UINT i;
ULONG currenttime;
//************************************
// Reconfiguring Ports as I/O
//************************************
if( pPortControlStruct->portMode != MYDRIVER_MODE )
{
PortModeConfig( portId, MYDRIVER_MODE );
}
//************************************
// Custom Function
//************************************
_pin = pPortControlStruct->pinId;
// pull the pin high and wait 250 milliseconds
digitalWrite(_pin, HIGH);
delay(250);
currenttime = millis();
if (currenttime < _lastreadtime) {
// ie there was a rollover
_lastreadtime = 0;
}
if (!firstreading && ((currenttime - _lastreadtime) < 2000)) {
ret = 0; // return last correct measurement
//delay(2000 - (currenttime - _lastreadtime));
}
else {
firstreading = false;
_lastreadtime = millis();
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
// now pull it low for ~20 milliseconds
pinMode(_pin, OUTPUT);
digitalWrite(_pin, LOW);
delay(20);
cli();
digitalWrite(_pin, HIGH);
delayMicroseconds(40);
pinMode(_pin, INPUT);
// read in timings
for ( i=0; i< 85; i++) { // #define MAXTIMINGS = 85 // how many timing transitions we need to keep track of. 2 * number bits + extra
counter = 0;
while (digitalRead(_pin) == laststate) {
counter++;
delayMicroseconds(1);
if (counter == 255) {
break;
}
}
laststate = digitalRead(_pin);
if (counter == 255) break;
// ignore first 3 transitions
if ((i >= 4) && (i%2 == 0)) {
// shove each bit into the storage bytes
data[j/8] <<= 1;
if (counter > _count)
data[j/8] |= 1;
j++;
}
}
sei();
// check we read 40 bits and that the checksum matches
if ((j >= 40) &&
(data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) {
ret = 0;
}
else{
ret = 1;
}
}
if (ret == 0) {
h = data[0];
h *= 256;
h += data[1];
h *= 10;
t = data[2] & 0x7F;
t *= 256;
t += data[3];
t *= 10;
if (data[2] & 0x80)
t *= -1;
}
else {
t = 0;
h = 0;
}
// delay(250);
//************************************
// Updating register
//************************************
* pRetValue = (ULONG) t;
}
