feat: add basic screen support

This commit is contained in:
Fritz Heiden 2025-05-20 20:16:08 +02:00
parent c2eb1ba3ba
commit fce458220b
3 changed files with 84 additions and 5 deletions

View File

@ -0,0 +1,37 @@
// See SetupX_Template.h for all options available
#define USER_SETUP_ID 42
#define ILI9341_DRIVER
#define TFT_MISO 19 // (leave TFT SDO disconnected if other SPI devices share MISO)
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 5 // Chip select control pin
#define TFT_DC 2 // Data Command control pin
#define TFT_RST 4 // Reset pin (could connect to RST pin)
// Optional touch screen chip select
//#define TOUCH_CS 5 // Chip select pin (T_CS) of touch screen
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT
// TFT SPI clock frequency
// #define SPI_FREQUENCY 20000000
// #define SPI_FREQUENCY 27000000
// #define SPI_FREQUENCY 40000000
#define SPI_FREQUENCY 55000000 // STM32 SPI1 only (SPI2 maximum is 27MHz)
// #define SPI_FREQUENCY 80000000
// Optional reduced SPI frequency for reading TFT
#define SPI_READ_FREQUENCY 16000000
// SPI clock frequency for touch controller
#define SPI_TOUCH_FREQUENCY 2500000

View File

@ -13,4 +13,11 @@ platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
monitor_speed = 115200
lib_deps = ruiseixasm/Versatile_RotaryEncoder@^1.3.1
lib_deps =
ruiseixasm/Versatile_RotaryEncoder@^1.3.1
bodmer/TFT_eSPI@^2.5.43
build_flags =
-Os
-D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
-D USER_SETUP_LOADED=1
-include $PROJECT_INCLUDE_DIR/TFT_eSPI_Setup_ILI9341_ESP32.h

View File

@ -1,9 +1,15 @@
#include <Arduino.h>
#include <Versatile_RotaryEncoder.h>
#include <SPI.h>
#include <TFT_eSPI.h>
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define FONT_SIZE 2
const int ONBOARD_LED_PIN = 2;
const int ANALOG_INPUT_PIN = 34;
const int ANALOG_OUTPUT_PIN = 32;
const int ANALOG_OUTPUT_PIN = 25;
const int ENTER_BUTTON_PIN = 14;
const int ENCODER_A_PIN = 12;
@ -20,6 +26,8 @@ void handlePress();
void handleRelease();
void handleRotate(int8_t rotation);
TFT_eSPI tft = TFT_eSPI();
void setup()
{
Serial.begin(115200);
@ -38,6 +46,17 @@ void setup()
xTaskCreate(handleToneGeneration, "handleToneGeneration", 2048, NULL, 1, NULL);
xTaskCreate(handleInputControls, "handleInputContols", 2048, NULL, 1, NULL);
tft.init();
tft.setRotation(1);
delay(100);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
int centerX = SCREEN_WIDTH / 2;
int centerY = SCREEN_HEIGHT / 2;
tft.drawCentreString("Setup complete.", centerX, centerY, FONT_SIZE);
Serial.println("setup complete");
}
@ -87,6 +106,12 @@ void handlePress()
{
Serial.println("Encoder pressed");
digitalWrite(ONBOARD_LED_PIN, HIGH);
int centerX = SCREEN_WIDTH / 2;
int centerY = SCREEN_HEIGHT / 2;
tft.fillScreen(TFT_BLACK);
tft.drawCentreString("Button pressed.", centerX, centerY, FONT_SIZE);
}
void handleRelease()
@ -95,14 +120,24 @@ void handleRelease()
digitalWrite(ONBOARD_LED_PIN, LOW);
}
void handleRotate(int8_t rotation) {
void handleRotate(int8_t rotation)
{
Serial.print("Encoder rotated by ");
Serial.println(rotation);
if (rotation > 0) {
if (rotation > 0)
{
frequency += 10;
} else if (rotation < 0) {
}
else if (rotation < 0)
{
frequency -= 10;
}
Serial.print("Frequency: ");
Serial.println(frequency);
int centerX = SCREEN_WIDTH / 2;
int centerY = SCREEN_HEIGHT / 2;
tft.fillScreen(TFT_BLACK);
tft.drawCentreString("Frequency: " + String(frequency) + "Hz", centerX, centerY, FONT_SIZE);
}