Files
ESP32S3_vt/reference/armor/main/hit.hpp
T
Horldsence fd71b83e3a reference: 早先那版 C 写的装甲板固件(ESP-IDF 工程)
`armor/` 是它的 Rust 改写版,这一份留着当参考:ADC 阈值的 2000 就是从它标定出来的
(`.env.example` 里那句 "same as the reference firmware" 指的就是它),而且它的 README
记着实测设备与 MAC,换硬件时是有用的现场记录。

只收了 20 个源文件。它自带的 `.gitignore` 已经排掉 `build/`(211 MB 的 ESP-IDF 构建产物)
与生成的 `sdkconfig`,所以仓库里不会多出这些东西。

两处顺带处理:
- `reference/armor/.git` 是一个**空的**仓库壳(`git init` 过,零提交、零 remote、零 ref),
  而外层 git 正因为它的存在而拒绝索引 `reference/` 下的任何文件
  (`error: 'reference/armor/' does not have a commit checked out`)。它被挪到
  `desktop/.dev/backup/reference-armor-git`(可逆,且该目录已被忽略),不是删除。
- 它的 README 指着 `../armor-platformio-backup/`,那份备份并不存在。改成明说"没有进仓库",
  免得以后有人照着找一个不存在的目录。

另外把 `/docs/` 加进 .gitignore:那是工作区里另起的一个 Astro 文档站,与本仓库无关。
2026-10-14 19:45:15 +08:00

35 lines
1.1 KiB
C++

#pragma once
#include <cstdint>
/**
* @brief Piezo hit detection + WS2812 status LEDs.
*
* Ported from the Arduino version:
* * the legacy ADC DMA driver (`driver/adc.h`, removed in ESP-IDF v6) is
* replaced by the `adc_continuous` driver with the same 40 kHz aggregate
* sampling rate, 0 dB attenuation and 12-bit results;
* * Adafruit_NeoPixel (bit-banged) is replaced by an RMT WS2812 encoder.
*/
class Hit {
public:
// Same values as Adafruit_NeoPixel::Color(r, g, b) -> 0x00RRGGBB.
static constexpr uint32_t RED = 0xFF0000;
static constexpr uint32_t BLUE = 0x0000FF;
static constexpr uint32_t GREEN = 0x00FF00;
static constexpr uint32_t YELLOW = 0xFFFF00;
/** Blink duration after a hit, and the cooldown that suppresses repeats. */
static constexpr uint32_t HIT_BLINK_MS = 50;
/** Raw 12-bit ADC level above which a sample counts as a hit. */
static constexpr uint32_t HIT_THRESHOLD = 2000;
static volatile uint32_t color;
static volatile bool detect_hit;
static volatile uint32_t hit_cnt;
static volatile uint32_t last_hit_ms;
static void begin();
static void onLoop();
};