Cambiar lcd a i2c (SOLUCIONADO)

Hola a todos en primer lugar un saludo a todos ,tengo este codigo y no soy muy entendido en programación y e seguido varios tutoriales para cambiar el lcd a modo de ic2 pero cada vez la e liado mas y no consigo dar con ello,agradesco que me dijereis en que lineas tengo que poner el :

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); que creo que serian las lineas correctas pues cada vez ecuentro un error distinto.

tengo un lcd 16x02 pero hay algo que me descuadra aunque se algo de arduino pero poco el autor dice que lo ha echo con un arduino uno...pero yo veo en el codigo las salidas 14,15,18 y 19 y el uno no las tiene,espero me aclaren esta duda tambie.

este es el codigo que quiero que trabaje en i2c,gracias.

//Creado por Ryutaku versión 2.0
// ryutaku.com
//Programa para una caja fuerte en arduino
//Para diagramas visitar ryutaku.com
//200415
#include <Keypad.h> // Controla el teclado
#include <LiquidCrystal.h>  //controla el LCD
#include <Servo.h>  //Control del servomotor
#include <EEPROM.h>  //COntrola E/S EEPROM
#define CERRAR 90 //Calibrar a gusto la pos del servomotor cerrado
#define ABRIR 180 //Calibrar a gusto la pos del servomotor abierto
//*****************************************
//*** Declaracion de variables locales*****
//*****************************************
Servo seguro;   //servomotor
LiquidCrystal lcd(2 , 3, 4, 5, 6, 7); //display LCD
const byte filas = 4;
const byte columnas = 4;
byte pinsFilas[filas] = {9, 10, 11, 12};
byte pinsColumnas[columnas] = {14, 15, 16, 17};
char teclas[filas][columnas] =  {
  {'1', '2', '3', 'A'},                       // Declaración del teclado
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'},
};
Keypad teclado = Keypad(makeKeymap(teclas), pinsFilas, pinsColumnas, filas, columnas);
char password[5]; //almacena la contraseña en eeprom
char ingreso;  //ingreso del usuario
char passUser[4];
char confirmPass[4];  //confirmacion de la contraseña
//char ca[7] = {'3', '7', '1', '9', '2', 'A'}; //clave admin establecida
//char cal[7];   // Clave admin leida
//int contador = 0; //Lleva la posicion del array
//int cursorr = 6; //Lleva la posicion del cursor
//int comp;  // comparacion entre 2 arrays
int i=0;
int a; //aux
void setup() {
  pinMode(19, OUTPUT); // LEDS QUE INDICAN ABIERTO(13) O CERRADO(19)
  pinMode(13, OUTPUT);
  digitalWrite(19, HIGH); //enciende el led de cerrado
  seguro.attach(18);  // Pin del servomotor
  seguro.write(CERRAR);
  lcd.begin(16, 2);   //Configuracion lcd 16X2 (columnas,fila)
  seguro.write(90);  //Cerrar puerta
  lcd.setCursor(0, 0);
  lcd.print("  **PASSWORD** ");
  lcd.setCursor(5, 1);
  lcd.print("____");
  //LEER CONTRASEÑA DE LA EEPROM 

//        error if(password[4]!='Z'){     
    //correción
    if(EEPROM.read(4)!='Z'){
    EEPROM.write(0,'1');
    EEPROM.write(1,'2');
    EEPROM.write(2,'3');
     EEPROM.write(3,'4');
    EEPROM.write(4,'Z'); 
  }
   for (int i = 0; i <= 4; i++) { 
    password[i] = EEPROM.read(i);
  }              
  
}//fin del setup

void loop() {
    leerIngreso(1);
}
 




////////////////////////////////////////////

void leerIngreso(int a) {
  ingreso = teclado.getKey();
  if (ingreso != NO_KEY)
    switch (ingreso) {
      case 'A':    // es como el "enter" para introducir la password
        if(evaluar(1)==1)
        correcto();
        else{
        msgError();
        }
        reset();
        break;
        
      case 'B':
        informacion();  //muestra en el lcd las opcionesde la caja fuerte
        reset();
        break;
        
      case 'C':
        cambioPass();
        reset();
        break;
      case 'D':
        lcd.setCursor(0, 0);
        lcd.print("Presionaste D");
        delay(300);
        seguro.write(CERRAR);
        reset();
        break;
      case '*':
        lcd.setCursor(0, 0);
        lcd.print("Presionaste *");
        delay(300);
        reset();
        break;
      case '#':
        lcd.setCursor(0, 0);
        lcd.print("Presionaste #");
        delay(300);
        reset();
        break;
      default: //si es un numero debe imprimirlo en el LCD y ademas guardarlo en el arreglo passUser
        if(a==1){
        passUser[i] = ingreso;
        printPass(passUser[i], 5 + i, 1);
        }
        if(a==2){
        confirmPass[i] = ingreso;
        printPass(confirmPass[i], 5 + i, 1);
        }
        i++;
        if (i > 3)
          i = 0;
   
}
}

void cleanlcd() {
  lcd.setCursor(0, 0);
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print("                ");
}


void printPass(char a, int columna, int fila ) {
  lcd.setCursor(columna, fila);
  lcd.print(a);
  delay(100);
  lcd.setCursor(columna, fila);
  lcd.print("*");
}

int evaluar(int a) {
  int j = 0;
  if (a==1){
  for (int i = 0; i <= 3; i++) {
    if (password[i] == passUser[i]) {
        j++;
    }
  }
  }
  if(a==2){
  for (int i = 0; i <= 3; i++) {
    if (passUser[i] == confirmPass[i]) {
        j++;
    }
  }
  }
  if (j == 4) {
    return j=1;
  }
  else {
    return j=0;
  }
}


void reset() {
  lcd.setCursor(0, 0);
  lcd.print("  **PASSWORD** ");
  lcd.setCursor(5, 1);
  lcd.print("____");
  for(int i =0;i<=3;i++){
  passUser[i]=NO_KEY;
  confirmPass[i]=NO_KEY;
  }
  i=0;
}

void msgError(){
  
        lcd.setCursor(0, 0);
        lcd.print("      ERROR      ");
        delay(500);
      
    
  }

void correcto(){
  
        lcd.setCursor(0, 0);
        lcd.print("     CORRECTO      ");
        //Abrir servomotor
        seguro.write(ABRIR);
        delay(500);
}

  
void informacion() {
  lcd.setCursor(0, 0);
  lcd.print("'A' para introdu");
  delay(200);
  lcd.setCursor(0, 0);
  lcd.print("cir la pass        ");
  delay(200);
  lcd.setCursor(0, 0);
  lcd.print("'C' para cambiar");
  delay(200);
  lcd.setCursor(0, 0);
  lcd.print(" la pass             ");
  delay(200);
}



void cambioPass() {
   lcd.setCursor(0, 0);
  lcd.print("Cambio de pass    ");
  delay(200);
  lcd.setCursor(0, 0);
  lcd.print("Introduce pass     ");
  delay(200);
  lcd.setCursor(0, 0);
  lcd.print("anterior        ");
  delay(200);  
  reset();
   while(passUser[3]==NO_KEY){
    leerIngreso(1);}
  if (evaluar(1) == 1) {
    lcd.setCursor(0, 0);
    lcd.print("Introduce           ");
    delay(200);
    lcd.setCursor(0, 0);
    lcd.print("la pass nueva            ");
    delay(200);
    reset();
    while(passUser[3]==NO_KEY){
      leerIngreso(1);
  }
    lcd.setCursor(0, 0);
    lcd.print("Vuelve a intro     ");
    delay(200);
    lcd.setCursor(0, 0);
    lcd.print("cirla           ");
    delay(200);    
    lcd.setCursor(0, 0);
    lcd.print("  **PASSWORD**      ");
    lcd.setCursor(5, 1);
    lcd.print("____");
    lcd.setCursor(0, 0);
    i=0;
    while(confirmPass[3]==NO_KEY){
      leerIngreso(2);
  }
    if(evaluar(2)==1){
      // funcion de EEPROM
      for (int i = 0; i <= 3; i++) { 
         EEPROM.write(i, passUser[i]);
    }
      for (int i = 0; i <= 3; i++) { 
         password[i] = EEPROM.read(i);
  }
      lcd.setCursor(0, 0);
      lcd.print("Contraseña cam  ");
      delay(200);
      lcd.setCursor(0, 0);
      lcd.print("biada           ");
      delay(200);
    }
    else{
      lcd.setCursor(0, 0);
      lcd.print("Error las pass   ");
      delay(200);
      lcd.setCursor(0, 0);
      lcd.print("no coinciden        ");
      delay(200);
    }
    
  }
  else {
    msgError();
  }
  reset();
}

void passChange(){
 for(int i=0;i<=3;i++){
   password[i]=passUser[i];
 }
  
}

ya e solucionado lo del lcd,ahora lo que no tengo claro son los pines 14,15,18 y 19 alguien me podia aclarar cuales podrian ser?

prueba este para el display

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display


void setup() 
{
  lcd.init(); 
  lcd.begin(16,2); //Define el número de columnas y filas del display
  lcd.backlight(); 
  lcd.setCursor(0, 0);
  lcd.print("hola");
  
  void  loop()
  {
  }

en este caso la direccion es 27, puede que el tuyo sea otro, en mi caso en(0x27,16,2); 27 o 3F, comenta los errores que te salen y qué te sale en display.
saludos

Gracias efect20000,cuales pueden ser los pines 14,15,18 y 19 en arduino uno,pues segun el autor usa arduino uno y segun la programacio usa sos pines gracias.

enter_67:
Gracias efect20000,cuales pueden ser los pines 14,15,18 y 19 en arduino uno,pues segun el autor usa arduino uno y segun la programacio usa sos pines gracias.

En Arduino UNO es imposible. El autor lo hizo en un MEGA por que el UNO solo llega en pin´s digitales desde 2 hasta 13. (11 pin´s y de diferentes características.)

Saludos

Los pines son los que tiene A4 y A5. I2C esta en esos pines.

hola que tal.

me podrias informar como resorlviste pasar a i2c?

Si claro, creando un nuevo hilo porque este hilo esta cerrado
Como esperas que alguien que creó el hilo en 2016 te responda?
No vuelvas a revivir hilos y te invito gentilmente a que hagas dos cosas
1. Lee las normas del foro
2. Crea un hilo con tu consulta.