#define RS 5
#define EN 18
// Pines de LCD RS, EN, D0, D1, D2, D3, D4, D5, D6, D7
byte pines[] = {RS, EN, 25, 26, 32, 33, 27, 14, 12, 13};
void setup() {
for(byte i = 0; i < 10; i++){
pinMode(pines[i], OUTPUT);
}
EnviaComando(0x38); // Datos de 8 bits, display de 2x16 y caracteres de 5x8
EnviaComando(0x0C); // Pantalla activada, cursor apagado, parpadeo apagado
EnviaComando(0x01); // Limpiar pantalla
}
void loop() {
ColocarCursor(0, 0); // Coloca cursor en la primera linea primera columna
ImprimirEnLCD("Hola Mundo");
ColocarCursor(1, 0); // Coloca cursor en la primera linea primera columna
ImprimirEnLCD("Alexis");
delay(1000);
EnviaComando(0x01); // Limpiar pantalla
ColocarCursor(0, 1); // Coloca cursor en la primera linea tercera columna
ImprimirEnLCD("Cuento solo");
ColocarCursor(1, 2); // Coloca cursor en la primera linea tercera columna
ImprimirEnLCD("wow");
delay(1000);
EnviaComando(0x01); // Limpiar pantalla
ColocarCursor(0, 3); // Coloca cursor en la primera linea cuarta columna
ImprimirEnLCD("Ya termine");
ColocarCursor(1, 4); // Coloca cursor en la segunda linea quinta columna
ImprimirEnLCD("va de nuez");
delay(1000);
EnviaComando(0x01); // Limpiar pantalla
}
void EnviaComando(byte comando) {
digitalWrite(RS, LOW); // RS en bajo para habilitar envío de comandos
EnviarDatos(comando);
}
void ImprimirEnLCD(char mensaje[]) {
digitalWrite(RS, HIGH); // Set RS pin high for data mode
byte i = 0;
while (mensaje[i] != '\0') {
EnviarDatos(mensaje[i]);
i++;
}
}
void EnviarDatos(byte data) {
for(byte i = 2; i < 10; i++){
digitalWrite(pines[i], (data >> (i-2)) & 0x01);
}
PulsoEnable();
}
void PulsoEnable() {
digitalWrite(EN, LOW);
delayMicroseconds(1);
digitalWrite(EN, HIGH);
delayMicroseconds(1);
digitalWrite(EN, LOW);
delayMicroseconds(2);
}
void ColocarCursor(int linea, int columna) {
byte LineasOffset[] = {0, 0x40};
byte posicionCursor = 0x80 + LineasOffset[linea] + columna;
EnviaComando(posicionCursor);
}