Here is the end result of the project...
the code
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
// Connections:
// SDA to Arduino pin 20
// SCL to Arduino pin 21
LiquidCrystal_I2C lcd1(0x27, 20, 4); // << Address 1
LiquidCrystal_I2C lcd2(0x23, 20, 4); // << Address 2
LiquidCrystal_I2C lcd3(0x22, 20, 4); // << Address 3
LiquidCrystal_I2C lcd4(0x26, 20, 4); // << Address 4
float insideTemp1;
float outsideTemp1;
float insideTemp2;
float outsideTemp2;
float insideTemp3;
float outsideTemp3;
float insideTemp4;
float outsideTemp4;
// Data wire is plugged into pin 8 on the Arduino
#define ONE_WIRE_BUS 8
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer1 = {0x28, 0x41, 0x31, 0x96, 0xF0, 0x01, 0x3C, 0xA9};
DeviceAddress outsideThermometer1 = {0x28, 0xC1, 0x01, 0x96, 0xF0, 0x01, 0x3C, 0xC7};
DeviceAddress insideThermometer2 = {0x28, 0x43, 0x50, 0x96, 0xF0, 0x01, 0x3C, 0x1B};
DeviceAddress outsideThermometer2 = {0x28, 0x43, 0x47, 0x96, 0xF0, 0x01, 0x3C, 0x36};
DeviceAddress insideThermometer3 = {0x28, 0x9A, 0x44, 0x96, 0xF0, 0x01, 0x3C, 0x2A};
DeviceAddress outsideThermometer3 = {0x28, 0x25, 0x9D, 0x96, 0xF0, 0x01, 0x3C, 0xA4};
DeviceAddress insideThermometer4 = {0x28, 0xE7, 0x65, 0x96, 0xF0, 0x01, 0x3C, 0xCD};
DeviceAddress outsideThermometer4 = {0x28, 0xB7, 0x91, 0x96, 0xF0, 0x01, 0x3C, 0x5A};
void setup() {
// Start up the library
sensors.begin();
// set the resolution 10 bit = 0.25°C, 11 bit = 0.125°C, 12 bit = 0.0625°C
sensors.setResolution(insideThermometer1, 12);
sensors.setResolution(outsideThermometer1, 12);
sensors.setResolution(insideThermometer2, 12);
sensors.setResolution(outsideThermometer2, 12);
sensors.setResolution(insideThermometer3, 12);
sensors.setResolution(outsideThermometer3, 12);
sensors.setResolution(insideThermometer4, 12);
sensors.setResolution(outsideThermometer4, 12);
lcd1.init();
lcd2.init();
lcd3.init();
lcd4.init();
lcd1.backlight();
lcd2.backlight();
lcd3.backlight();
lcd4.backlight();
lcd1.begin(20,4); // columns, rows. use 20,4 for a 20×4 LCD, etc.
lcd1.clear(); // start with a blank screen
lcd2.begin(20,4); // columns, rows. use 20,4 for a 20×4 LCD, etc.
lcd2.clear(); // start with a blank screen
lcd3.begin(20,4); // columns, rows. use 20,4 for a 20×4 LCD, etc.
lcd3.clear(); // start with a blank screen
lcd4.begin(20,4); // columns, rows. use 20,4 for a 20×4 LCD, etc.
lcd4.clear(); // start with a blank screen
}
void loop() {
// command to make DS18B20 measure the temperatures (but it hasn't been send to arduino yet)
sensors.requestTemperatures();
// commands to read the temperature from the DS18B20's
insideTemp1 = sensors.getTempC(insideThermometer1);
outsideTemp1 = sensors.getTempC(outsideThermometer1);
insideTemp2 = sensors.getTempC(insideThermometer2);
outsideTemp2 = sensors.getTempC(outsideThermometer2);
insideTemp3 = sensors.getTempC(insideThermometer3);
outsideTemp3 = sensors.getTempC(outsideThermometer3);
insideTemp4 = sensors.getTempC(insideThermometer4);
outsideTemp4 = sensors.getTempC(outsideThermometer4);
lcd1.setCursor(0,0);
lcd1.print("lcd #1");
lcd1.setCursor(0,1);
lcd1.print("In:");
lcd1.print(tempString(insideTemp1));
lcd1.setCursor(0,2);
lcd1.print("Out:");
lcd1.print(tempString(outsideTemp1));
lcd2.setCursor(0,0);
lcd2.print("lcd #2");
lcd2.setCursor(0,1);
lcd2.print("In:");
lcd2.print(tempString(insideTemp2));
lcd2.setCursor(0,2);
lcd2.print("Out:");
lcd2.print(tempString(outsideTemp2));
lcd3.setCursor(0,0);
lcd3.print("lcd #3");
lcd3.setCursor(0,1);
lcd3.print("In:");
lcd3.print(tempString(insideTemp3));
lcd3.setCursor(0,2);
lcd3.print("Out:");
lcd3.print(tempString(outsideTemp3));
lcd4.setCursor(0,0);
lcd4.print("lcd #4");
lcd4.setCursor(0,1);
lcd4.print("In:");
lcd4.print(tempString(insideTemp4));
lcd4.setCursor(0,2);
lcd4.print("Out:");
lcd4.print(tempString(outsideTemp4));
delay(100);
}
// float conversion to String with proper rounding (to one decimal)
String tempString(float tempFloat){
int temp = int(tempFloat*100.0);
int tempBeforeDot = int(temp/100);
int tempAfterDot1 = int(temp/10)-int(temp/100)*10;
int tempAfterDot2 = int(temp)-int(temp/10)*10;
String TempString = "";
if(tempBeforeDot >= 0 && tempAfterDot1 == 9 && tempAfterDot2 >= 5){
TempString = String(tempBeforeDot+1);
TempString += ".0";
} else if (tempBeforeDot < 0 && tempAfterDot1 == 9 && tempAfterDot2 >= 5){
TempString = String(tempBeforeDot-1);
TempString += ".0";
} else if (tempAfterDot2 >= 5){
TempString = String(tempBeforeDot);
TempString += ".";
TempString += String(tempAfterDot1+1);
} else {
TempString = String(tempBeforeDot);
TempString += ".";
TempString += String(tempAfterDot1);
}
return TempString;
}