Первое использование Kuman 3,5-дюймового TFT-экрана модели SC3A-NEW-UK с Arduino
Я купил онлайн этот ЖК-сенсорный экран Kuman SC3A-NEW-UK. Он использует драйверы ILI9486, но не содержит инструкции по эксплуатации, а на сайте kumantech.com отсутствует полная техническая документация по модели SC3A-NEW-UK.
Я пытаюсь выяснить:
- Каковы минимальные соединения, которые я должен установить между Arduino UNO и ЖК-экраном?
- Какую библиотеку "Arduino's C++" (AKA G++?) мне нужно использовать для программного отображения информации
Подводя итоги
На всякий случай, если это не было заметно: я пытаюсь сделать «Hello World» для сенсорного ЖК-экрана моего SC3A-NEW-UK из платы Arduino UNO. Другими словами: просто напечатайте «Hello World», чтобы проверить, работает ли это.
Что я уже пробовал
Поиска в Интернете было недостаточно. Поиск «ILI9486» в Google привел меня к этому проекту Github:
https://github.com/schreibfaul1/ESP32-TFT-Library-ILI9486
Чтобы узнать, могу ли я его использовать, я попытался загрузить весь ZIP-файл из этого проекта Github, а в Arduino IDE я попытался добавить загруженную библиотеку, используя параметр «Включить библиотеку .ZIP». Если я скопирую и вставлю пример кода из README.md (следующий) и скомпилирую:
#include "Arduino.h"
#include "SPI.h"
#include "tft.h"
// значения по умолчанию можно изменить в tft.begin
// CS=22, DC=21, MOSI=23, MISO=19, SCK=18
TFT tft;
//------------------------------------------------ -------------------------------------
void setup() {
SPI.begin();
tft.begin();
tft.setRotation(1); //пейзаж
tft.fillScreen(TFT_BLACK);
tft.setFont(Garamond34x42);
tft.setTextColor(TFT_CYAN);
tft.setCursor(20,30);
tft.print("Hello World!");
}
//------------------------------------------------ -------------------------------------
void loop(void) {
for(uint8_t rotation=0; rotation<4; rotation++) {
tft.setRotation(rotation);
tft.fillScreen(TFT_BLACK);
tft.setCursor(20,30);
tft.print("Hello World!");
delay(3000);
}
}
//------------------------------------------------ -------------------------------------
... это приводит к этой ошибке компиляции:
In file included from C:\Users\MyUser\ArduinoProjects\test_external_library\test_external_library.ino:3:0:
C:\Users\MyUser\Documents\Arduino\libraries\Arduino-TFT-Library-ILI9486-master\src/tft.h:5:16: fatal error: FS.h: No such file or directory
compilation terminated.
exit status 1
Error compiling for board Arduino/Genuino Uno.
Строка 5 в tft.h
говорит:
#include "FS.h"
... и я понятия не имею, что это за библиотека FS, поэтому я не думаю, что вообще смогу использовать этот проект Github... У меня возникает соблазн предположить, что проект Github мертв.
Итак, возможно, мне достаточно использовать встроенную в IDES библиотеку TFT
, например, вот так? Я не знаю...:
#include <SPI.h>
#include <TFT.h>
#define CS 10
#define DC 9
#define RESET 8
#define TFT_CYAN 0x07FF
#define TFT_BLACK 0x0000
// Инициализация вдохновлена примером кода, найденным по адресу
// https://www.arduino.cc/en/Guide/TFT
TFT tft = TFT(CS, DC, RESET);
int dummy_second_cnt = 0;
void setup() {
// Я все равно не знаю, для чего нужен SPI...
// только что нашел его в примере кода, представленном в README.md библиотеки GitHub
// ...(который я не пытаюсь использовать в данный момент, так что он бесполезен в этом примере кода... на всякий случай закомментирован для справки)
//SPI.begin();
tft.begin();
tft.background(0,0,0);
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_CYAN);
tft.setCursor(20,30);
tft.print("Hello LCD Screen");
delay(3000);
}
void loop() {
tft.fillScreen(TFT_BLACK);
tft.setCursor(20,30);
tft.print("Seconds: ");
tft.print(dummy_second_cnt);
dummy_second_cnt++;
delay(1000);
}
Это скомпилировано в Arduino IDE, без проблем, но я до сих пор не знаю, будет ли это хорошо работать с моим экраном. Я также не понимаю инициализацию объекта TFT и то, как мне это сделать. подключить ЖК-экран к Arduino в зависимости от этой инициализации:
TFT tft = TFT(CS, DC, RESET);
...я имею в виду, что на моем ЖК-экране есть контакты CS и RESET, но что здесь должен быть DC? (в этом контексте я не думаю, что это означает «Прямой ток»… но на моем ЖК-экране нет обозначения контакта постоянного тока, написанного «КАК ЕСТЬ»… ?? Это еще больше запутывает меня...
... особенно имея в виду, что я еще не знаю, как мне подключить ЖК-экран к Arduino. Кажется, что контакты ЖК-дисплея были спроектированы так, чтобы вставляться непосредственно в плату Arduino, не слишком задумываясь об этом (например, форма такая же), но это заставило бы экран получить все контакты Arduino UNO для себя, так что я не знаю я так не думаю...
Это контакты LCD_*
, присутствующие на моем ЖК-экране:
- LCD_RST (наверное, сброс)
- LCD_CS
- LCD_RS
- LCD_WR (напишите, наверное)
- LCD_RD (наверное, прочитано)
(и следующие, я думаю, 8-битные цифровые контакты):
- LCD_D0
- ЖК-D1
- ЖК-D2
- ЖК-D3
- ЖК-D4
- ЖК-D5
- ЖК-D6
- ЖК-D7
Он также имеет контакты 5V, 3V3 и GND (которые, я думаю, для питания)
... Итак, питание экрана не должно иметь большого значения, но как мне подключить все остальное? Я совершенно не понимаю, как я должен взаимодействовать с экраном из кода Arduino... для чего нужен вывод RS? Должен ли я использовать 4-битный или 8-битный режим? (Я думаю, что 4-битное означает подключение 4 цифровых контактов для экрана, а 8-битное — все 8 контактов от экрана к плате Arduino UNO)? Должен ли я использовать LCD_RD и LCD_WR? Ну, у вас есть картина моего замешательства.
Поиск документации в Интернете привел только к частичным примерам. Даже не используя номер модели ( SC3A-NEW-UK ) или номер драйвера ( ILI9486 ) в качестве ключевых слов для поиска в Google, я не нахожу четкой документации о том, как связать вещи или какие конкретные библиотеки мне следует использовать...
Несмотря на то, что я знаю, как управлять вводом/выводом в коде Arduino для взаимодействия с аналоговыми/цифровыми входными и выходными контактами по желанию с C++ в коде Arduino (но даже в этом случае я думаю, что я все еще Arduino n00b), это Физический интерфейс ЖК-экрана меня очень смущает...
Можете ли вы помочь мне преодолеть эту путаницу, пожалуйста? Я бы предпочел очистить свой разум, прежде чем делать какие-либо физические соединения и что-то жарить...
PD: Я где-то читал, что этот сенсорный экран SC3A-NEW-UK предназначен для защиты плат Arduino MEGA (путем установки PIN-кодов непосредственно в него), но у меня плата Arduino UNO! (возможно, тогда мне не стоило покупать эту модель ЖК-дисплея?)... но у меня есть наборы проводов, платы и прочее... Я не хочу отказываться от идеи использовать этот ЖК-экран с помощью Arduino UNO. . Меня не волнует функция экранирования, я просто хочу подключить ее и заставить ее работать. Позже я придумаю, как экранировать электронику.
ИЗМЕНИТЬ: Основываясь на ответе VE7JRO, мне удалось сопоставить соединения, увидев, куда они пойдут, если я просто подгоню соединения, экранирующие Arduino UNO, как предложил VE7JRO:
+--------------+------------------+
| Arduino UNO | LCD Screen |
+--------------+------------------+
| GND | GND |
+--------------+------------------+
| 5V | 5V |
+--------------+------------------+
| 3.3V | 3.3V |
+--------------+------------------+
| A0 | LCD_RD |
+--------------+------------------+
| A1 | LCD_WR |
+--------------+------------------+
| A2 | LCD_RS |
+--------------+------------------+
| A3 | LCD_CS |
+--------------+------------------+
| A4 | LCD_RST |
+--------------+------------------+
| A5 | NONE |
+--------------+------------------+
| 8 | LCD_D0 |
+--------------+------------------+
| 9 | LCD_D1 |
+--------------+------------------+
| 2 TO 7 | LCD_D2 TO LCD_D7 |
+--------------+------------------+
| 10 | SD_SS |
+--------------+------------------+
| 11 | SD_DI |
+--------------+------------------+
| 12 | SD_DO |
+--------------+------------------+
| 13 | SD_SCK |
+--------------+------------------+
Я поставил NONE
для ввода A5, потому что на этом выводе ЖК-экрана нет имени. Есть и другие безымянные, которые я не включил в эту таблицу. Я считаю (возможно, я ошибаюсь, полагая, я не знаю), что эти контакты без названия бесполезны.
Плохо в этой схеме то, что она потребляет почти все контакты Arduino, поэтому я не смогу подключить дополнительные схемы. Однако, возможно, мне пока не стоит беспокоиться о подключении, прежде чем тестировать экран.
Я до сих пор не знаю многих подробностей о том, какие контакты для чего предназначены для экрана, но я где-то читал, что от LCD_D0
до LCD_D7
предназначены для приема цифровых данные в каком-то 8-битном параллельном режиме. Но я также слышал, что есть 4-битный режим. Если бы я мог использовать этот режим с этим экраном, у меня было бы 4 свободных цифровых контакта для чего-то еще...
Хорошо, соединения сопоставлены. Следующим шагом будет попытка использовать те три библиотеки, которые предложил VE7JRO.
EDIT2: Я протестировал код VE7JRO. ЖК-экран нарисовал интерфейс, как и ожидалось. Но кнопки не реагировали. Я обнаружил, что образец кода нуждается в дальнейшей калибровке.
Итак, я начал печатать через Serial координаты объекта TSPoint p
, чтобы выяснить, не ошибся ли с координатой z
. И действительно, было: настройка MINPRESSURE
и MAXPRESSURE
в соответствии с тем, что я видел в Serial Monitor, пока нажимал и не нажимал, исправил это. Однако есть еще одна проблема...
... когда я говорю Serial печатать, если логическая операция down && on_btn.contains(pixel_x, pixel_y)
приводит либо к true
, либо к false
, он печатает false... пока я нажимаю кнопку ON. down
точно верно (после калибровки констант MINPRESSURE
и MAXPRESSURE
); это должно означать, что on_btn.contains(pixel_x, pixel_y)
по какой-то причине возвращает false. Если я выясню почему, я смогу добиться того, чтобы кнопка ON что он должен делать, когда я нажимаю его. И это будет означать, что я завершу процесс калибровки. Могу поспорить, что, возможно, pixel_x
и pixel_y
нуждаются в калибровке, как я уже делал с определением давления на основе z
; или, возможно, метод contains
ненадежен, и мне нужно найти какую-то другую методологию... Я скажу вам после того, как попробую
Все перечеркнутые линии основаны на предположении, что Z — это глубина, а Y — высота; На самом деле, похоже, все наоборот...
После некоторых исследований методом проб и ошибок оказалось, что Z – это высота, а Y – глубина (по крайней мере, в пределах свойств объекта TSPoint
x
, y
и z
, значения которых кажутся более надежными, чем значения pixel_x
и pixel_y
. содержится в квадратах кнопки и больше ни в чем)... Я до сих пор не понимаю, зачем нужно использовать это внутри функции Touch_getXY(void)
:
if (pressed) {
pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width()); //.kbv имеет смысл для меня
pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
}
...потому что их значения, когда я касаюсь экрана стилусом, очень странные. Я пытался угадать, на какие диапазоны они идут, и они не имеют смысла, когда я перемещаюсь по экрану. Возможно, это из-за этого странного отображения "Z вместо Y" из объекта TSPoint
. Возможно, pixel_x
и pixel_y
не должны иметь интуитивного смысла, возможно, это просто какая-то запутанная внутренняя логика, которая имеет смысл только в рамках низкоуровневой области электроники, или в методе Adafruit_GFX_Button.press
, я не знаю... но x
, y
и z
показания объекта TSPoint
кажутся очень точными, несмотря на то, что Y равно Z, а Z равно Y...
... возможно, чтение любой документации, которую я могу найти о классе Adafruit_GFX_Button
, его свойствах и методах (особенно contains
), поможет мне ясно понять, что не так...
...также, возможно, пришло время сосредоточиться на поиске тех тестовых скетчей, о которых мне рассказывал VE7JRO:
К библиотеке MCUFRIEND_kbv прилагается 22 тестовых скетча. Один из них сканирует ваш дисплей и выводит информацию о конфигурации (извините, я давно не тестировал свой экран). Другой скетч нарисует маленькие квадратики в каждом углу и по бокам. Это используется для получения координат xy краев вашего конкретного экрана (это может называться TouchScreen_Calibr_native.ino).
Обновление3
Х есть Y? Y это Z? Z это Х? Больше не знаю, что и думать! В последний раз я пытался изменить формулу для pixel_x
и pixel_y
на:
pixel_x = map(p.x, 1023, 0, 0, tft.width());
pixel_y = map(p.y, 1023, 0, 0, tft.height());
...и константы для пинов:
const int XP = 6, XM = A2, YP = A1, YM = 7;
Кажется, это делает z
осью давления внутри объекта TSPoint
, но приводит к странному поведению:
x
кажется онемевшим (независимо от того, нажимаю ли я сенсорный экран стилусом или нет, ни его положение: он всегда печатает от 65 до 70!z
кажется действительно чувствительным к давлению касания, но как будто его чувствительность различается в зависимости от положения сенсорного пера на экране (хотя я не робот, я думаю Я использовал примерно такое же усилие рукой). Он печатает 0, когда я не касаюсь экрана.y
Кажется разумным и для горизонтального, и для вертикального положения одновременно! Это сносит мне голову.
Я уже не знаю, что и думать...
- Может, я что-то накосячил из-за того, что не обращал внимания на константы скрипта в предыдущих тестах?
- Был ли экран сломан с самого начала?
- Это ошибка калибровки со значениями в скрипте?
- Может быть, библиотеки, которые я использую, неисправны или в моем TFT есть какая-то ошибка?
Это становится намного сложнее, чем я думал...
...согласно какой-то статье, которую я нашел(на испанском, извините), параметры инициализации сенсорного экрана
:
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
XP
должен быть выводом дляLCD_D6
:6
в Arduino.YP
должен быть контактом дляLCD_WR
:A1
в Arduino.XM
должен быть выводом дляLCD_RS
:A2
в Arduino.YM
должен быть выводом дляLCD_D7
:7
в Arduino.- Предполагается, что пятый параметр представляет собой сопротивление, измеренное между
LCD_D6
иLCD_RS
при отключенном экране. К сожалению, мой мультиметр не может его измерить по какой-то причине (я поставил его в режим 2000 Ом для чтения сопротивления: я всегда получаю «1», так же, как и когда я ничего не подключаю ... например, если контакты мультиметра не работает хорошо, я не знаю)... поэтому я оставил значение по умолчанию 300.
Насколько мне известно, я инициализировал его правильно... за исключением пятого параметра. Будет ли неправильное значение сопротивления иметь такое большое значение в калибровке, вплоть до такого странного поведения, которое я видел?
Черт, я так близко... что я делаю не так?
@SebasSBM, 👍3
Обсуждение2 ответа
Какие минимальные соединения я должен установить между Arduino UNO? и ЖК-экран.
Экран TFT подключается прямо к плате Arduino Uno. У меня есть «более дешевая» модель с экраном того же размера и такими же контактами, как у вашего экрана (точно такой же текст, напечатанный рядом с контактами).
Прежде чем вы подключите его, у меня есть несколько советов.
- Возможна установка экрана на один или два контакта "не по назначению".
выравнивание", поэтому подключите его перед подачей питания. Проверьте правильность
контакты находятся в правильных «отверстиях», используя расположение
5V
,3V3
иGND
в качестве ориентира. - Этот экран потреблял много энергии, особенно когда вы используете тест. скетч, который включает/выключает все пиксели и циклически перебирает различные вывод графики/текста на экран. Регулятор напряжения моего Uno был довольно тепло через 10 минут, и я снабжал его 8 VDC на вход питания бочкообразного гнезда. Использование источника питания 12 В постоянного тока может усугубляют проблему перегрева, поэтому будьте осторожны.
Какую библиотеку Arduino's C++ (AKA G++?) мне нужно использовать, чтобы отображать материал программно?
Я использовал библиотеку MCUFRIEND_kbv
, библиотеку Adafruit_GFX
и библиотеку TouchScreen
Adafruit, все они доступны в диспетчере библиотек Arduino IDE.
С библиотекой MCUFRIEND_kbv
поставляется 22 тестовых скетча. Один из них сканирует ваш дисплей и выводит информацию о конфигурации (извините, я давно не тестировал свой экран). Другой скетч нарисует маленькие квадратики в каждом углу и по бокам. Это используется для получения координат xy краев вашего конкретного экрана (это может называться TouchScreen_Calibr_native.ino
).
Заставить экран отображать что-либо — это шаг 1. Шаг 2 — откалибровать края экрана. Шаг 3 – заставить работать сенсорный экран.
Вот скетч, который я использовал для тестирования экрана, изменив цвет «коробки». Прикосновение к каждой из 2 кнопок на экране меняет цвет «коробки». Я оставил все сохраненные данные конфигурации (см. конец этого скетча). Ваш экран отличается от моего, поэтому я бы начал сначала с тестовых скетчей из библиотеки.
// ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ/РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ СМОТРИТЕ ВНИЗУ СКЕТЧА.
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <TouchScreen.h>
#define MINPRESSURE 200
#define MAXPRESSURE 1000
// ВСЕ сенсорные панели и проводка РАЗНЫЕ
// скопируйте и вставьте результаты из TouchScreen_Calibr_native.ino
// OEM: const int XP = 6, XM = A2, YP = A1, YM = 7; //ID=0x9341
// OEM: const int TS_LEFT = 907, TS_RT = 136, TS_TOP = 942, TS_BOT = 139;
// МОЕ - РАБОТАЕТ.
const int XP = 7, XM = A1, YP = A2, YM = 6; //320x480 ID=0x9488
const int TS_LEFT = 929, TS_RT = 204, TS_TOP = 963, TS_BOT = 213;
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
Adafruit_GFX_Button on_btn, off_btn;
int pixel_x, pixel_y; //Touch_getXY() обновляет глобальные переменные
bool Touch_getXY(void)
{
TSPoint p = ts.getPoint();
pinMode(YP, OUTPUT); //восстанавливаем общие контакты
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //потому что управляющие контакты TFT
digitalWrite(XM, HIGH);
bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
if (pressed) {
pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width()); //.kbv имеет смысл для меня
pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
}
return pressed;
}
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
void setup(void)
{
Serial.begin(9600);
uint16_t ID = tft.readID();
Serial.print("TFT ID = 0x");
Serial.println(ID, HEX);
Serial.println("Calibrate for your Touch Panel");
if (ID == 0xD3D3) ID = 0x9486; // щит только для записи
tft.begin(ID);
tft.setRotation(0); //ПОРТРЕТ
tft.fillScreen(BLACK);
on_btn.initButton(&tft, 60, 200, 100, 40, WHITE, CYAN, BLACK, "ON", 2);
off_btn.initButton(&tft, 180, 200, 100, 40, WHITE, CYAN, BLACK, "OFF", 2);
on_btn.drawButton(false);
off_btn.drawButton(false);
tft.fillRect(40, 80, 160, 80, RED);
}
/* two buttons are quite simple
*/
void loop(void)
{
bool down = Touch_getXY();
on_btn.press(down && on_btn.contains(pixel_x, pixel_y));
off_btn.press(down && off_btn.contains(pixel_x, pixel_y));
if (on_btn.justReleased())
on_btn.drawButton();
if (off_btn.justReleased())
off_btn.drawButton();
if (on_btn.justPressed()) {
on_btn.drawButton(true);
tft.fillRect(40, 80, 160, 80, GREEN);
}
if (off_btn.justPressed()) {
off_btn.drawButton(true);
tft.fillRect(40, 80, 160, 80, RED);
}
}
/*
Read Registers on MCUFRIEND UNO shield
controllers either read as single 16-bit
e.g. the ID is at readReg(0)
or as a sequence of 8-bit values
in special locations (first is dummy)
reg(0x0000) 00 00 ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 54 80 66 Manufacturer ID
reg(0x0009) 00 00 61 00 00 Status Register
reg(0x000A) 00 08 Get Power Mode
reg(0x000C) 00 06 Get Pixel Format
reg(0x0061) 00 00 RDID1 HX8347-G
reg(0x0062) 00 00 RDID2 HX8347-G
reg(0x0063) 00 00 RDID3 HX8347-G
reg(0x0064) 00 00 RDID1 HX8347-A
reg(0x0065) 00 00 RDID2 HX8347-A
reg(0x0066) 00 00 RDID3 HX8347-A
reg(0x0067) 00 00 RDID Himax HX8347-A
reg(0x0070) 00 00 Panel Himax HX8347-A
reg(0x00A1) 00 93 30 93 30 RD_DDB SSD1963
reg(0x00B0) 00 00 RGB Interface Signal Control
reg(0x00B4) 00 02 Inversion Control
reg(0x00B6) 00 02 02 3B 3B Display Control
reg(0x00B7) 00 06 Entry Mode Set
reg(0x00BF) 00 00 00 00 00 00 ILI9481, HX8357-B
reg(0x00C0) 00 0E 0E 0E 0E 0E 0E 0E 0E Panel Control
reg(0x00C8) 00 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 GAMMA
reg(0x00CC) 00 03 Panel Control
reg(0x00D0) 00 00 00 Power Control
reg(0x00D2) 00 00 00 00 05 NVM Read
reg(0x00D3) 00 00 94 88 ILI9341, ILI9488
reg(0x00D4) 00 97 00 00 Novatek ID
reg(0x00DA) 00 54 RDID1
reg(0x00DB) 00 80 RDID2
reg(0x00DC) 00 66 RDID3
reg(0x00E0) 00 00 07 0C 05 13 09 36 AA 46 09 10 0D 1A 1E 0F GAMMA-P
reg(0x00E1) 00 00 20 23 04 10 06 37 56 49 04 0C 0A 33 37 0F GAMMA-N
reg(0x00EF) 00 00 00 00 00 00 ILI9327
reg(0x00F2) 00 58 04 12 02 22 22 FF 0A 90 14 88 Adjust Control 2
reg(0x00F6) 00 00 00 00 Interface Control
-----
TouchScreen.h GFX Calibration
Making all control and bus pins INPUT_PULLUP
Typical 30k Analog pullup with corresponding pin
would read low when digital is written LOW
e.g. reads ~25 for 300R X direction
e.g. reads ~30 for 500R Y direction
Testing : (A1, D7) = 23
Testing : (A2, D6) = 34
Diagnosing as:-
XM,XP: (A1, D7) = 23
YP,YM: (A2, D6) = 34
ID = 0x9488
cx=904 cy=951 cz=418 LEFT, TOP, Pressure
cx=907 cy=584 cz=535 LEFT, MIDH, Pressure
cx=910 cy=229 cz=504 LEFT, BOT, Pressure
cx=554 cy=948 cz=608 MIDW, TOP, Pressure
cx=563 cy=230 cz=674 MIDW, BOT, Pressure
cx=228 cy=947 cz=946 RT, TOP, Pressure
cx=228 cy=583 cz=1038 RT, MIDH, Pressure
cx=225 cy=230 cz=929 RT, BOT, Pressure
MCUFRIEND_kbv ID=0x9488 320 x 480
const int XP=7,XM=A1,YP=A2,YM=6; //320x480 ID=0x9488
const int TS_LEFT=929,TS_RT=204,TS_TOP=963,TS_BOT=213;
PORTRAIT CALIBRATION 320 x 480
x = map(p.x, LEFT=929, RT=204, 0, 320)
y = map(p.y, TOP=963, BOT=213, 0, 480)
Touch Pin Wiring XP=7 XM=A1 YP=A2 YM=6
LANDSCAPE CALIBRATION 480 x 320
x = map(p.y, LEFT=963, RT=213, 0, 480)
y = map(p.x, TOP=204, BOT=929, 0, 320)
*/
Что ж, я протестировал программу... экран работает, здорово! Он рисует кнопки ON и OFF и красный прямоугольник. Присмотревшись к вашему коду, кажется, что кнопки ON/OFF должны рисовать ЗЕЛЕНЫЕ/КРАСНЫЕ прямоугольники соответственно. Пробовал (сняв сначала пластиковую защиту) даже с пластиковой ручкой, почему-то не получилось..., @SebasSBM
... от последовательного монитора я получил: «TFT ID = 0x9486 Калибровка для вашей сенсорной панели», @SebasSBM
...чем больше я пытаюсь, тем больше запутываюсь. Я настраивал переменные здесь и там в вашем скрипте, надеясь, что смогу все откалибровать. Но результаты, которые я получаю от Serial Monitor, слишком странные в любом эксперименте , который я пытаюсь провести, это поражает мое воображение. Хотя я бы добился успеха методом проб и ошибок, но нет... **Мне действительно нужно скомпилировать и выполнить TouchScreen_Calibr_native.ino
, чтобы получить правильные константы?**, @SebasSBM
Я серьезно подумываю открыть еще один вопрос о проблеме с датчиками сенсорного экрана (см. EDIT3 в моем вопросе)... чтобы придать ему более целенаправленный подход..., @SebasSBM
Вы говорите почти так же, как я, когда я получил этот экран, это заняло у меня некоторое время, На Youtube есть одна из сессий Dronebot, где он подключает этот экран, который может помочь вам начать работу. У меня есть драйверы и информация о lcdwiki.com с примерами в папке библиотеки. Я считаю, что вы получаете либо Uno, либо Mega версию этого экрана, так как распиновка отличается для каждого, если у вас есть коробка для экрана, под штрих-кодом у него есть описание товара, которое говорит вам, какая версия у вас есть.Уно или Мега. На сайте lcdwiki вы найдете драйверы как для фотографий каждого экрана, так и для множества других экранов LCD OLED и TFT. когда вы загружаете / устанавливаете, в папке библиотеки есть несколько примеров, с которыми можно поиграть и освоиться Сайты DRONEBOT и LCDWIKI содержат изрядное количество информации, и оба они стоят того, чтобы их посетить. На данный момент я не могу получить ни один из примеров Adafruits из-за различий в драйверах
- Как преобразовать код Arduino во встроенный код C/C++
- Печать содержимого файла SD - карты на ЖК-дисплее
- Это правильный способ мигать символом на ЖК-дисплее?
- Почему жк-дисплей не показывает никакого выхода?
- Как заполнить треугольник с помощью библиотеки LCD5110 Graph?
- Как полностью очистить все от arduino и напечатать что-то новое?
- Программа Arduino внезапно перестала обновляться
- Как запрограммировать кнопку джойстика, чтобы сбросить все?
Что ж, мне удалось скомпилировать пример кода @VE7JRO♦. Могу ли я просто подключить экран, защищающий Arduino, загрузить скетч в Arduino и сразу же протестировать его? Или, может быть, это требует немного больше подготовки (например, сопротивление или другие вещи)? Возможно, мне следует проверить константы для PIN-кодов, соответствующих моему экрану, прежде чем загружать скетч и включать все?, @SebasSBM
Еще кое-что. Это первый раз, когда я буду тестировать скетчи на физическом Arduino. Я сделал несколько сценариев в симуляторе, похожем на тот, что находится на tinkercad.com (этот не позволяет вам писать код для моделирования Arduino, но позволяет набросать некоторую логику с интерфейсом WYSIWYG и получить код позже; был еще один такой же хороший для электронного моделирования несколько лет назад в Интернете, но, похоже, его больше нет), но **впервые я собираюсь подключить настоящую Arduino**. Если у меня есть последовательный порт Smart USB, подключенный к моему компьютеру, мне нужен блок питания 220AC-DC для тестирования или, скорее, нет?, @SebasSBM
Что ж, о питании во время тестирования: я читал на каком-то форуме, что электроника Arduino достаточно умна, чтобы сама выбирать, какой источник питания использовать (либо Smart USB, либо преобразователь переменного тока). Так что * он может использовать Smart USB в качестве источника питания * ... idk, если этой мощности будет достаточно для питания ЖК-экрана, но в случае, если это не так, я думаю, я могу добавить дополнительный источник питания в блок питания переменного тока (но возможно, это не так просто, особенно имея в виду проблему перегрева)..., @SebasSBM
Возможно, мне следует перестать думать об этом, просто подключить экран, загрузить скомпилированный код и посмотреть, что произойдет? Я думаю, что я слишком сомневаюсь..., @SebasSBM
То, что я сказал о tinkercad.com, не позволяющем вам написать сценарий, было неверным. Сначала он показывает раздражающую логику WYSIWYG, удобную для начинающих, но была возможность переключиться в режим сценариев. Вау, на самом деле [tinkercad.com](http://tinkercad.com) имеет потрясающий симулятор электроники/Arduino..., @SebasSBM