Problema con scrittura sull'LCD tramite arduino uno

Salve a tutti , volevo chiedervi se qualcuno mi potrebbe aiutare a scrivere una parte del programma, dato che tutto il resto l'ho fatto. Sto cercando di costruire una piccola cassaforte, tramite l'uso di arduino avendo a disposizione un lcd e un tastierino numerico. L’unico problema che ho è che devo scrivere nella seconda riga dell’lcd, ho usato queste parole
lcd.setCursor (0,1);
lcd.write("*");
se provo a digitare i numeri del tastierino, sullo schermo appare soltanto un asterisco gli altri non vengono scritti, pero se inserisco il codice giusto funziona tutto. sapreste dirmi dove sto sbagliando? A dimenticavo dovrei inserirci anche un cursore che lampeggia in questa riga, in modo che ogni numero che vado a digitare sposti di conseguenza anche il cursore . non so se mi sono spiegato correttamente
Vi allego il programma :

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 14, 15, 16, 17);
#include <Keypad.h>
#define LEDA 10
#define LEDC 9
const byte ROWS = 4; //quattro righe
const byte COLS = 3; //tre colonne
char keyInsert[6];
// Queste variabili servono come verifica del corretto inserimento del codice
int i = 0;
int j = 0;
int s = 0;
int x = 0;
// Codice segreto
char code[7]= "123456";
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {8,7,6,5}; //i Pin a cui sono connesse le righe del KeyPad
byte colPins[COLS] = {4,3,2}; // i Pin a cui sono connesse le colonne del KeyPad
 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 
void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(LEDC,OUTPUT);
  pinMode(LEDA,OUTPUT);
}
 
void loop(){
  char key = keypad.getKey();
  if (i==0){
    Serial.println("Inserire codice...");
    i++;
    lcd.print("Inserire codice");
    i++;
    
  }
  if (key != NO_KEY && j<6){
    Serial.print("*");
    //Serial.println(key);
    keyInsert[j]=key;
    j++;
    
      lcd.setCursor (0,1);
    lcd.write("*");

    
    
    
       
  }
   if(key == '*') {
      Serial.println();
      Serial.println("Verifica codice...");
     lcd.clear() ;
      lcd.write("Verifica codice");
      delay(1000);
      for(s=0; s<6;s++){
        if(keyInsert[s]==code[s]){
          x++;
      }
    } 
      if(x==6){
      Serial.println("Codice corretto"); 
      lcd.setCursor (0,1);
      lcd.write("Codice corretto");
      digitalWrite(LEDA,HIGH); 
      delay(1000);
      digitalWrite(LEDA,LOW);
      }
      else{
         Serial.println("Codice errato, riprovare");
         lcd.setCursor (0,1);
         lcd.print("Codice errato");
         delay(2000);
         lcd.clear() ;
         x=0;
         i=0;
         j=0;
       }
 
      }  
    if(key == '#'){
       lcd.clear() ;
      x=0;
        i=0;
        j=0;
        digitalWrite(LEDC,HIGH); 
        delay(1000);
        digitalWrite(LEDC,LOW);
    }    
}

Se quello che ho capito è giusto (perdonami se sbaglio) basterebbe che tu facessi una funzione tipo

int x = 0;
       if(.....){
              lcd.setCursor(0, x);
              lcd.print("*");
              x++;

alesbiag:
Salve a tutti

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

provando cosi c'è sempre un problema, ora quando digito, gli asterischi vengono mostrati sulla prima colonna della prima riga e poi sulla seconda riga

Scusa mi sono sbagliato al posto di setCursor(0, x) metti setCursor(x, 1)

ora si, vengono mostrati gli asterischi, ma è sorto un altro problema , ho fatto una piccola modifica dato che x++ era gia utlizzato ho aggiunto un int q = 0
Così

lcd.setCursor (q,1);
    lcd.print("*");
    q++;

tutto funziona tranne che dopo aver digitato la password, verificato il codice; riappare la scritta inserire codice, e quando inizio a digitare gli asterischi non vengono visualizzati all'inizio ma dopo 6 posti, più vado avanti e più si spostano sempre di sei cifre, fino a scomparire dall'lcd perchè sono finiti i caratteri

Posteresti il nuovo codice?

eccolo

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 14, 15, 16, 17);
#include <Keypad.h>
#define LEDA 10
#define LEDC 9
const byte ROWS = 4; //quattro righe
const byte COLS = 3; //tre colonne
char keyInsert[6];
// Queste variabili servono come verifica del corretto inserimento del codice
int i = 0;
int j = 0;
int s = 0;
int x = 0;
int q = 0;
// Codice segreto
char code[7]= "123456";
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {8,7,6,5}; //i Pin a cui sono connesse le righe del KeyPad
byte colPins[COLS] = {4,3,2}; // i Pin a cui sono connesse le colonne del KeyPad
 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 
void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(LEDC,OUTPUT);
  pinMode(LEDA,OUTPUT);
}
 
void loop(){
  char key = keypad.getKey();
  if (i==0){
    Serial.println("Inserire codice...");
    i++;
    lcd.print("Inserire codice");
    i++;
    
  }
  if (key != NO_KEY && j<6){
    Serial.print("*");
    //Serial.println(key);
    keyInsert[j]=key;
    j++;
    
    lcd.setCursor (q,1);
    lcd.print("*");
    q++;
    
    
       
  }
   if(key == '*') {
      Serial.println();
      Serial.println("Verifica codice...");
     lcd.clear() ;
      lcd.write("Verifica codice");
      delay(1000);
      for(s=0; s<6;s++){
        if(keyInsert[s]==code[s]){
          x++;
      }
    } 
      if(x==6){
      Serial.println("Codice corretto"); 
      lcd.setCursor (0,1);
      lcd.write("Codice corretto");
      digitalWrite(LEDA,HIGH); 
      delay(1000);
      digitalWrite(LEDA,LOW);
      }
      else{
         Serial.println("Codice errato, riprovare");
         lcd.setCursor (0,1);
         lcd.print("Codice errato");
         delay(2000);
         lcd.clear() ;
         x=0;
         i=0;
         j=0;
       }
 
      }  
    if(key == '#'){
       lcd.clear() ;
      x=0;
        i=0;
        j=0;
        digitalWrite(LEDC,HIGH); 
        delay(1000);
        digitalWrite(LEDC,LOW);
    }    
}

Perchè hai meso j<6 se i numeri sono sei? In questo modo considera solo 1, 2, 3, 4, 5 non il 6

non te lo so dire il perche, ho prelevato da internet 2-3 programmi e li ho messi insieme. penso che quel 6 stia ad indicare una password composta da 6 cifre.

Prova a mettere il 7 al posto del 6

il 6 serve per indicare il numero di asterischi massimi da visualizzare, anche se continuo a digitare ne vengono mostrati solo 6. Non so se mi hai capito bene, di qual'era il problema

Sisi scusami

lo lascio cosi tanto anche con questo piccolo problema va bene lo stesso, basta che resetto arduino e torna apposto.
La ringrazio per l'aiuto

Scusami se non sono stato di troppo aiuto...

In effetti il j dovrebbe essere <7.
Per quanto riguarda l'altro difetto... devi resettare a 0 il valore di q, altrimenti si posiziona col setcursor secondo il precedente valore di q!

Il test j<6 va bene, mi spiegate perché deve essere fatto il confronto con "7"?

La password è di 6 caratteri, giusto? Bene, allora j<6 è corretto. Forse vi dimenticate che gli indici di un array di char partono da 0. Per memorizzare quindi 6 caratteri si usano le celle dalla 0 alla 5 comprese: 0.1.2.3.4.5. Che sono appunto 6. Quindi, il codice entra nell'if finché j<6 perché deve prendere anche il 6° carattere, che va appunto memorizzato nella cella con indice 5. Un volta che viene preso il 6° carattere, j passa a 6, quindi l'if non è più vero.
L'array viene dimensionato di 7 caratteri perché obbligatoriamente un array di char deve terminare con il carattere "\0", che va aggiunto come settima cella.

leo72:
Il test j<6 va bene, mi spiegate perché deve essere fatto il confronto con "7"?

Ops... ho scritto una vaccata, hai ragione.

Deriva da una mia pessima abitudine, uso sempre gli indici da 1 ad n e poi nell'array indico indice n-1 in lettura / scrittura.
Questo mi porta a "dimenticare" che gli indici in effetti partono da 0 :grin:

i e vero scusami @leo

devi resettare a 0 il valore di q,

e come devo scrivere questa cosa?