#define RS 5
#define E 17
#define D4 23
#define D5 22
#define D6 21
#define D7 19
void sendNibble(byte nibble) {
// Asignar los 4 bits del nibble a los pines D4 a D7
digitalWrite(D4, (nibble >> 0) & 0x01);
digitalWrite(D5, (nibble >> 1) & 0x01);
digitalWrite(D6, (nibble >> 2) & 0x01);
digitalWrite(D7, (nibble >> 3) & 0x01);
// Activar la señal de habilitación (E) para que el LCD procese los datos
digitalWrite(E, HIGH);
delayMicroseconds(100); //pausa para que el LCD lea los datos
digitalWrite(E, LOW);
delayMicroseconds(100); //Pausa para que el LCD procese
}
// Función para enviar un byte (8 bits) al LCD
void sendByte(byte data, bool isData) {
digitalWrite(RS, isData); // Si es un dato, RS en HIGH, si es comando, RS en LOW
// Enviar el nibble alto (los 4 bits más significativos)
sendNibble(data >> 4);
// Enviar el nibble bajo (los 4 bits menos significativos)
sendNibble(data & 0x0F);
}
void setup(){
// Configuramos los pines como salidas
pinMode(RS, OUTPUT);
pinMode(E, OUTPUT);
pinMode(D4, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
//iniciar la pantaña LCD
sendNibble(0b0011); //enviar 3
delay(10);
sendNibble(0b0011); //enviar 3
delay(10);
sendNibble(0b0011); //enviar 3
delay(10);
sendNibble(0b0010); //enviar 2
delay(10);
sendNibble(0b0010); //enviar 2
delay(10);
sendNibble(0b1000); //enviar 8
delay(10);
sendNibble(0b0000); //enviar 0
delay(10);
sendNibble(0b1111); //enviar F o 15
delay(10);
sendNibble(0b0000); //enviar 0
delay(10);
sendNibble(0b0001); //enviar 1
delay(10);
sendNibble(0b0000); //enviar 0
delay(10);
sendNibble(0b0110); //enviar 6
delay(10);
// Mostrar "No me regañe" en la primera línea
sendByte(0b01001110, true); // 'N'
sendByte(0b01101111, true); // 'o'
sendByte(0b00100000, true); // Espacio
sendByte(0b01101101, true); // 'm'
sendByte(0b01100101, true); // 'e'
sendByte(0b00100000, true); // Espacio
sendByte(0b01110010, true); // 'r'
sendByte(0b01100101, true); // 'e'
sendByte(0b01100111, true); // 'g'
sendByte(0b01100001, true); // 'a'
sendByte(0b01101110, true); // 'n'
sendByte(0b01100101, true); // 'e'
//Desplazer a la segunda Linea
sendByte(0b11000000, false);
// Mostrar "ilústreme" en la segunda línea
sendByte(0b01101001, true); // 'i'
sendByte(0b01101100, true); // 'l'
sendByte(0b01110101, true); // 'u'
sendByte(0b01110011, true); // 's'
sendByte(0b01110100, true); // 't'
sendByte(0b01110010, true); // 'r'
sendByte(0b01100101, true); // 'e'
sendByte(0b01101101, true); // 'm'
sendByte(0b01100101, true); // 'e'
}
void loop() {
// No se requiere código adicional en el bucle
}