Как управлять сенсорной панелью с шилда без библиотеки?

the_matrix
the_matrix аватар
Offline
Зарегистрирован: 06.03.2018

Добрый день. Вопрос в следующем:

познаю азы по книге "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);
}

Вот код из учебника.

the_matrix
the_matrix аватар
Offline
Зарегистрирован: 06.03.2018

Да, забыл.

вот код из библиотеки(пример работы сенсора)

// 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);
  }
}

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

the_matrix пишет:

Как соотнести Ym...Xp с контактами Y1...X2?

Методом тыка.

the_matrix
the_matrix аватар
Offline
Зарегистрирован: 06.03.2018

kalapanga пишет:

the_matrix пишет:

Как соотнести Ym...Xp с контактами Y1...X2?

Методом тыка.

Да,его я применил в 4 вариантах. Из-за чего и решил писать тут - при работе от библиотеки в Мониторе одни координаты покоя, при всех возможных вариантах без библиотеки - совсем другие. Это-то и смутило.

ID платы х9325

kalapanga
Offline
Зарегистрирован: 23.10.2016

А какие одни и другие то? Пример из первого сообщения, наверное от 0 до 1023 по обеим осям, а из второго что?

the_matrix
the_matrix аватар
Offline
Зарегистрирован: 06.03.2018

Без библиотеки(на LCD-дисплее):

х = 263

у = 730

С библиотекой( Монитор порта):

х = 778

у = 292

b707
Offline
Зарегистрирован: 26.05.2017

the_matrix пишет:

Без библиотеки(на LCD-дисплее):

х = 263

у = 730

С библиотекой( Монитор порта):

х = 778

у = 292

поменяйте x и y - будет в обоих случаях примерно одинаково. Пара десятков единиц разницы - правится правильной калибровкой.

kalapanga
Offline
Зарегистрирован: 23.10.2016

the_matrix пишет:

Без библиотеки(на LCD-дисплее):

х = 263

у = 730

С библиотекой( Монитор порта):

х = 778

у = 292

Это нормально. От перемены контактов получается просто перевёрнутая ось. Меняйте по вкусу - хоть провода местами, хоть пины в скетче. Можно и вообще ничего не менять, но наверное уж удобнее, чтобы координаты на дисплее и на таче в одну сторону считались.