mandare caratteri a un lcd

Salve a tutti! Mi chiamo Stefano ho 16 anni e sono nuovo di questo forum e del mondo arduino.
Scrivo qui perchè ho un problema in un mio progetto.
vorrei che le parole scritte sul Serial Monitor dell IDE vengano mandate ad un lcd collegato via I2C all'Arduino.
Questo è il codice:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2);
int val =0;

void setup()
{
Serial.begin(9600);
lcd.init();

}

void loop(){

if(Serial.available()){
val=Serial.read();
}
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(val);

}

L'unico problema è che al posto di parole sul lcd appaiono dei numeri.
C'è qualche anima pia che mi può aiutare?
Grazie.

PS:ottimo forum! :wink: :wink:

magari ti risponderà chi ne sa + di me ma credo che tu stampi i codici dei caratteri ricevuti dalla seriale.
Posta i numeri che ti stampa e vediamo.
ciao

Ciao Stefano e ben venuto :smiley: E' molto positivo che chi è così giovane sia anche così determinato ed intraprendente, bravo!

Allora:
La variabile val la devi impostare come char e non come int perchè char corrisponde ad un byte senza segno (da 0 a 255 come il codice ascii).

poi:

lcd.setCursor(0,0);

che dovrai far eseguire al codice solo dietro specifico comando, es:

if( val == 13 ){
  lcd.setCursor(0,0);
}

Altrimenti ad ogni carattere visualizzato riporti il cursore del dispaly all'inizio e non ti si sposta mai di li, mentre nell'esempio che ti ho fatto, all'inizio ci va solo quando gli invii un [return] (o invio che dir si voglia). Per capire i vari numeri che arrivano dal PC consulta sempre una tabella di codici ascii, perchè quello che ti arriva è sempre e comunque un numero, e ad ogni numero corrisponde un simbolo (lettera, numero o punteggiatura che sia).

E soprattutto nel loop dove controlli la seriale devi spostare anche lcd.print(val), altrimenti il loop continua a scrivere sempre lo stesso carattere all'infinito...

Fai queste modifiche e poi fatti sentire :wink:

Grazie mille adesso funziona! grande kokiua!
grazie ancora