Skip to content

Commit

Permalink
Reading the temperature from a DS3232 chip
Browse files Browse the repository at this point in the history
  • Loading branch information
rweather committed May 28, 2012
1 parent fca3145 commit d26dcdc
Showing 5 changed files with 112 additions and 0 deletions.
10 changes: 10 additions & 0 deletions libraries/RTC/DS3232RTC.cpp
Original file line number Diff line number Diff line change
@@ -353,6 +353,16 @@ void DS3232RTC::writeByte(uint8_t offset, uint8_t value)
RTC::writeByte(offset, value);
}

int DS3232RTC::readTemperature()
{
if (_isRealTime) {
return (((int)(signed char)readRegister(DS3232_TEMP_MSB)) << 2) |
(readRegister(DS3232_TEMP_LSB) >> 6);
} else {
return NO_TEMPERATURE;
}
}

/**
* \brief Enables the generation of interrupts for alarms 0 and 1.
*
2 changes: 2 additions & 0 deletions libraries/RTC/DS3232RTC.h
Original file line number Diff line number Diff line change
@@ -48,6 +48,8 @@ class DS3232RTC : public RTC {
uint8_t readByte(uint8_t offset);
void writeByte(uint8_t offset, uint8_t value);

int readTemperature();

void enableAlarmInterrupts();
void disableAlarmInterrupts();
int firedAlarm();
18 changes: 18 additions & 0 deletions libraries/RTC/RTC.cpp
Original file line number Diff line number Diff line change
@@ -257,6 +257,24 @@ void RTC::writeByte(uint8_t offset, uint8_t value)
}
}

/**
* \var RTC::NO_TEMPERATURE
* \brief Value that is returned from readTemperature() if the realtime
* clock chip cannot determine the temperature.
*/

/**
* \brief Reads the value of the temperature sensor and returns the
* temperature in quarters of a degree celcius.
*
* Returns the value NO_TEMPERATURE if the realtime clock chip cannot
* determine the temperature.
*/
int RTC::readTemperature()
{
return NO_TEMPERATURE;
}

/**
* \var RTC::INCREMENT
* \brief Increment the day, month, or year in a call to adjustDays(), adjustMonths(), or adjustYears().
4 changes: 4 additions & 0 deletions libraries/RTC/RTC.h
Original file line number Diff line number Diff line change
@@ -69,6 +69,10 @@ class RTC
virtual uint8_t readByte(uint8_t offset);
virtual void writeByte(uint8_t offset, uint8_t value);

static const int NO_TEMPERATURE = 32767;

virtual int readTemperature();

// Flags for adjustDays(), adjustMonths(), and adjustYears().
static const uint8_t INCREMENT = 0x0000;
static const uint8_t DECREMENT = 0x0001;
78 changes: 78 additions & 0 deletions libraries/RTC/examples/DumpRTC/DumpRTC.pde
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
This example demonstrates how to read time, date, and other information
from the DS3232 realtime clock chip.
This example is placed into the public domain.
*/

#include <SoftI2C.h>
#include <DS3232RTC.h>

SoftI2C i2c(A4, A5);
DS3232RTC rtc(i2c);

const char *months[] = {
" Jan ", " Feb ", " Mar ", " Apr ", " May ", " Jun ",
" Jul ", " Aug ", " Sep ", " Oct ", " Nov ", " Dec "
};

void setup() {
Serial.begin(9600);

RTCAlarm alarm;
for (byte alarmNum = 0; alarmNum < RTC::ALARM_COUNT; ++alarmNum) {
rtc.readAlarm(alarmNum, &alarm);
Serial.print("Alarm ");
Serial.print(alarmNum + 1, DEC);
Serial.print(": ");
if (alarm.flags & 0x01) {
printDec2(alarm.hour);
Serial.print(':');
printDec2(alarm.minute);
Serial.println();
} else {
Serial.println("Off");
}
}
Serial.println();
}

void loop() {
RTCTime time;
RTCDate date;
rtc.readTime(&time);
rtc.readDate(&date);

Serial.print("Time: ");
printDec2(time.hour);
Serial.print(':');
printDec2(time.minute);
Serial.print(':');
printDec2(time.second);
Serial.println();

Serial.print("Date: ");
Serial.print(date.day, DEC);
Serial.print(months[date.month - 1]);
Serial.print(date.year);
Serial.println();

Serial.print("Temp: ");
int temp = rtc.readTemperature();
if (temp != RTC::NO_TEMPERATURE) {
Serial.print(temp / 4.0);
Serial.println(" celcius");
} else {
Serial.println("not available");
}

Serial.println();

delay(1000);
}

void printDec2(int value)
{
Serial.print((char)('0' + (value / 10)));
Serial.print((char)('0' + (value % 10)));
}

0 comments on commit d26dcdc

Please sign in to comment.