hi all
Newbe here
help please
i have compiled a code and it seams to work but the bottom two rows first two letters flash 0-0 on an ongoing event.
im using a 20x4 lcd the new i2c link the lcd, and wanting a couple of temperature readings to cycle every couple of seconds via Dallas temp probes
i will attach code
all help appreciated
cheers caveman
#include <OneWire.h> //This temperature sensor requires a 4.7k Ohm resistor across its pins 2 and three!!!!
#include <DallasTemperature.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h> // F Malpartida's NewLiquidCrystal library
#define I2C_ADDR 0x27 // Define I2C Address where the PCF8574A is
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
int n = 1;
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
#define LED_OFF 0
#define LED_ON 1
int sensorPin = A0; // select the input pin for the 10K potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor
int setTemp = 0; // variable to store temp desired
int SSRCPin = 5; //Turn on A/C unit
int SSRHPin = 6; //Turn on heat (electric or gas)
int hcLED = 4; //indicator for Cooling mode
int SwitchPin = 1; // To switch between Cooling and Heating
int SSRFan = 7; // To turn on and off the air handler fan
char* heat;
float currentTemp = 0;
//This temperature sensor requires a 4.7k Ohm resistor across its pins 2 and three!!!! Thats the middle pin and the GND pin
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2
// 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 boilertopThermometer = {
0x28, 0xFF, 0xD4, 0x57, 0x33, 0x04, 0x00, 0x56 };
DeviceAddress boilerbottomThermometer = {
0x28, 0xFF, 0xD8, 0x4C, 0x31, 0x04, 0x00, 0x94 };
DeviceAddress spareThermometer = {
0x28, 0x90, 0x60, 0x2C, 0x03, 0x00, 0x00, 0x38 };
void setup(void)
{
lcd.begin (20,4);
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home
// Start up the library
sensors.begin();
// set the resolution to 9 bit (good enough?)
sensors.setResolution(boilertopThermometer, 20);
sensors.setResolution(boilerbottomThermometer, 20);
sensors.setResolution(spareThermometer, 20);
pinMode(SSRFan, OUTPUT); //set airhandler fan pin as output
digitalWrite(SSRFan, LOW);
pinMode(SSRHPin, OUTPUT);
digitalWrite(SSRHPin, LOW);
pinMode(SSRCPin, OUTPUT);
digitalWrite(SSRCPin, LOW);
pinMode(hcLED, OUTPUT);
digitalWrite(hcLED, LOW);
pinMode(SwitchPin, INPUT);
}
void printTemperature(DeviceAddress deviceAddress)
{
sensors.requestTemperatures(); // was in loop
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
} else {
// lcd.print(tempC);
// lcd.print("/");
currentTemp = (DallasTemperature::toFahrenheit(tempC));
lcd.print(currentTemp);
}
}
void loop(void)
{
lcd.setCursor(0,0);
// 01234567890123456789
lcd.print("Boiler Top:");
//
lcd.setCursor(0,1);
lcd.print("Boiler Mid:");
//
lcd.setCursor(0,2);
lcd.print("Cooling water:");
//
lcd.setCursor(0,3);
lcd.print("Set:");
delay(500);
sensorValue = analogRead(sensorPin);
setTemp = sensorValue / 10.24; //Gives us a set temp range between 0 and 99 degrees
lcd.setCursor(16,0);
printTemperature(boilertopThermometer);
lcd.setCursor(16,1);
printTemperature(boilerbottomThermometer);
lcd.setCursor(16,2);
printTemperature(spareThermometer);
lcd.setCursor(16,3);
lcd.print(setTemp);
//Cooling Mode
int val = digitalRead(SwitchPin) ;// val represents digitalRead(SwitchPin);
// If the value of is 1 then make hcLED low (off) which sets the relay in a normally closed state. Hence, turning on the blue LED.
if (val == 1)
{
digitalWrite(hcLED, LOW);
}
/* If the SwitchPin reads 1 and the current temperature is greater than the set temperature (if its hot) turn on the A/C and internal fan */
if (val == 1 && (currentTemp > setTemp + 3))
{
digitalWrite(SSRFan, HIGH);
digitalWrite(SSRHPin, LOW);
digitalWrite(SSRCPin, HIGH);
}
/* Otherwise, if the SwitchPin reads 1 and the current temperature is less than the set temperature (the set temperature has been reached), turn off the A/C and internal fan */
else if (val == 1 && (currentTemp < setTemp - 3))
{
digitalWrite(SSRCPin, LOW);
digitalWrite(SSRFan, LOW);
}
// Heating Mode
// If the value of is 0 then make hcLED HIGH (on) which sets the relay in a normally open state. Hence, turning on the RED LED
if (val == 0)
{
digitalWrite(hcLED, HIGH);
}
/* If the SwitchPin reads 0 and the current temperature is less than the set temperature (if its cold) turn on the HEAT and internal fan */
if (val == 0 && (currentTemp < setTemp + 3))
{
digitalWrite(SSRFan, HIGH);
digitalWrite(SSRCPin, LOW);
digitalWrite(SSRHPin, HIGH);
}
/* If the SwitchPin reads 0 and the current temperature is greater than the set temperature (the set temperature has been reached) turn off the HEAT and internal fan */
else if (val == 0 && (currentTemp > setTemp - 3))
{
digitalWrite(SSRHPin, LOW);
digitalWrite(SSRFan, LOW);
}
}