Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

ESP32 + XPT2046

Вс янв 15, 2023 13:21:29

Всем привет. Облазил форумы и интернет, но так понимания в голове не пояивлось, поэтому прошу помощи у сообщества помочь мне разобраться где я накосячил, пожалуйста.

Задача:

Необходимо написать код для обработки нажатия на экране. Готовая библиотека https://github.com/PaulStoffregen/XPT2046_Touchscreen считывает данные не корректно, поэтому решил сам написать.
НО :) , как вы уже догодались, у меня не получается получить вменяемые результаты: то приходят исключительно нули, то просто какие-то данные левые.

Может кто-нибудь сталкивался с подобной проблемой?

Код проекта
Спойлер
Код:
#include <SPI.h>
#include <Arduino.h>
#include <HardwareSerial.h>

#define T_IRQ 35

#define IRQ_TURN_ON_BITS  0x80
#define X_BITS            0x90
#define Y_BITS            0xD0
#define Z1_BITS           0xB0
#define Z2_BITS           0xC0
#define DUMMY_BITS        0x00

#define SPI_SETTING       SPISettings(12000000, MSBFIRST, SPI_MODE0)

bool isTouching = false;

void falling() {
  isTouching = true;
}

void setup() {
  Serial.begin(115200);

  pinMode(SS, OUTPUT);
  SPI.begin();

  SPI.beginTransaction(SPI_SETTING);
  digitalWrite(SS, LOW);
 
  SPI.transfer(IRQ_TURN_ON_BITS);

  digitalWrite(SS, HIGH);
  SPI.endTransaction();

  pinMode(T_IRQ, INPUT);
  attachInterrupt(digitalPinToInterrupt(T_IRQ), falling, FALLING);
}
void loop() {
  if (isTouching) {   
    SPI.beginTransaction(SPI_SETTING);
    digitalWrite(SS, LOW);
   
    SPI.transfer(Z1_BITS);
    int16_t z1 = SPI.transfer16(X_BITS);
    int16_t x = SPI.transfer16(Y_BITS);
    int16_t y = SPI.transfer16(DUMMY_BITS);

    Serial.printf("Z1: %d\tX: %d\tY: %d\n", z1, x, y);

    SPI.transfer(IRQ_TURN_ON_BITS);

    digitalWrite(SS, HIGH);
    SPI.endTransaction();
  }

  delay(500);
}
Ответить