В данном проекте мы расскажем вам, кто подключить два ЖК-дисплея 16x2 вместе к одной плате Arduino. Такая конфигурация во многом бывает полезной, когда нужно, например, выводить большие массивы информации, или когда неопходимо показывать одну и ту же информацию в разных местах или под разными углами.

В данном случае мы реализовали проект так, чтобы текст, который будет выведен на один ЖК-дисплей, будет автоматически переведен на другой ЖК-дисплей. Общее количество контактов, которые необходимо подключить к ЖК-дисплею 16x2 от Arduino Nano, является 12.
Когда мы подключаем два ЖК-дисплея с общим количеством, то это количество будет систавлять 24. В рамках ЖК-дисплея 16x2 6 выводов используется для передачи данных. В нашем случае мы только подключили 14 линий ЖК-дисплея с Arduino Nano, в котором 12 контактов используется для передачи данных.
Принципиальная схема подключения показана на следующем рисунке.

Код программы Arduino для управления двумя LCD-дисплеями приведен далее.
#include <LiquidCrystal.h>
LiquidCrystal lcd2(12, 11, 1, 2, 3, 4);
LiquidCrystal lcd1(0, 10, 8, 7, 6, 5);
char * LargeText = "Connecting 2 - 16*2 LCD with Arduino";
int iLineNumber = 1;
int iCursor = 0;
void setup()
{
lcd1.begin(16, 2);
lcd2.begin(16, 2);
lcd1.clear();
lcd2.clear();
}
void loop()
{
UpdateLCDDisplay();
delay(160);
lcd1.clear();
lcd2.clear();
delay(60);
}
void UpdateLCDDisplay()
{
int iLenOfLargeText = strlen(LargeText);
if (iCursor == (iLenOfLargeText - 1) )
{
iCursor = 0;
}
lcd1.setCursor(0,iLineNumber);
lcd2.setCursor(0,iLineNumber);
if(iCursor < iLenOfLargeText - 32)
{
for (int iChar = iCursor; iChar < iCursor + 16 ; iChar++)
{
lcd1.print(LargeText[iChar]);
}
for (int iChar = iCursor + 16 ; iChar < iCursor + 32 ; iChar++)
{
lcd2.print(LargeText[iChar]);
}
}
else
{
for (int iChar = iCursor; iChar < (iLenOfLargeText - 1) ; iChar++)
{
if(16 > (iChar - iCursor))
{
lcd1.print(LargeText[iChar]);
}
else
{
lcd2.print(LargeText[iChar]);
}
}
for (int iChar = 0; iChar <= 32 - (iLenOfLargeText - iCursor); iChar++)
{
if(16 > (32 - (iLenOfLargeText - iCursor)))
{
lcd2.print(LargeText[iChar]);
}
else
{
if( ((32 - (iLenOfLargeText - iCursor)) - 16) >= iChar)
{
lcd1.print(LargeText[iChar]);
}
else
{
lcd2.print(LargeText[iChar]);
}
}
}
}
iCursor++;
}
© digitrode.ru