Commonly we show example of getting started with LCD with one LCD and some sensor, like we have guide on Arduino Temperature & Humidity Sensor DHT 11 With LCD 1602A. We Can Easily Run Two to Four 16×2 LCDs On Arduino UNO. In This Article, We Will Supply Same Code and Diagram For Running Multiple LCD Displays On One Arduino UNO. Basic matter is that, when we use LCD without I²C module then it occupies lot of pins. For making easy around basic theory, we discussed about Serial Peripheral Interface, I²C etc topics and shown example setup of 1602A LCD Display I2C Serial Interface. The solution to run multiple LCDs at the same time probably obvious by now – using I²C module. But without I²C module it is also possible to use multiple LCD displays, that is by sharing some of the pins.
Code and Connection To Run Multiple LCD Displays On One Arduino UNO
Using I²C LCD module it is quite easy. I²C LCD module has only two unique pins per module – SDA and SCL. Code will be like this :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <Wire.h> //Include Wire.h library #include <LiquidCrystal_I2C.h> //Include LiquidCrystal_I2C.h library LiquidCrystal_I2C lcd1(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // address of lcd1 in our definition is 3x0F LiquidCrystal_I2C lcd2(0x3D, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // address of lcd2 in our definition is 3x0D void setup() { lcd1.begin(16,2); lcd1.backlight(); lcd2.begin(16,2); lcd2.backlight(); } void loop() { lcd1.setCursor(0,0); lcd2.setCursor(0,0); lcd1.print("Display 1"); / lcd2.print("Display 2"); delay(1000); lcd1.setCursor(0,1); lcd2.setCursor(0,1); lcd1.print("Remember"); lcd2.print("JiMA.in"); } |
You will clearly see two different prints on two different displays.
---
Without I²C module same thing is also possible. First look at “Hello World” example :
1 | https://www.arduino.cc/en/Tutorial/HelloWorld |
From that :
1 2 3 4 | ... const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); ... |
…means :
1 2 3 4 | ... const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); ... |
Let us rearrange the connection pins :
1 2 3 | ... LiquidCrystal lcd(12, 5, 7, 8, 9, 10); ... |
We can have 2 or 3 or 4 LCD sharing some pins with one unique :
1 2 3 4 5 6 | ... LiquidCrystal lcd1(12, 5, 7, 8, 9, 10); LiquidCrystal lcd2(12, 4, 7, 8, 9, 10); LiquidCrystal lcd3(12, 3, 7, 8, 9, 10); LiquidCrystal lcd4(12, 2, 7, 8, 9, 10); ... |
Pin 7, 8, 9 and 10 on the Arduino for the data. Pin 12 for RS. Pin 2, 3, 4 and 5 for the signal for display. You can use one common potentiometer. Idea of using four displays is from this website :
1 | https://www.hackmeister.dk/2010/08/4-lcd-displays-on-1-arduino/ |
Working proof that it works :
Code will go like this :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <LiquidCrystal.h> LiquidCrystal lcd1(12, 5, 7, 8, 9, 10); LiquidCrystal lcd2(12, 4, 7, 8, 9, 10); LiquidCrystal lcd3(12, 3, 7, 8, 9, 10); LiquidCrystal lcd4(12, 2, 7, 8, 9, 10); void setup() { lcd1.begin(16, 2); lcd2.begin(16, 2); lcd3.begin(16, 2); lcd4.begin(16, 2); // 1, 2 3, 4 are printed on displays lcd1.print("1"); lcd2.print("2"); lcd3.print("3"); lcd4.print("4"); } void loop() { lcd1.setCursor(0, 1); lcd2.setCursor(0, 1); lcd3.setCursor(0, 1); lcd4.setCursor(0, 1); lcd1.print(millis()/1); lcd2.print(millis()/10); lcd3.print(millis()/100); lcd4.print(millis()/1000); } |