Gracias por responder, tengo un Arduino Mega 2560, el LCD lo tengo conectado igual que en la imagen solo que yo uso los pines 8 al 13:
8 - RS
9 - E
10 - 13, D4-D7
A - resistencia d 220 ohms
k - tierra
Para el modulo SD seguí las instrucciones de la imagen por el puerto ICSP usando ese mismo 5V y ground del puerto.
keypad:
filas en pines 22, 23, 24, 25
columnas en pines 26, 27, 28, 29
Todo funciona bien, solo que al modificar el codigo e intentar cargarlo de nuevo, en ocasiones me marca error de que no se encuentra conectado el arduino, o si lo encuentra carga el programa pero el LCD me manda caracteres extraños y tengo que desconectar y volver a conectar el usb para que funcione, actualmente termine el codigo y hace su función, leer el SD, un txt que almacena contraseñas, con el keypad introducir una contraseña y buscar una coincidencia en el txt.
Anexo el codigo, repito, todo funciona bien, solo que si hago modificaciones al codigo al momento de cargarlo, si no marca error el LCD me imprime cosas raras.
#include <LiquidCrystal.h>
#include <Keypad.h>
#include <SPI.h>
#include <SD.h>
char txt[150];
const int chipSelect = 4;
int i;
int ii;
int iii;
int v = ',';
const byte rows=4;
const byte cols=4;
int ledv= A2;
int ledr= A3;
char customKey;
char menu;
char keys[rows][cols]= //crear el teclado como en fisico
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowpins[rows]={22, 23, 24, 25}; //pines para las filas 1234
byte colpins[cols]={26, 27, 28, 29}; //pines para las columnas ABCD
//crea y nombra el teclado
Keypad customKeypad = Keypad(makeKeymap(keys),rowpins,colpins,rows,cols);
Keypad kpd = Keypad(makeKeymap(keys),rowpins,colpins,rows,cols);
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); //inicializo lcd
// rs,e, D4,D5, D6, D7
char pss1[4],pss2[4];
void setup()
{
Serial.begin(9600);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
lcd.begin(16,2);
analogWrite(ledv,LOW);
analogWrite(ledr,LOW);
//LCD: Saludo inicial
lcd.begin(16, 2);
lcd.setCursor(6,0);
lcd.print("Anmo");
lcd.setCursor(2,1);
lcd.print("Technologies");
delay(3000);
lcd.clear();
delay(500);
lcd.setCursor(1,0);
lcd.print("Buenas tardes");
lcd.setCursor(0,0);
delay(1500);
lcd.clear();
//Lectura del SD
while(!Serial){
;
}
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
File dataFile = SD.open("pass.txt");
// if the file is available, write to it:
if (dataFile) {
for (i = 0; i <= 150; i++)
{
txt[i] = dataFile.read();
Serial.print(txt[i]);
analogWrite(ledv,255);
}
}
// if the file isn't open, pop up an error:
else
{
Serial.println("error opening pass.txt");
}
delay(250);
analogWrite(ledv,0);
analogWrite(ledr,0);
}
void loop()
{
File dataFile = SD.open("pass.txt");
int i=0,j=0,f=0,w=0,k=0;
//pide que ingreses la contraseña
analogWrite(ledr,0);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SISTEMABLOQUEADO");
lcd.setCursor(6,1);
for(i=1;i<=4;i++)
{
pss1[i]=kpd.waitForKey();
lcd.print("*");
delay(250);
}
lcd.clear();
delay(100);
lcd.setCursor(4,0);
lcd.print("Buscando...");
delay(1000);
//Lee el arreglo (txt)
for (ii = 1; ii <= 150; ii++)
{
//Si encuentra una coma en el txt
if (txt[ii] == v)
{
//Guarda los siguientes 4 valores del txt en el arreglo pass2[] (Datos de la contraseña del txt).
for(iii = 1; iii < 5; iii++)
{
pss2[iii] = txt[ii+iii];
}
//Ciclo for para comparar las contraseñas, del txt con la introducida
for(k=0;k<=3;k++)
{
//Compara las contraseñas, las del txt con la introducida, si coinciden los 4 caracteres suma 1 a w de lo contrario resetea w a 0.
if(pss1[k]==pss2[k])
{
w++;
}
else
{
w = 0;
}
}
//Si encuentra una contraseña que coincida con el txt permite el acceso
if(w==4)
{
lcd.clear();
analogWrite(ledv,255);
lcd.setCursor(2,0);
lcd.print("PASS CORRECTO");
lcd.setCursor(0,1);
lcd.print("ACCESO PERMITIDO");
delay(3000);
lcd.clear();
analogWrite(ledv,0);
w = 0;
break;
break;
}
}
if(ii == 149)
{
analogWrite(ledr,255);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("ERROR DE CODIGO");
lcd.setCursor(0,1);
lcd.print("INTENTE DE NUEVO");
delay(1000);
}
}
dataFile.close();
}
Gracias por su tiempo!