Skip to content

Commit

Permalink
Add temperature sensor support
Browse files Browse the repository at this point in the history
  • Loading branch information
DeqingSun committed Jul 20, 2013
1 parent 20b7639 commit 497bf56
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 2 deletions.
34 changes: 32 additions & 2 deletions sketch_XMPP/sketch_XMPP.ino
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@

#include <XMPPClient.h>

#include <OneWire.h>



byte mac[] = {
0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
char server[] = "wtfismyip.com";
Expand All @@ -16,13 +20,27 @@ XMPPClient client;

int led = 9;

byte addr[8];
char buffer [50];

OneWire ds(A2);

void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
client.xmppLogin(server, username, password, resource, mac);
Serial.println(F("Initialization..."));
while(client.xmppLogin(server, username, password, resource, mac)<=0){
delay(1000);
Serial.println(F("TRY RECONNECT"));
}
client.sendPresence();
//client.sendMessage("bareboneglass@appspot.com","hello");

pinMode(A1,OUTPUT);
pinMode(A3,OUTPUT);
digitalWrite(A1,LOW);
digitalWrite(A3,HIGH);
init_18b20();
}


Expand All @@ -32,7 +50,19 @@ void loop() {
Serial.println(message);
if (strstr(message,"on")!=NULL) digitalWrite(led, HIGH);
if (strstr(message,"off")!=NULL) digitalWrite(led, LOW);
if (strstr(message,"temperature")!=NULL) {
unsigned int a=get_temperature();
unsigned char i_p=a/16;
unsigned char f_p=(a%16)*6+(a%16)/4;
sprintf (buffer, "/push Temperature is: %d.%02dC", i_p,f_p);
client.sendMessage("bareboneglass@appspot.com",buffer);
}
}
}







62 changes: 62 additions & 0 deletions sketch_XMPP/temperature.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
void init_18b20(){
unsigned char i;

if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}

if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
}

unsigned int get_temperature(){
byte i;
byte present = 0;
byte type_s;
byte data[12];

float celsius, fahrenheit;



ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end

delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.

present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}

// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];

byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
return raw;
//celsius = (float)raw / 16.0;

//return celsius;
}


0 comments on commit 497bf56

Please sign in to comment.