前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >真车转向拨杆拆车件+Arduino实现欧卡2游戏内模拟对应功能——第2部分:方案整理

真车转向拨杆拆车件+Arduino实现欧卡2游戏内模拟对应功能——第2部分:方案整理

原创
作者头像
用户6948990
修改于 2025-04-17 03:07:34
修改于 2025-04-17 03:07:34
11200
代码可运行
举报
文章被收录于专栏:wuterwuter
运行总次数:0
代码可运行

使用 Arduino UNO R3 + 真车灯光总成 + SimHub 实现游戏控制(非 HID 方式)

本方案目标是:

使用真实汽车的灯光拨杆(5pin),通过 Arduino UNO R3 串口传输拨动状态至电脑,再由 SimHub 模拟游戏中的灯光、转向等操作。

不使用 USB HID 模拟键盘或手柄,而是采用串口通信 + SimHub 的按键模拟功能。

不使用 USB HID 模拟的原因是在前期搜集资料前,就图便宜买了UNO R3(ESP-8266EX)开发板,结果发现根本不支持USB HID协议,也就不能模拟成USB设备从而进行自定义按键,只能通过串口发送数据,PC端通过Simhub读取后模拟成键盘操作


一、硬件准备

1. 主控板

  • Arduino D1 UNO R3(基于ESP-8266EX,官方UNO R3是基于 ATmega328P)
  • 注意:该板无法直接模拟 USB HID,但支持串口通信

2. 拨杆总成

  • 真车灯光拨杆(如奥迪/大众/丰田等,淘宝上五菱宏光的18包邮)
  • 提供 5 根引脚(4 条信号线 + 1 条共地)

3. 连接

  • 将拨杆的 4 条信号线分别连接到 Arduino 的 D2~D5
  • 拨杆公共地连接 Arduino GND

拨杆引脚

功能

Arduino 接口

A

信号1

D2

B

信号2

D3

C

信号3

D4

D

信号4

D5

GND

公共地线

GND


二、工作原理

  1. 拨动灯光拨杆 → 改变内部连接 → 某些信号线短接到 GND
  2. Arduino 使用 digitalRead() 检测 4 根输入引脚电平 → 组成 4 位状态码(如 "1011")
  3. 查表将状态码映射为功能名(如 "NEAR_LIGHT")
  4. Arduino 通过串口 Serial.println() 发送状态名
  5. SimHub 监听串口 → 将收到的文本与功能进行映射 → 模拟键盘按键或游戏操作

三、Arduino 代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const int pinA = 2;
const int pinB = 3;
const int pinC = 4;
const int pinD = 5;

String lastState = "1111";
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 100;

void setup() {
  Serial.begin(115200);
  pinMode(pinA, INPUT_PULLUP);
  pinMode(pinB, INPUT_PULLUP);
  pinMode(pinC, INPUT_PULLUP);
  pinMode(pinD, INPUT_PULLUP);
}

void loop() {
  String currentState = "";
  currentState += digitalRead(pinA) == HIGH ? "1" : "0";
  currentState += digitalRead(pinB) == HIGH ? "1" : "0";
  currentState += digitalRead(pinC) == HIGH ? "1" : "0";
  currentState += digitalRead(pinD) == HIGH ? "1" : "0";

  if (currentState != lastState && millis() - lastDebounceTime > debounceDelay) {
    lastDebounceTime = millis();
    lastState = currentState;

    if (currentState == "0111") Serial.println("PARKING_LIGHT");
    else if (currentState == "1011") Serial.println("NEAR_LIGHT");
    else if (currentState == "1101") Serial.println("FAR_LIGHT");
    else if (currentState == "1110") Serial.println("FLASH_LIGHT");
    else if (currentState == "0011") Serial.println("FOG_LIGHT");
    else if (currentState == "0110") Serial.println("LEFT_SIGNAL");
    else if (currentState == "1010") Serial.println("RIGHT_SIGNAL");
    else if (currentState == "1111") Serial.println("OFF");
  }
  delay(10);
}

四、SimHub 设置(串口输入 → 键盘模拟)

1. 添加串口设备

  • 打开 SimHub → 设置 → 外部设备 → 添加串口设备
  • 选择 Arduino 的 COM 口,设置波特率为 115200

2. 映射串口数据 → 键盘模拟

  • 进入 控制和事件 → 键盘模拟
  • 点击 “添加映射” → 等待串口输入
  • 拨动拨杆(Arduino 发送数据)
  • SimHub 会显示输入(如 "NEAR_LIGHT")
  • 设置该输入对应的虚拟键(如 F6)
  • 重复此操作为每种状态添加映射:

状态名

映射按键

NEAR_LIGHT

F6

FAR_LIGHT

F7

LEFT_SIGNAL

RIGHT_SIGNAL

FOG_LIGHT

F8

PARKING_LIGHT

F5

OFF

F10


整体效果

  • 拨杆拨动后,Arduino 立即通过串口发送状态
  • SimHub 自动识别状态名 → 触发配置的按键
  • 游戏中表现为灯光/转向灯/雾灯同步控制
  • 实现了 真车灯光拨杆 → 游戏内功能 的无缝对接

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 Arduino UNO R3 + 真车灯光总成 + SimHub 实现游戏控制(非 HID 方式)
    • 一、硬件准备
      • 1. 主控板
      • 2. 拨杆总成
      • 3. 连接
    • 二、工作原理
    • 三、Arduino 代码
    • 四、SimHub 设置(串口输入 → 键盘模拟)
      • 1. 添加串口设备
      • 2. 映射串口数据 → 键盘模拟
    • 整体效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档