Когда кнопка нажата, это мешает TFT-экрану

Я пытаюсь создать простое устройство для контроля частоты сердечных сокращений. Компоненты следующие:

  1. A TFT 2,8"; ЖК-экран для отображения актуальной информации для пользователя.
  2. 3 кнопки для взаимодействия пользователя с устройством.
  3. датчик PPG для регистрации сердцебиения пользователя.
  4. Ардуино Уно.
  5. Макет для подключения компонентов.

Настройка устройства выглядит следующим образом:

который подключается следующим образом:

Я не включил TFT-экран здесь в чертеж схемы, потому что я использую Tinkercad, а у них его нет в компонентах. Экран имеет следующие порты:

Я использую следующий код:

// библиотеки датчиков сердцебиения
#define USE_ARDUINO_INTERRUPTS true
#include <PulseSensorPlayground.h>

// библиотеки TFT-экранов
#include <TFT.h>  // ЖК-библиотека Arduino

// Переменные датчика сердцебиения
const int PulseWire = 0; // PulseSensor БЕЛЫЙ ПРОВОД, подключенный к АНАЛОГОВОМУ ВЫВОДУ 0
int Threshold = 550; // Определяем, какой сигнал "считать долей";
PulseSensorPlayground pulseSensor; // Создает экземпляр PulseSensorPlayground

// переменные экрана TFT
#define cs   10
#define dc   9
#define rst  8
TFT TFTscreen = TFT(cs, dc, rst);

// Переменные кнопки
const int buttonUp = 2;
const int buttonDown = 3;
const int buttonOk = 4;

#define DELAY 1.0/64.0

void setup() {

   Serial.begin(9600); // Для последовательного монитора

   pulseSensor.analogInput(PulseWire);
   pulseSensor.setThreshold(Threshold);

   pulseSensor.begin(); // Запуск датчика сердцебиения
   TFTscreen.begin(); // Запустить TFT-экран

   drawScreen(); // Рисуем содержимое экрана

   // Кнопки
   pinMode(buttonUp, INPUT);
   pinMode(buttonDown, INPUT);
   pinMode(buttonOk, INPUT);
}

bool buttonUpPrev = false;
bool buttonDownPrev = false;
bool buttonOkPrev = false;

void loop(){

   if(buttonUpPrev == HIGH && digitalRead(buttonUp) == LOW){
      Serial.println("button up");
   }

   if(buttonDownPrev == HIGH && digitalRead(buttonDown) == LOW){
      Serial.println("button down");
   }

   if(buttonOkPrev == HIGH && digitalRead(buttonOk) == LOW){
      Serial.println("button ok");
   }

   buttonUpPrev = digitalRead(buttonUp);
   buttonDownPrev = digitalRead(buttonDown);
   buttonOkPrev = digitalRead(buttonOk);

   //Serial.println(pulseSensor.getLatestSample());

   delay(DELAY);
}

Моя проблема в том, что когда я нажимаю одну из кнопок, экран TFT мерцает, как будто на экран попадает меньшее напряжение. Кроме того, иногда я вижу "кнопка нажата" в последовательном мониторе, когда ничего не нажимается. В целом устройство работает, но не ошибся ли я.

Мой вопрос: есть ли проблема с кабелем этого устройства? Я изучал информатику и знаю только основы электроники. Спасибо!

, 👍1

Обсуждение

попробуйте использовать внутренние подтягивающие резисторы ... удалите внешние подтягивающие резисторы и подключите переключатели между контактами данных и землей, @jsotola

Также вместо «delay (1.0/64.0)» используйте «delayMicroSeconds (15)»., @hcheung