Estoy empezando en esto del mundo arduino, y necesitaría consejo de alguien más experto para la siguiente duda.
Seria posible controlar 2 LCD (4x20 en este caso) con una sola placa por i2c??
He visto que la Leonardo tiene 2 puertos i2c. Podria usarlos para conectar cada una de ellas y comunicarlas sin mas?
Y en las placas que solo tienen una salida i2c. Podria crear un bus entre el arduino y las 2 LCDs puenteandolos en paralelo (con sus correspondientes resistencias)? Como tendría entonces que asignar direcciones de memoria a los elementos del bus i2c (en este caso las LCD) para escribir en la correspondiente?
Bueno esta claro que partes de un error conceptual. I2C es un protocolo que permite manejar muchos dispositivos direccionándolos de modo que usar dos puertos i2C es para otros casos.
Cada dispositivo se direcciona con un address (dirección de 3 bits) de modo que si modificas la dirección de los dos LCDs no vas a tener problemas. Aparecen como A0 A1 y A2 y normalmente estan fijos en los módulos como el que mencionas. Pero tienen la opción de poder ajustarse a otra configuración.
Como no pusiste de que módulo hablamos no puedo decirte como configurarlo.
Busca las direcciones que te expliqué y lo vemos.
Si por módulo te refieres a la placa de arduino a usar, no lo tengo muy claro. He estado leyendo y creo que la Arduino Due se adapta bien a lo que quiero hacer ( el proyecto sería unos marcadores para un circuito de scalextric, en el que por cada LCD se muestra el numero de vueltas, velocidad y mejor vuelta de cada jugador). Además controlo una serie de leds que quiero poner en una recta que se vayan encendiendo consecutivamente cada 250ms. Con lo que necesito 15 salidas digitales (de sobra con la arduino Due).
El problema que tengo es como controlar dichas LCD con la Due. Según me dices, bastaría con poner diferentes direcciónes hardware en las LCD, es así? O dicha dirección se configura por software?
Y de que manera me comunicaría con cada una de ellas en el código?? Es decir, como le indico al programa a que LCD debe mandar los datos?
Gracias por tu tiempo y ayuda, y perdón de nuevo. Soy bastante novato.
En el link (en el que no usaste tags asi que intenta editarlo para que se vea como indica las reglas del foro), se menciona la dirección I2C Address: 0x27
Este modulo transforma cualquier LCD para ser usado via i2C y como lees permite cambiar la dirección de 0x20 (que es la que viene por defecto) hasta 0x27 asi que resuelto tu problema
Pero sigo con la duda de como hago para mostrar los datos en una u otra, es decir, como debo decirle al programa que envíe los datos a una dirección (LCD1) o a otra (LCD2)
Ahh es muy facil, cuando veas la librería LCD_I2C entenderás como funciona. Te paso un ejemplo
Aca un ejemplo como el que vas a usar.
En este ejemplo se configuran dos LCDs de 16x2 caracteres y dirección 0x20 para el primero.
Y luego definí otro como lcd2 en la dirección 0x21.
Tranquilamente puedes definir un LCD de 20x4 si quieres.
/*
* Displays text sent over the serial port (e.g. from the Serial Monitor) on
* an attached LCD.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd1(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd2(0x21,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
void setup()
{
lcd1.init(); // initialize the lcd
lcd1.backlight();
lcd2.init(); // initialize the lcd
lcd2.backlight();
Serial.begin(9600);
}
void loop()
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd1.clear();
lcd2.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd1.write(Serial.read()); // repito el caracter enviado por serial en ambos lcd's
lcd2.write(Serial.read());
}
}
}