Problema con lcd 1602a se come caracteres

Hola lo primero gracias por toda la info que hay en el foro.
me estoy iniciando en esto de arduino y me e embarcado en el primer projecto.
Se trata de dos sondas tipo K una pantalla lcd 16x2 y un ic2 para ahorrar entradas en la placa.
Uso un vinciduino, que creo que es igual a un leonardo.
lo que es el montaje de cables lo tengo claro, pero la lcd me esta dando problemas de que se come caracteres, me explico:
yo pongo este codigo

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 16);  

void setup()
{
lcd.backlight();
lcd.init();

}

void loop()
{  
lcd.setCursor(0, 0);
lcd.print("Prueba");
lcd.setCursor(0, 1); 
lcd.print("2linia");

}

con esto tendría que salir en pantalla Prueba en la primera linea y 2linea en la segunda, pero solo aparece "P" y en segunda linea "2" se come el resto, si intento ponerlos en en (1,0) por ejemplo mueve la palabra pero solo se ve una letra.
tengo que ponerlo letra a letra asi:

lcd.setCursor(0, 0);
 lcd.print ( "S" );
 lcd.setCursor(1,0);
 lcd.print("O");
 lcd.setCursor(2,0);
 lcd.print("N");
 lcd.setCursor(3,0);
 lcd.print("D");
 lcd.setCursor(4,0);
 lcd.print("A");
 lcd.setCursor(5,0);
 lcd.print("1");
 lcd.setCursor(6,0);

asi si sale en la primera linea SONDA1, pero claro asi no se tiene que hacer.
e seguido metiendo codigo, el de las sondas y el codigo final me a quedado asi

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MAX6675.h>
LiquidCrystal_I2C lcd(0x27,16,2);

int LED1= 6;
int CS0 = 13;    // CS pin on MAX6675
int CS1 = 10;    // CS pin on MAX6675
int SO = 12;   // SO pin of MAX6675
int SCK1 = 11;   // SCK pin of MAX6675

int units = 1;    // Units to readout temp (0 = ˚F, 1 = ˚C)
float error1 = 0.0; // Temperature compensation error
float error2 = 0.0; // Temperature compensation error

int status = 0;   // Varible to control the status led

float temp[2];


MAX6675 temp0(CS0,SO,SCK1,units,error1);
MAX6675 temp1(CS1,SO,SCK1,units,error2);

void setup()
{
Serial.begin(9600);
pinMode(LED1, OUTPUT);
lcd.begin(16,2);
//Iniciamos el fondo retroiluminado

 
     
}


void loop()
{
lcd.init();

lcd.backlight();
lcd.setCursor(0, 0);
 lcd.print ( "S" );
 lcd.setCursor(1,0);
 lcd.print("O");
 lcd.setCursor(2,0);
 lcd.print("N");
 lcd.setCursor(3,0);
 lcd.print("D");
 lcd.setCursor(4,0);
 lcd.print("A");
 lcd.setCursor(5,0);
 lcd.print("1");
 lcd.setCursor(6,0);
 lcd.print(":");
temp[0] = temp0.read_temp(5);    // Read the temp 5 times and return the average value 
temp[1] = temp1.read_temp(5);   // Read the temp 5 times and return the average value 

  Serial.print("Temperature: \t");  // Print Header to Serial
for (int i=0; i<4; i++){   // Loop through each of the four temps
  status = 0;      // Reset the status to 0 before we check for errors
  if(temp[i] == -1) {    // If there is an error with the TC, temperature will be -1
    Serial.print("ERROR!");  // Temperature is -1 and there is a thermocouple error
      status++;    // Add to the status varible so status LED turns on
  } else {
    Serial.print( temp[i] );   // Print the temperature to Serial
  }
  Serial.print("\t");          // Print a tab to demininate the data
}

if(status > 0) {               // Check if we should turn on the status LED
  digitalWrite(LED1, HIGH);    // Turn on the status LED
} else {
  digitalWrite(LED1, LOW);     // Turn off the status LED
}
Serial.println(" ");



lcd.setCursor(8, 0);
lcd.print( temp[0] );
lcd.setCursor(10, 1);
lcd.print(temp [1]);
   lcd.setCursor(0, 1);
 lcd.print ( "S" );
 lcd.setCursor(1,1);
 lcd.print("O");
 lcd.setCursor(2,1);
 lcd.print("N");
 lcd.setCursor(3,1);
 lcd.print("D");
 lcd.setCursor(4,1);
 lcd.print("A");
 lcd.setCursor(5,1);
 lcd.print("2");
 lcd.setCursor(6,1);
 lcd.print(":");
delay(9000000000000000);
}

pero al sacarme las temperaturas de las sondas se come el digito pegado al punto por la izquierda (que es rarisimo) quiero decir que la sonda en el monitor serie me marca 23.50cº pues en la pantalla se ve 2.50cº el 3 se lo come que hago mal? lo e probado de todas las formas posibles y no consigo que salgo todo normal.
otra cosa es que si no pongo el delay(9000000000); todo el rato enciende y apaga los caracteres, como lo arreglo?
gracias de antemano

Que hay?

Lo de que imprime a cada rato es facill... recuerda que estas en un loop que se ejecuta constantemente

asi que si quieres, debemos impirmir nada mas cuando haya un cambio;

Ahmm bueno no encontre tu variable de temperatura, pero basicamene es algo asi;

PSEUDOCODIGO

float temp1 = 0;
float temp2 = 0; 

float pastemp1 = 0;
float pastemp2 = 0;

void loop()
temp1 = get.sensor.temperature
temp2 = get.senssor2.temperature 

//aqui hay que tener cuidado hay funciones como en el dallas ds1820
//que devuelven un char "print.temperatureC"... cuando necesitas un 
//float debes usar "get.tempC" 

luego comparamos para ver si hay una nueva temperatura;

If( pastemp1 =! tem1 ) 
{
lcd.print(0,0) ("la temperatura es")
lcd.print(0,1) (temp1)
pastemp1 = temp1 // aqui se iguala y no se imprimira nada hasta un cambio
}

Ahora... Dices que

temp[1] = temp1.read_temp(5);   // Read the temp 5 times and return the average value

es para un promedio...
en realidad creo que necesitas otra variable

averageTemp = (temp[1] + temp[2] + temp[3] + temp[4] + temp[5] )/ 5

asi como lo tienes estas imprimiendo en la lcd la primer lectura de tu promedio de temperatura..
no el promedio en si... aunque claro, puedo estar equivocado

Por ultimo te recomiendo que acomodes tu lcd de una manera mas logica para leerlo aqui;

cd.setCursor(8, 0); lcd.print( temp[0] );
 lcd.setCursor(10, 1); lcd.print(temp [1]);
    lcd.setCursor(0, 1);  lcd.print ( "S" );
  lcd.setCursor(1,1);     lcd.print("O");
  lcd.setCursor(2,1);     lcd.print("N");
  lcd.setCursor(3,1);    lcd.print("D");
  lcd.setCursor(4,1);    lcd.print("A");
  lcd.setCursor(5,1);    lcd.print("2");
  lcd.setCursor(6,1);
  lcd.print(":");

que viene a ser lo mismo que;

lcd.(0,0); lcd.print(averageTemp);
lcd(5,0); lcd.print("SONDA 2");

Animo.
-Alex.

Hola muchisimas gracias por contestar, pero creo que no me entero de nada, entonces quieres quecambie el codigo y lo deje asi?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MAX6675.h>
LiquidCrystal_I2C lcd(0x27,16,2);

int LED1= 6;
int CS0 = 13;    // CS pin on MAX6675
int CS1 = 10;    // CS pin on MAX6675
int SO = 12;   // SO pin of MAX6675
int SCK1 = 11;   // SCK pin of MAX6675

int units = 1;    // Units to readout temp (0 = ˚F, 1 = ˚C)
float error1 = 0.0; // Temperature compensation error
float error2 = 0.0; // Temperature compensation error

int status = 0;   // Varible to control the status led
float temp1 = 0;
float temp2 = 0; 

float pastemp1 = 0;
float pastemp2 = 0;

MAX6675 temp1(CS0,SO,SCK1,units,error1);
MAX6675 temp2(CS1,SO,SCK1,units,error2);

void setup()
{
Serial.begin(9600);
 pinMode(LED1, OUTPUT);
lcd.begin(16,2);
 //Iniciamos el fondo retroiluminado
 lcd.init();

 lcd.backlight();
 lcd.setCursor(0, 0);
  lcd.print ( "S" );
  lcd.setCursor(1,0);
  lcd.print("O");
  lcd.setCursor(2,0);
  lcd.print("N");
  lcd.setCursor(3,0);
  lcd.print("D");
  lcd.setCursor(4,0);
  lcd.print("A");
  lcd.setCursor(5,0);
  lcd.print("1");
  lcd.setCursor(6,0);
  lcd.print(":");
  
      
}


void loop()
{
averageTemp = (temp[1] + temp[2] + temp[3] + temp[4] + temp[5] )/ 5
temp1 = get.sensor.temperature
temp2 = get.senssor2.temperature  


If( pastemp1 =! temp1 ) 
{
lcd.print(0,0) ("la temperatura es")
lcd.print(0,1) (temp1)
pastemp1 = temp1 // aqui se iguala y no se imprimira nada hasta un cambio
}
lcd.(0,0); lcd.print(averageTemp);
lcd(5,0); lcd.print("SONDA 2");

}

asi me ad eror conflicting declaration ‘MAX6675 temp1’

por otro lado si acomodo la lcd solo sigu comiendose los caracteres, estara mal la pantalla o el ic2?

Ahmmm a ver… necesitas tomar 5 lecturas…

for(int a = 0, a<6 a++)
{
temp[a] = get.sensor.temperature

averageTemp = temp[a]++
}
averageTemp = averageTemp / 5

en el ciclo for… dices… toma una lectura de temperatura y guardala en
cada casillero del char…
luego las vas sumando al tota…
despues ya que termino de hacer eso… divides entre 5…
de ahi en delante tu temperatura promedio es esa…

Prueba a hacerlo sin el promedio si se te complica.

Saludos.

-Ale.x

¿Que versión del IDE usas? yo he experimentado problemas con los LCD i2c, con la versión 1.6.6, teniendo que bajar a versión del core de AVR (Menu tools/board/boards manager) a la 1.6.5 para que me funcionen correctamente los LCD i2c

hola gracias por contestar, uso la ultima la 1.6.9, el caso es que el código funciona perfectamente en el arduino del tipo que me vendió la pantalla y el ic2, como es amigo e ido a su tienda y hemos probado la lcd y va perfectamente y el código también, por lo que e comprado un arduino lo mete el y a funcionar, e llegado a casa meto el código yo cambiando la palabra y otra vez a la mierda, así que sera lo que tu dices voy a probar y comento.
muchas gracias

AlexLPD:
Ahmmm a ver… necesitas tomar 5 lecturas…

for(int a = 0, a<6 a++)

{
temp[a] = get.sensor.temperature

averageTemp = temp[a]++
}
averageTemp = averageTemp / 5




en el ciclo for... dices... toma una lectura de temperatura y guardala en
cada casillero del char... 
luego las vas sumando al tota...
despues ya que termino de hacer eso... divides entre 5... 
de ahi en delante tu temperatura promedio es esa.. 

Prueba a hacerlo sin el promedio si se te complica. 

Saludos. 

-Ale.x

Hola muchas gracias, pero no se como acoplar eso a mi codigo, ya me funciona perfectamente, pero solo lee no saca promerdio ni nada, por ahora me apaño, pero si me lo explicas si me gustaria poder hacerlo.
el tema de que no me sacara todos los caracteres era tema del 1.6.9 con el 1.6.5 como indica el compañero va de perlas.
mucha gracias a los dos

erhuse:
hola gracias por contestar, uso la ultima la 1.6.9, el caso es que el código funciona perfectamente en el arduino del tipo que me vendió la pantalla y el ic2, como es amigo e ido a su tienda y hemos probado la lcd y va perfectamente y el código también, por lo que e comprado un arduino lo mete el y a funcionar, e llegado a casa meto el código yo cambiando la palabra y otra vez a la mierda, así que sera lo que tu dices voy a probar y comento.
muchas gracias

MIra, este es un foro www.arduino.cc no .org
La última versión es 1.6.6 no 1.6.9 como respondes.

No usen las ultimas versiones del IDE a menos que tengan Hardware específico que lo necesite.
Con usar la 1.6.0 esta mas que bien.

Oigan que bien... justo tengo problemas con una mendiga LCD...

Dice...

REFRIGERACION COMPLETADO

y de la nada...

EFRIGERACION COMPLETADO

no es el lcd.. por que funciona perfecto con todo el texto, solo que
derpente se borran algunas letras de la primera linea ...y yo no sospechaba del IDE...

Gracias!

surbyte:
MIra, este es un foro www.arduino.cc no .org
La última versión es 1.6.6 no 1.6.9 como respondes.

No usen las ultimas versiones del IDE a menos que tengan Hardware específico que lo necesite.
Con usar la 1.6.0 esta mas que bien.

me refiero al core avr me pone 1.6.9, voy a seguir trasteando ahora que me va normal, ahora a pelearme con los sensores que no quieren ir los dos a la vez
muchas gracias