Как управлять сенсорной панелью с шилда без библиотеки?
- Войдите на сайт для отправки комментариев
Добрый день. Вопрос в следующем:
познаю азы по книге "65 проектов Ардуино своими руками". И вот в одной из них есть пункт,где подключается к ардуино сенсорная панель от Nintendo ( BOB-09170). У меня тут в местных магазинах такого не было, но был шилд 2,4" дисплей+сенсор+ микроСД (такая вот: https://arduino-kit.ru/catalog/id/displey-2.4-tft-240h320-sensornyiy-%2B...)
В чём встал вопрос:
в книге описано подключение сенсора без подключения библиотеки Тачскрин. Прикручен ЛСД-дисплей, на который выводятся координаты при нажатии на сенсор.
Столкнулся с такой сложностью: везде в сети и даже в даташите на панели от Нинтендо 4 контакта, пронумерованные У1 У2 и Х1 Х2.
На Шилде же идёт маркировка Ym Yp и Xm Xp.
Глянул в пример библиотеки Тачскрин, там всё понятно - где какой контакт идёт (Ym и т.д.)
Как соотнести Ym...Xp с контактами Y1...X2?
// Проект 34 - Область касания на сенсорном дисплее
#include "LiquidCrystal.h"
LiquidCrystal lcd(4,5,6,7,8,9);
int x,y=0;
void setup()
{
lcd.begin(16,2);
lcd.clear();
}
int readX() // возвращает координату Х на сенсорном экране
{
int xr=0;
pinMode(A0, INPUT);
pinMode(A1, OUTPUT);
pinMode(A2, INPUT);
pinMode(A3, OUTPUT);
digitalWrite(A1, LOW); // подать низкий уровень на А1
digitalWrite(A3, HIGH); // подать высокий уровень на А3
delay(5);
xr=analogRead(0); // сохранить координату Х
return xr;
}
int readY() // возвращает координату Y на сенсорном экране
{
int yr=0;
pinMode(A0, OUTPUT);
pinMode(A1, INPUT);
pinMode(A2, OUTPUT);
pinMode(A3, INPUT);
digitalWrite(A0, LOW); // подать низкий уровень на А0
digitalWrite(A2, HIGH); // подать высокий уровень на А2
delay(5);
yr=analogRead(1); // сохранить координату Y
return yr;
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(" x = ");
x=readX();
lcd.print(x);
y=readY();
lcd.setCursor(0,1);
lcd.print(" y = ");
lcd.print(y);
delay(200);
}
Вот код из учебника.
Да, забыл.
вот код из библиотеки(пример работы сенсора)
// Touch screen library with X Y and Z (pressure) readings as well // as oversampling to avoid 'bouncing' // This demo code returns raw readings, public domain #include <stdint.h> #include "TouchScreen.h" // These are the pins for the shield! #define YP A1 // must be an analog pin, use "An" notation! #define XM A2 // must be an analog pin, use "An" notation! #define YM 7 // can be a digital pin #define XP 6 // can be a digital pin #define MINPRESSURE 10 #define MAXPRESSURE 1000 // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // For the one we're using, its 300 ohms across the X plate TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); void setup(void) { Serial.begin(9600); } void loop(void) { // a point object holds x y and z coordinates TSPoint p = ts.getPoint(); // we have some minimum pressure we consider 'valid' // pressure of 0 means no pressing! if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { Serial.print("X = "); Serial.print(p.x); Serial.print("\tY = "); Serial.print(p.y); Serial.print("\tPressure = "); Serial.println(p.z); } }Как соотнести Ym...Xp с контактами Y1...X2?
Методом тыка.
Как соотнести Ym...Xp с контактами Y1...X2?
Методом тыка.
Да,его я применил в 4 вариантах. Из-за чего и решил писать тут - при работе от библиотеки в Мониторе одни координаты покоя, при всех возможных вариантах без библиотеки - совсем другие. Это-то и смутило.
ID платы х9325
А какие одни и другие то? Пример из первого сообщения, наверное от 0 до 1023 по обеим осям, а из второго что?
Без библиотеки(на LCD-дисплее):
х = 263
у = 730
С библиотекой( Монитор порта):
х = 778
у = 292
Без библиотеки(на LCD-дисплее):
х = 263
у = 730
С библиотекой( Монитор порта):
х = 778
у = 292
поменяйте x и y - будет в обоих случаях примерно одинаково. Пара десятков единиц разницы - правится правильной калибровкой.
Без библиотеки(на LCD-дисплее):
х = 263
у = 730
С библиотекой( Монитор порта):
х = 778
у = 292
Это нормально. От перемены контактов получается просто перевёрнутая ось. Меняйте по вкусу - хоть провода местами, хоть пины в скетче. Можно и вообще ничего не менять, но наверное уж удобнее, чтобы координаты на дисплее и на таче в одну сторону считались.