You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Arduino连接的触摸屏数据发送至电脑?UE5赛车模拟器仪表盘开发

Arduino触摸屏数据传输到电脑(记录/显示)

1. 硬件准备与接线

  • 确认触摸屏(如ILI9341/XPT2046)与Arduino的连接:按模块手册完成SPI/I2C引脚接线(CS、DC、MOSI、CLK等引脚对应Arduino的SPI引脚)。

2. Arduino端代码(读取触摸数据并发送)

以XPT2046触摸屏为例,使用XPT2046_Touchscreen库:

#include <XPT2046_Touchscreen.h>
#include <SPI.h>

#define CS_PIN 10
XPT2046_Touchscreen ts(CS_PIN);

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

void loop() {
  if (ts.touched()) {
    TS_Point p = ts.getPoint();
    // 输出校准后的触摸坐标(需先完成触摸屏校准)
    Serial.print("X:");
    Serial.print(p.x);
    Serial.print(", Y:");
    Serial.println(p.y);
  }
  delay(50);
}

3. 电脑端记录/显示数据

方式1:Arduino串口监视器

  • 打开Arduino IDE的串口监视器,设置对应波特率(115200),即可实时查看触摸坐标。
  • 点击监视器右下角的「保存」按钮,可将数据导出为TXT文件。

方式2:Python脚本(实时显示+保存到CSV)

使用pyserial库,先安装:pip install pyserial

import serial
import csv
from datetime import datetime

ser = serial.Serial('COM3', 115200, timeout=1)  # 替换为你的串口端口
with open('touch_data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['Timestamp', 'X', 'Y'])
    while True:
        line = ser.readline().decode('utf-8').strip()
        if line:
            if 'X:' in line and 'Y:' in line:
                x = line.split(',')[0].split(':')[1]
                y = line.split(',')[1].split(':')[1]
                now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                print(f"[{now}] X:{x}, Y:{y}")
                writer.writerow([now, x, y])

适配UE5赛车模拟器的Arduino触摸屏连接与数据传输

1. 核心方案选择

有线:USB串口(推荐,稳定低延迟)

适合固定安装的模拟器,直接用USB线连接Arduino与PC。

无线:蓝牙/WiFi

  • 蓝牙:用HC-05模块连接Arduino,PC端配对后视为虚拟串口。
  • WiFi:用ESP32(自带WiFi)作为Arduino主控,与PC建立TCP/UDP连接。

2. 触摸屏操作数据传到UE5

Arduino端代码(发送触摸指令)

假设触摸屏上有「加速」「刹车」「左转」「右转」四个按钮,读取触摸区域后发送对应指令:

#include <XPT2046_Touchscreen.h>
#include <SPI.h>

#define CS_PIN 10
XPT2046_Touchscreen ts(CS_PIN);

// 定义按钮区域坐标(需根据触摸屏实际尺寸校准)
#define ACCEL_MIN_X 200
#define ACCEL_MAX_X 300
#define ACCEL_MIN_Y 400
#define ACCEL_MAX_Y 480

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

void loop() {
  if (ts.touched()) {
    TS_Point p = ts.getPoint();
    // 校准后的坐标判断,假设已完成触摸屏校准
    if (p.x >= ACCEL_MIN_X && p.x <= ACCEL_MAX_X && p.y >= ACCEL_MIN_Y && p.y <= ACCEL_MAX_Y) {
      Serial.println("ACCEL");  // 发送加速指令
      delay(200);  // 防重复触发
    }
    // 同理添加刹车、左转、右转的判断与指令发送
  }
  delay(50);
}

UE5端接收数据(蓝图实现)

  1. 安装支持串口的插件(如Serial Communication Plugin),或使用C++编写串口逻辑。
  2. 蓝图步骤:
    • 用Open Serial Port节点打开对应串口(波特率115200)。
    • 用Read Serial Buffer节点监听串口数据。
    • 解析收到的字符串,比如判断是否为"ACCEL",触发赛车的加速逻辑。

3. UE5赛车数据传到Arduino触摸屏显示

UE5端发送数据

在蓝图中,获取赛车的速度、转速等数据,编码为统一格式后发送:

// 示例蓝图逻辑:
- 获取赛车速度值(如120km/h)
- 拼接字符串:"SPEED:" + 速度值 + ",RPM:" + 转速值
- 用`Write Serial String`节点发送到串口

Arduino端接收并显示

#include <XPT2046_Touchscreen.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>

#define TFT_CS 9
#define TFT_DC 8
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
XPT2046_Touchscreen ts(10);

int speed = 0;
int rpm = 0;

void setup() {
  Serial.begin(115200);
  tft.begin();
  tft.setRotation(3);
  tft.fillScreen(ILI9341_BLACK);
}

void loop() {
  // 读取UE5发送的数据
  if (Serial.available() > 0) {
    String data = Serial.readStringUntil('\n');
    // 解析数据,格式示例:"SPEED:120,RPM:6000"
    if (data.indexOf("SPEED:") != -1) {
      speed = data.substring(data.indexOf("SPEED:")+6, data.indexOf(",")).toInt();
    }
    if (data.indexOf("RPM:") != -1) {
      rpm = data.substring(data.indexOf("RPM:")+4).toInt();
    }
    // 更新触摸屏显示
    tft.fillRect(0, 0, 320, 50, ILI9341_BLACK);
    tft.setTextColor(ILI9341_WHITE);
    tft.setTextSize(2);
    tft.setCursor(10, 10);
    tft.print("Speed: ");
    tft.print(speed);
    tft.print(" km/h");
    tft.setCursor(10, 30);
    tft.print("RPM: ");
    tft.print(rpm);
  }
}

关键注意事项

  • 确保Arduino与PC/UE5的串口波特率完全一致。
  • 触摸屏需先完成校准,确保坐标判断准确(多数触摸库自带校准函数)。
  • 复杂数据建议用JSON格式传输,避免解析混乱。

内容的提问来源于stack exchange,提问作者Alvi Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:57:22