This Sketch reads the Temperature from the Texas Instruments TMP75 sensor using I2C communication. The temperature is read, sent to the serial port and to a 2 line by 16 Character TM162AD Hitachi based LCD.
Help from http://bildr.org/2011/01/tmp102-arduino/ for the bitwise Arithmetic, thanks.
No promise or claims of originality , quality or code correctness is made or implied. YMMV. Enjoy :).
// Arduino Sketch to read the Texas Instruments // TMP75 Temperature Sensor // It uses the I2C in the Wire Library // Written by J.Park jim(_dot_)buzz(_at_)gmail(_dot_)com // 23 April 2012 reference // Define includes #include <LiquidCrystal.h> #include <Wire.h> // Wire header file for I2C and 2 wire // I used a Sensor PCB from a scrapped White Intel based iMac // Note there are two sensor boards both with a TMP75 sensor in the iMac. // TMP75 Address is 0x48 and from its Datasheet = A0,A1,A2 are all grounded. int TMP75_Address = 0x48; // Apple iMac Temp Sensor Circular PCB //int TMP75_Address = 0x49; // Apple iMac Temp Sensor Square PCB // LCD pinouts used (rs, enable, d4, d5, d6, d7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declare some nice variables int decPlaces = 1; int numOfBytes = 2; int baudRate = 9600; int columns = 16; // LCD is 16 Column 2 Row Hitachi LCD int rows = 2; byte configReg = 0x01; // Address of Configuration Register byte bitConv = B01100000; // Set to 12 bit conversion byte rdWr = 0x01; // Set to read write byte rdOnly = 0x00; // Set to Read String temperature, SerialDegC, lcdDegC; // Setup the Arduino LCD (Columns, Rows) void setup(){ lcd.begin(columns, rows); // set up the LCD's number of rows and columns: Serial.begin(baudRate); // Set Serial Port speed Wire.begin(); // Join the I2C bus as a master SerialDegC += char(176); // Setup a Degrees C Serial symbol SerialDegC += "C "; lcdDegC += char(223); // Setup a Degrees C LCD Symbol lcdDegC += "C "; Wire.beginTransmission(TMP75_Address); // Address the TMP75 sensor Wire.write(configReg); // Address the Configuration register Wire.write(bitConv); // Set the temperature resolution Wire.endTransmission(); // Stop transmitting Wire.beginTransmission(TMP75_Address); // Address the TMP75 sensor Wire.write(rdOnly); // Address the Temperature register Wire.endTransmission(); // Stop transmitting } // Main Program Infinite loop void loop(){ float temp = readTemp(); // Read the temperature now Serial.print(temp,decPlaces); // Temperature value to 1 Decimal place no newline to serial Serial.println(SerialDegC); // Degree symbol after the temperature value with newline lcd.setCursor(2,0); // Set Cursor position (Column,Row) lcd.print("Temperature *"); // Print string to LCD lcd.setCursor(5,1); // Set Cursor position (Column,Row) lcd.print(temp,decPlaces); // Print temperature value to 1 Decimal place no newline lcd.print(lcdDegC); delay(500); // Slow the reads down so we can follow the output lcd.setCursor(2,0); lcd.print("Temperature "); delay(500); } // Begin the reading the TMP75 Sensor float readTemp(){ // Now take a Temerature Reading Wire.requestFrom(TMP75_Address,numOfBytes); // Address the TMP75 and set number of bytes to receive byte MostSigByte = Wire.read(); // Read the first byte this is the MSB byte LeastSigByte = Wire.read(); // Now Read the second byte this is the LSB // Being a 12 bit integer use 2's compliment for negative temperature values int TempSum = (((MostSigByte << 8) | LeastSigByte) >> 4); // From Datasheet the TMP75 has a quantisation value of 0.0625 degreesC per bit float temp = (TempSum*0.0625); Serial.println(MostSigByte, BIN); // Uncomment for debug of binary data from Sensor Serial.println(LeastSigByte, BIN); // Uncomment for debug of Binary data from Sensor return temp; // Return the temperature value }