45 Serial.println(
"╔══════════════════════════════════════════╗");
46 Serial.println(
"║ DRV2605 Haptic Driver Test ║");
47 Serial.println(
"╚══════════════════════════════════════════╝");
53 Serial.println(
"\n[TEST] Device Capabilities");
56 Serial.print(
" F0 Calibration: "); Serial.println(cap.hasF0Calibration ?
"Yes" :
"No");
57 Serial.print(
" VBAT Compensation: "); Serial.println(cap.hasVbatCompensation ?
"Yes" :
"No");
58 Serial.print(
" RTP Mode: "); Serial.println(cap.hasRTP ?
"Yes" :
"No");
59 Serial.print(
" Sequence: "); Serial.println(cap.hasSequence ?
"Yes" :
"No");
60 Serial.print(
" Auto Calibration: "); Serial.println(cap.hasAutoCalibration ?
"Yes" :
"No");
61 Serial.print(
" Break Effect: "); Serial.println(cap.hasBreakEffect ?
"Yes" :
"No");
62 Serial.print(
" Overdrive: "); Serial.println(cap.hasOverdrive ?
"Yes" :
"No");
63 Serial.print(
" Continuous Mode: "); Serial.println(cap.hasContinuousMode ?
"Yes" :
"No");
64 Serial.print(
" Max Effects: "); Serial.println(cap.maxEffectCount);
65 Serial.print(
" Max Sequence: "); Serial.println(cap.maxSequenceLength);
66 Serial.println(
"[OK] Done");
71 Serial.println(
"\n=== Driver Initialization ===");
72 Serial.print(
"Wire: SDA="); Serial.print(
SENSOR_SDA); Serial.print(
", SCL="); Serial.println(
SENSOR_SCL);
75 Serial.println(
"[FATAL] DRV2605 init failed!");
76 while (1) delay(1000);
79 Serial.println(
"[OK] Driver initialized");
83 Serial.print(
" VBAT: "); Serial.print(
haptic.
getVbat()); Serial.println(
" mV");
84 Serial.print(
" Mode: "); Serial.println(
static_cast<uint8_t
>(
haptic.
getMode()));
89 Serial.println(
"\n[TEST] Actuator Type");
91 Serial.println(
" Current: ");
94 Serial.println(
" Switching to LRA...");
98 Serial.println(
" Switching to ERM...");
102 Serial.println(
"[OK] Done");
107 Serial.println(
"\n[TEST] Library Selection");
109 Serial.println(
" Selecting ERM Library 1 (Strong Click)...");
114 Serial.println(
" Selecting ERM Library 2 (Sharp Click)...");
119 Serial.println(
" Selecting ERM Library 5 (Buzz)...");
124 Serial.println(
" Reset to Library 1...");
126 Serial.println(
"[OK] Done");
131 Serial.println(
"\n[TEST] playEffect() - HapticBase Interface");
132 Serial.println(
" Playing effect 1...");
136 Serial.println(
"[OK] Done");
138 Serial.println(
"[FAIL] playEffect() returned false");
144 Serial.println(
"\n[TEST] playEffect() - Effect Range (1-10)");
145 for (uint8_t
i = 1;
i <= 10;
i++) {
146 Serial.print(
" Effect "); Serial.print(
i); Serial.println(
"...");
150 Serial.println(
"[OK] Done");
155 Serial.println(
"\n[TEST] setSequence() - HapticBase Interface");
161 Serial.println(
" Sequence set: [1, 2, 3, 0]");
162 Serial.println(
" Playing sequence...");
165 Serial.println(
"[OK] Done");
170 Serial.println(
"\n[TEST] setRealtimeValue() - HapticBase Interface");
173 Serial.println(
" Mode set to RTP");
175 Serial.println(
" Playing RTP values...");
176 uint8_t values[] = {0x00, 0x40, 0x80, 0xC0, 0xFF, 0xC0, 0x80, 0x40};
177 for (
size_t i = 0;
i <
sizeof(values);
i++) {
178 Serial.print(
" Value: 0x"); Serial.println(values[
i], HEX);
185 Serial.println(
"[OK] Done");
190 Serial.println(
"\n[TEST] stop() - HapticBase Interface");
192 Serial.println(
" Started playback, waiting...");
194 Serial.println(
" Calling stop()...");
196 Serial.print(
" isPlaying: "); Serial.println(
haptic.
isPlaying() ?
"Yes" :
"No");
197 Serial.println(
"[OK] Done");
202 Serial.println(
"\n[TEST] getStatus() - HapticBase Interface");
204 const char *statusStr =
"UNKNOWN";
213 Serial.print(
" Status: "); Serial.println(statusStr);
214 Serial.println(
"[OK] Done");
219 Serial.println(
"\n[TEST] Mode Switching");
221 Serial.println(
" Mode: INTERNAL_TRIGGER");
223 Serial.print(
" Current: "); Serial.println(
static_cast<uint8_t
>(
haptic.
getMode()));
225 Serial.println(
" Mode: REAL_TIME_PLAYBACK");
227 Serial.print(
" Current: "); Serial.println(
static_cast<uint8_t
>(
haptic.
getMode()));
229 Serial.println(
" Mode: DIAGNOSTICS");
231 Serial.print(
" Current: "); Serial.println(
static_cast<uint8_t
>(
haptic.
getMode()));
233 Serial.println(
" Mode: STANDBY");
235 Serial.print(
" Current: "); Serial.println(
static_cast<uint8_t
>(
haptic.
getMode()));
238 Serial.println(
"[OK] Done");
243 Serial.println(
"\n[TEST] calibrate() - HapticBase Interface");
244 Serial.println(
" WARNING: May take a few seconds...");
247 Serial.println(
" Calibration successful!");
249 Serial.println(
" Calibration failed!");
251 Serial.println(
"[OK] Done");
256 Serial.println(
"\n[TEST] getF0() - HapticBase Interface");
259 Serial.print(
" LRA F0: "); Serial.print(f0); Serial.println(
" Hz");
261 Serial.println(
" F0 not available or LRA not detected");
263 Serial.println(
"[OK] Done");
268 Serial.println(
"\n[TEST] setMode(STANDBY) - HapticBase Interface");
270 Serial.println(
"[OK] Done");
275 Serial.println(
"\n[TEST] setMode(NORMAL) - HapticBase Interface");
277 Serial.println(
"[OK] Done");
282 Serial.println(
"\n=== Auto Demo Sequence ===");
285 Serial.println(
"\n[1/11] Basic playEffect()...");
289 Serial.println(
"\n[2/11] Library selection...");
292 Serial.println(
"\n[3/11] Effect range (1-10)...");
295 Serial.println(
"\n[4/11] Sequence test...");
298 Serial.println(
"\n[5/11] RTP test...");
301 Serial.println(
"\n[6/11] Status check...");
304 Serial.println(
"\n[7/11] Mode switching...");
307 Serial.println(
"\n[8/11] Actuator type switching...");
310 Serial.println(
"\n[9/11] Stop test...");
316 Serial.println(
"\n[10/11] Calibration...");
320 Serial.println(
"\n[11/11] F0 reading...");
323 Serial.println(
"\n=== Demo Complete ===");
328 Serial.println(
"\n========== Commands ==========");
329 Serial.println(
"Initialization:");
330 Serial.println(
" i - Re-initialize driver");
332 Serial.println(
"HapticBase Interface:");
333 Serial.println(
" e - playEffect(1)");
334 Serial.println(
" E - playEffect() range (1-10)");
335 Serial.println(
" S - setSequence() test");
336 Serial.println(
" r - setRealtimeValue() (RTP)");
337 Serial.println(
" p - stop() test");
338 Serial.println(
" t - getStatus()");
339 Serial.println(
" c - calibrate()");
340 Serial.println(
" f - getF0()");
341 Serial.println(
" k - Show capabilities");
342 Serial.println(
" s - Enter standby mode");
343 Serial.println(
" n - Return to normal mode");
345 Serial.println(
"DRV2605 Extended:");
346 Serial.println(
" l - Library selection");
347 Serial.println(
" a - Actuator type switch");
348 Serial.println(
" m - Mode switching");
350 Serial.println(
"Special Tests:");
351 Serial.println(
" d - Auto demo sequence");
353 Serial.println(
"Info:");
354 Serial.println(
" v - Read voltage");
355 Serial.println(
" h - Help (this message)");
356 Serial.println(
"==============================");
361 Serial.begin(115200);
368 Serial.println(
"\n========== Quick Test ==========");
369 Serial.println(
"Running auto demo sequence...");
378 if (Serial.available()) {
379 char cmd = Serial.read();
425 Serial.print(
"[VBAT] "); Serial.print(
haptic.
getVbat()); Serial.println(
" mV");
439 if (
cmd !=
'\n' &&
cmd !=
'\r' &&
cmd !=
' ') {
440 Serial.print(
"[?] Unknown: '"); Serial.print(
cmd); Serial.print(
" (0x"); Serial.print(
cmd, HEX); Serial.println(
")");
HapticStatus
Vibration playback status.
@ PLAYING
Currently playing.
@ CALIBRATING
Calibrating.
@ LRA
Linear Resonant Actuator.
@ ERM
Eccentric Rotating Mass motor.
@ INTERNAL_TRIGGER
Play by selecting waveforms/effects and calling run()
@ DIAGNOSTICS
Diagnostics mode.
@ REAL_TIME_PLAYBACK
RTP mode (direct drive value)
Driver for the TI DRV2605/DRV2604 haptic motor controller.
uint32_t getVbat() override
Get the battery voltage.
bool setActuatorType(HapticActuatorType type) override
Set the actuator type.
HapticActuatorType getActuatorType() const override
Get the actuator type.
bool calibrate() override
Perform auto-calibration.
uint32_t getF0() const override
Get the measured resonant frequency (F0).
void selectLibrary(uint8_t lib)
Select the ROM waveform library.
bool isPlaying() const override
Check if haptic is currently playing.
bool setMode(HapticMode mode) override
Set the operating mode.
bool setSequence(uint8_t slot, HapticEffectId effect) override
Set a waveform in the sequence.
HapticStatus getStatus() const override
Get current playback status.
uint8_t getChipID() const override
Get the chip ID.
bool playSequence() override
Play the waveform sequence.
bool playEffect(HapticEffectId effect) override
Play a haptic effect.
const char * getChipName() const override
Get the chip name.
HapticMode getMode() const override
Get the current operating mode.
bool stop() override
Stop haptic playback immediately.
bool clearSequence() override
Clear the waveform sequence.
HapticCapabilities getCapabilities() const override
Get device capabilities.
bool setRealtimeValue(uint8_t value) override
Set RTP (real-time playback) value.
bool begin(SensorCommCustom::CustomCallback cb, SensorCommCustomHal::CustomHalCallback hal_cb, uint8_t addr)
Initialize the sensor using custom callback interface.
void testPlayEffectRange()
void testLibrarySelection()
HapticDriver_DRV2605 haptic