2 дисплея на одной Arduino UNO R3.

Dmitry707
Offline
Зарегистрирован: 15.04.2015

Доброе время суток господа. Ситуация такая. У меня имеется:

1) Arduino UNO R3

2) LCD TFT 2.4

3) ЖК дисплей 16x2

Два дисплея подключенны к ардуино, ЖК дисплей подключен к отдельным портам (SDA,SCL, т.к. A4, A5 заняты TFT дисплеем. Хочетлось бы реализовать работу так: при нажатие на кнопку на TFT дисплее, выводиться иформация на ЖК дисплей.  
--------------------------------------------------------

 if (p.y > 170 && p.z >300)  // Условие нажатие кнопки на TFT
  {
    tft.drawRect(0, 170, BOXSIZE, 35, WHITE); 
    delay(500);
    tft.fillCircle (120, 160, 100, BLACK);
    lcd.clear(); // Стирает пред. текст на ЖК дисплее
    lcd.print("Test B1 OK");  // Вывод нового текста
-----------------------------------------------------------
 
Суть такая, что при нажатие, информация выводиться на ЖК, но все стирается на TFT. Хотелось бы что-бы стиралось только с ЖК и перезаписовалось новым текстом.
 
Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

lcd.clear(); - срабатывает на каком дисплее? Или на обеих?

Dmitry707
Offline
Зарегистрирован: 15.04.2015

Tomasina пишет:

lcd.clear(); - срабатывает на каком дисплее? Или на обеих?

lcd.clear(); Правильно срабатывает на lcd 1602, но и заодно очищает tft, чего по сути быть не должно. Есть одна мысль, сразу извиняюсь я не профи в этом.

Выходить так, что LCD TFT подключен к A4 и A5 (Что и есть SDA и SCL), также на Arduino R3, есть дополнительные входы SDA и SCL, куда я подключил LCD 1602. А коде у меня объявления такие:

1. LiquidCrystal_I2C lcd2(0x27,2,1,0,4,5,6,7);

2. Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

 #define LCD_CS A3

#define LCD_CD A2

#define LCD_WR A1

#define LCD_RD A0
#define LCD_RESET A4
 
Выходить, может я просто объявил двум экранам, одни и те же порты?
Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

По подключению:
Если оба дисплея I2C (т.е. для каждого обязательно нужны пины SDA и SCL), то они должны быть подключены к одним и тем же пинам. Но судя по LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET это не так. Тогда для TFT просто переназначь другие пины, чтобы они не пересекались.

По коду:
похоже, в обеих библиотеках используется одинаковая команда lcd.clear();
Выхода два:

а) заменить ручками в библиотеке для TFT все упоминания lcd.clear на tft.clear. Чревато тем, что после библа может не заработать :)
б) использовать псевдоочистку экрана:
для TFT: 
tft.fillScreen(BLACK);
для LCD: lcd.setCursor(0,0); lcd.print("                "); lcd.setCursor(0,1); lcd.print("                "); // 16 пробелов

maksim
Offline
Зарегистрирован: 12.02.2012

Dmitry707 пишет:

Выходить, может я просто объявил двум экранам, одни и те же порты?

Выходить

Dmitry707 пишет:

LCD TFT подключен к A4 и A5 (Что и есть SDA и SCL)

#define LCD_RESET A4