I use 5V to power LCD and i have 4,7k resistors in place.
I have to use lcd->init(); (in first post i wrote clear(); it was typo) for lcd to display properly again once corrupt letters appear.
Unfortunetly there is no way i can port or modify library since my programming skills are weak at best.
My curreny code (sketch to test sensors and lcd):
// This #include statement was automatically added by the Spark IDE.
#include "OneWire/OneWire.h"
// This #include statement was automatically added by the Spark IDE.
#include "spark-dallas-temperature/spark-dallas-temperature.h"
//#include "application.h"
#include "LiquidCrystal_I2C.h"
#include "SparkTime/SparkTime.h"
DallasTemperature dallas(new OneWire(D3));
int led1 = D4;
LiquidCrystal_I2C *lcd;
UDP UDPClient;
SparkTime rtc;
unsigned long currentTime;
unsigned long lastTime = 0UL;
String timeStr;
void setup(){
dallas.begin();
rtc.begin(&UDPClient, "north-america.pool.ntp.org");
rtc.setTimeZone(+2); // gmt offset
Serial.begin(9600);
lcd = new LiquidCrystal_I2C(0x27, 20, 4); // set the LCD address to 0x20 for a 16x2 //SparkCore bug, address is actually 27 but shifted (0x27*2)
lcd->init(); // initialize the lcd
lcd->backlight();
lcd->clear();
pinMode(led1, OUTPUT);
}
void loop(){
currentTime = rtc.now();
if (currentTime != lastTime) {
byte sec = rtc.second(currentTime);
// Just the time in 12 hour format
timeStr = "";
timeStr += rtc.hour12String(currentTime);
timeStr += ":";
timeStr += rtc.minuteString(currentTime);
timeStr += ":";
timeStr += rtc.secondString(currentTime);
timeStr += " ";
timeStr += rtc.AMPMString(currentTime);
lastTime = currentTime;
}
lcd->setCursor(5,0);
lcd->print(timeStr);
dallas.requestTemperatures();
delay(1000);
float Radikasse = dallas.getTempCByIndex( 0 );
float Toatemp = dallas.getTempCByIndex( 1 );
float Toatemp2 = dallas.getTempCByIndex( 2 );
Serial.println("Temperature: "); Serial.println(Radikasse) ;Serial.println(Toatemp) ;
lcd->setCursor(5,1);
lcd->print(Radikasse, 1);
lcd->setCursor(5,2);
lcd->print(Toatemp, 1);
lcd->setCursor(5,3);
lcd->print(Toatemp2, 1);
if (Toatemp <23) {
digitalWrite(led1, LOW);
} else {
lcd->init();
//digitalWrite(led1,HIGH);
}
}