Кнопки и дисплей ST7735 Ардуино

Lorikxz

✩✩✩✩✩✩✩
26 Янв 2024
4
0
Здравствуйте. Не слишком давно начал заниматься ардуино, поэтому ещё плохо понимаю. Возникла вот такая ошибка, что при загрузке скетча, и нажатии на нужную кнопку, текст выводиться, но происходит мирцание текста(пропал, и опять включился) в 50-100 мс, и их видно глазу. Кстати когда одна функция "if" к примеру с левой кнопкой, всё работает как задуманно, но если как у меня в коде правый и левый, происходят такие неполадки. Заранее спасибо :)

Код:
Код:
#include <SPI.h>
#include <Adafruit_ST7735.h>
#include <Adafruit_GFX.h>

#define TFT_CS  10  //
#define TFT_DC   9  //
#define TFT_RST  8  //

const int btnPinLeft = 3;
const int btnPinRight = 4;
const int btnPinUp = 5;
const int btnPinDown = 2;

int btnStateLeft = 0;
int btnStateRight = 0;
int btnStateUp = 0;
int btnStateDown = 0;


Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  tft.initR(INITR_BLACKTAB);
  tft.fillScreen(ST7735_BLACK);

  pinMode(btnPinLeft, INPUT_PULLUP);
  pinMode(btnPinRight, INPUT_PULLUP);
  pinMode(btnPinUp, INPUT_PULLUP);
  pinMode(btnPinDown, INPUT_PULLUP);

  n();

}

void loop() {
  btnStateLeft = digitalRead(btnPinLeft);
  btnStateRight = digitalRead(btnPinRight);
  btnStateUp = digitalRead(btnPinUp);
  btnStateDown = digitalRead(btnPinDown);

  if(btnStateLeft == LOW) {
    tft.setCursor(50, 50);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("Left");
   
  }else{
    tft.fillScreen(ST7735_BLACK);
  }

  if(btnStateRight == LOW) {
    tft.setCursor(70, 50);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("right");
   
  }else{
    tft.fillScreen(ST7735_BLACK);
}

}

void n() {
  if(btnStateLeft == LOW) {
    tft.setCursor(50, 50);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("Left");
   
  }else{
    tft.fillScreen(ST7735_BLACK);
  }

  if(btnStateRight == LOW) {
    tft.setCursor(70, 50);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("right");
   
  }else{
    tft.fillScreen(ST7735_BLACK);
  }

}
 

poty

★★★★★★✩
19 Фев 2020
2,989
895
@Lorikxz, потому что после вывода текста один раз Вы его выводите снова и снова до тех пор, пока нажата соответствующая кнопка.
Но ведь другая кнопка у Вас в этот момент отжата, срабатывает else и Вы стираете написанное.
Вывод: нужно делать что-то не по состоянию, а по его смене.
 
  • Лойс +1
Реакции: Lorikxz