#include "SPI.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
// 定义 TFT ILI9341 屏幕的引脚
#define TFT_CS 5
#define TFT_RST 6
#define TFT_DC 7
// 初始化 TFT 屏幕
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
// 定义旋转编码器的引脚
#define ENCODER_CLK 16
#define ENCODER_DT 17
#define ENCODER_SW 18
// 定义计数器变量
volatile int counter = 0;
int lastClk = HIGH;
void setup() {
Serial1.begin(115200);
Serial1.println("Hello, Raspberry Pi Pico!");
// 设置旋转编码器引脚为输入模式
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
// 初始化 TFT 屏幕
tft.begin();
tft.setRotation(0); // 设置屏幕旋转方向
// tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(3);
// 设置中断,检测旋转编码器的旋转
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), encoderISR, CHANGE);
}
void loop() {
static int lastCounter = -1;
// 检查计数器是否变化
if (counter != lastCounter) {
lastCounter = counter;
// tft.fillScreen(ILI9341_BLACK);
tft.setCursor(60, 100);
tft.print("Count: ");
tft.print(counter);
}
// 检查按钮是否按下
if (digitalRead(ENCODER_SW) == LOW) {
counter = 0; // 重置计数器
delay(500); // 消抖
}
}
void encoderISR() {
int clkState = digitalRead(ENCODER_CLK);
if (clkState != lastClk) {
if (digitalRead(ENCODER_DT) != clkState) {
counter++;
} else {
counter--;
}
}
lastClk = clkState;
}