Antes de empezar a trabajar, necesitaremos:
Debes saber que:
/* * Name: escaneoI2C * Vers: v0.1alfa * Date:27/03/2019 * Auth: FJRAC * Lang: Spanish * Descripción: * Escaneo de los dispositivos I2C conectados * Monitorización por USB * Emplea librería Wire.h */#include <Wire.h> void setup() { Serial.begin(9600); while(!Serial); Serial.println("Comunicando por USB"); Wire.begin(); Serial.println("Escaneando dispositivos/direcciones I2C..."); }void loop() { int direccion, error; int nDispositivosEncontrados; nDispositivosEncontrados=0; for(direccion=1; direccion<127;direccion++){ Wire.beginTransmission(direccion); error=Wire.endTransmission(); //Si cero encuentra, si no no if(error==0){ Serial.print("Encontrado dispositivo en 0x"); if(direccion<16) Serial.print("0"); Serial.println(direccion,HEX); nDispositivosEncontrados++; } else { Serial.print("."); } delay(1000); } Serial.print(nDispositivosEncontrados); Serial.println(" dispositivos encontrados");}En este caso, desde el monitor USB, el resultado es:
/* * Name: pantalla1602 * Vers: v0.1alfa * Date: 27/03/2019 ddmmyyyy * Auth: FJRAC * Lang: Spanish * Descripción: * Plantilla y ejemplo de funcionamiento de la pantalla * LCD 1602 por I2C que se monitoriza por USB * Librerías necesarias * Wire.h --> para el driver I2C * LiquidCrystal_PCF8574.h (v1.1.0)--> para la pantalla * https://github.com/mathertel/LiquidCrystal_PCF8574/blob/master/keywords.txt * Objeto * LiquidCrystal_PCF8574 pantalla(dirección 0xdd) ->creas en la dirección * En setup() * Wire.begin() -->Config. comunicación I2C maestro (Arduino) * Wire.beginTransmission(0x27)-->inicio comunicación con LCD en dirección * Hexadecimal 0x27 * Si se recibe endTransmission() --> no encuentra la pantalla * Si se encuentra la LCD --> pantalla.begin(caracteres,lineas); * Funciones * .clear() --> borra la pantalla * .setBacklight(n) --> "n" de 0 a 255 retroiluminación * .home() -----------> cursor al primer caracter, primera linea * .setCursor(caracter,linea) ---> Coloca el cursor * .print(["texto a mostrar"]) --> Como en Serial * .createChar(posicionMemoria,varMapaPixeles)--> crea un símbolo/caracter pixel * a pixel en la posición de memoria * .write(byte(posicionMemoria)) --> Escribe el caracter de la posición de memoria * ASCII + los creados. * .display() -------------------> texto visible * .noDisplay() -----------------> texto invisible * .blink() ---------------------> cursor parpadeando * .noBlink() -------------------> cursor fijo * .scrollDisplayLeft() --> mueve texto hacia la izquierda * .scrollDisplayRight()--> mueve texto hacia la derecha * * Los caracteres/símbolos son de 5x8 píxeles definibles * por variable * byte sonrie[8] = { B00000, B10001, B00000, B00000, B10001, B01110, B00000, }; * Crear caracter en memoria en posición 0 lcd.createChar(0, sonrie); * Escribir el caracter/simbolo lcd.write(byte(0)); */#include <Wire.h>#include <LiquidCrystal_PCF8574.h>LiquidCrystal_PCF8574 lcd(0x3F); //Creamos el objeto en la dirección 0x3Fbyte sonrie[8] = { B00000, B10001, B00000, B00000, B10001, B01110, B00000, };void setup() { Serial.begin(9600); while(!Serial); Serial.println("1.-Conectado por USB"); Wire.begin(); //Arduino Master Wire.beginTransmission(0x3F); //LCD Slave en direccion 0x27 if(Wire.endTransmission()==0){ Serial.println("2.-Conectado a LCD"); lcd.createChar(0,sonrie); lcd.begin(16,2); //Configura la pantalla a 16caracteres y 2 lineas } else{ Serial.println("No encontrada la pantalla LCD en 0x3F"); } lcd.setBacklight(100); lcd.home(); lcd.print("Conexion con LCD"); lcd.setCursor(0,1); lcd.write(byte(0)); delay(5000);}void loop() { int posicion; posicion=0; lcd.clear(); while(Serial.available()){ char c=Serial.read(); lcd.setCursor(posicion,0); lcd.print(c); posicion++; } delay(100);}Modificaciones:
//Solución 1 for(posicion=0;posicion<16;posicion++){ lcd.clear(); //1.-Borro la pantalla lcd.setCursor(posicion,0); //2.-situo el cursor(columna,fila)=>(posicion horizontal,1ªfila) lcd.write(byte(0)); //3.-Dibujo mi símbolo de la posición de memoria 0 delay(500); //4.-Lo mantengo 0,5s } //Solución 2 .scrollDisplayRight()--> mueve texto hacia la derecha lcd.clear(); //1.-Borro la pantalla lcd.setCursor(0,0); //2.-Situo el cursor en la posicion 0 de la 1ª fila lcd.write(byte(0)); //3.-Dibujo el símbolo que está guardado en la dirección de memoria 0 for(posicion=0;posicion<16;posicion++){ delay(500); //4.-Espero 0,5s lcd.scrollDisplayRight(); //5.-Muevo hacia la derecha }