byte pines[] = {23, 22, 4, 15, 21, 19, 16, 17}; // Pines para los datos (D0-D7)
#define EN 18
#define RS 5
byte cuenta = 0; // Declarar la variable 'cuenta'
void salidas(byte N) {
for (byte k = 0; k < 8; k++) {
digitalWrite(pines[k], (N >> k) & 0x01);
}
}
void EnviarDato(byte DT) {
digitalWrite(EN, HIGH);
salidas(DT);
digitalWrite(EN, LOW);
delay(2); // Incrementar el tiempo de delay a 2 ms
}
void setup() {
for (byte i = 0; i < 8; i++) { // Cambiar de 10 a 8
pinMode(pines[i], OUTPUT);
}
pinMode(EN, OUTPUT);
pinMode(RS, OUTPUT);
digitalWrite(EN, LOW);
configuracion();
Limpiar();
Cursor(0, 0);
delay(10);
Mensaje("Hola Mundo");
Cursor(1, 0);
}
void configuracion() {
byte tiempos[] = {25, 5, 5, 5, 1, 1, 1, 1, 1, 1};
byte confi[] = {0x30, 0x30, 0x30, 0x38, 0x08, 0x01, 0x06, 0x0C}; // Comandos en 8 bits
digitalWrite(RS, LOW);
for (byte i = 0; i < 8; i++) {
delay(tiempos[i]);
digitalWrite(EN, HIGH);
salidas(confi[i]); // Enviar configuración en modo de 8 bits
digitalWrite(EN, LOW);
}
}
void Limpiar() {
digitalWrite(RS, LOW);
delay(2); // Incrementar el tiempo de delay a 2 ms
digitalWrite(EN, HIGH);
salidas(0x01);
digitalWrite(EN, LOW);
delay(2);
}
void Cursor(byte N, byte M) {
byte comando;
if (N == 0) comando = 0x80 + M;
else comando = 0xC0 + M; // Cambiar 'N' a 'comando'
digitalWrite(EN, LOW);
delay(2);//Lo cambie!!!
digitalWrite(EN, HIGH);
salidas(comando);
digitalWrite(EN, LOW);
}
void Mensaje(String M) {
digitalWrite(RS, HIGH);
for (byte i = 0; i < M.length(); i++) {
EnviarDato(M[i]);
delay(2); // Incrementar el tiempo de delay a 2 ms
}
}
void loop() {
if (cuenta == 10) cuenta = 0;
}