Example Code for Arduino-All Vibration Patterns

Upload the following code, the LRA motor will start work, and switch a vibration mode every two second. The vibration mode could be check in the serial monitor.

This driver is specifically designed for LRA motors and is not compatible with ERM (Eccentric Rotating Mass) motors.

Hardware Preparation

Software Preparation

  • Download Arduino IDE: Click to download Arduino IDE
  • Download DFRobot_TM6605 library:DFRobot TM6605 Github
  • Arduino IDE V1.8.19 (or below) can download .zip file and unzip into the library folder in the Arduino IDE installation path.
  • Arduino IDE V2.0.0(or above) can search and install the library in the library manager.

Wiring Diagram

Sample Code

/*!
 * @file demo.ino
 * @brief This demo showcases all the vibration effects of the TM6605.
 * @copyright	Copyright (c) 2025 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license The MIT License (MIT)
 * @author [fary]([email protected])
 * @version V1.0
 * @date 2025-04-08
 * @url https://github.com/DFRobot/DFRobot_TM6605
 */
#include "DFRobot_TM6605.h"
DFRobot_TM6605 TM6605;
DFRobot_TM6605::eEffect_t effects[] = {
   DFRobot_TM6605::eSharpClick,  DFRobot_TM6605::eInstantClick,  DFRobot_TM6605::eLightTap,  DFRobot_TM6605::eDoubleClick,
   DFRobot_TM6605::eLightPulse,  DFRobot_TM6605::eStrongAlert,  DFRobot_TM6605::eMediumDurationAlert,  DFRobot_TM6605::eSharpClick2,
   DFRobot_TM6605::eMediumClick,  DFRobot_TM6605::eFlashStrike,  DFRobot_TM6605::eDoubleHighClickShort,  DFRobot_TM6605::eDoubleMediumClickShort,
   DFRobot_TM6605::eDoubleFlashStrikeShort, DFRobot_TM6605::eDoubleInstantClickLong,  DFRobot_TM6605::eDoubleMediumInstantClickLong,
   DFRobot_TM6605::eDoubleFlashStrikeLong,  DFRobot_TM6605::eAlert,  DFRobot_TM6605::eToggleClick,  DFRobot_TM6605::eLongSlowFadeTransition1,
   DFRobot_TM6605::eLongSlowFadeTransition2,  DFRobot_TM6605::eMediumSlowFadeTransition1,  DFRobot_TM6605::eMediumSlowFadeTransition2,
   DFRobot_TM6605::eShortSlowFadeTransition1, DFRobot_TM6605::eShortSlowFadeTransition2,  DFRobot_TM6605::eLongFastFadeTransition1,
   DFRobot_TM6605::eLongFastFadeTransition2,  DFRobot_TM6605::eMediumFastFadeTransition1,  DFRobot_TM6605::eMediumFastFadeTransition2,
   DFRobot_TM6605::eShortFastFadeTransition1, DFRobot_TM6605::eShortFastFadeTransition2,  DFRobot_TM6605::eLongSlowBoostTransition1,
   DFRobot_TM6605::eLongSlowBoostTransition2, DFRobot_TM6605::eMediumSlowBoostTransition1, DFRobot_TM6605::eMediumSlowBoostTransition2,
   DFRobot_TM6605::eShortSlowBoostTransition1,DFRobot_TM6605::eShortSlowBoostTransition2,  DFRobot_TM6605::eLongFastBoostTransition1,
   DFRobot_TM6605::eLongFastBoostTransition2, DFRobot_TM6605::eMediumFastBoostTransition1, DFRobot_TM6605::eMediumFastBoostTransition2,
   DFRobot_TM6605::eShortFastBoostTransition1,DFRobot_TM6605::eShortFastBoostTransition2,  DFRobot_TM6605::eLongAlert, DFRobot_TM6605::eSoftNoise,
   DFRobot_TM6605::eSleepCommand
};
void setup() {
	Serial.begin(115200);
	while(!Serial);
	Serial.print("TM6605 init...");
	while(TM6605.begin()!=0){
		Serial.print("failed,Not found TM6605!");
	}
	Serial.println("successed");
	TM6605.play();
}
  
void loop() {
  // Traverse all effects
  for (auto effect  : effects) {
    Serial.print("Playing: ");
    Serial.print(getEffectName(effect));
    Serial.print(" (ID:");
    Serial.print(effect);
    Serial.println(")");
    if(effect==TM6605.eSleepCommand)
			continue;
    TM6605.selectEffect(effect);
    TM6605.play();
    delay(2000); // Each effect is displayed for 2 seconds.
    if(effect==TM6605.eLongAlert)
			delay(8000);
    TM6605.stop(); // Stop the current effect.
    delay(500);   // The effect interval is 500ms.
  }
}

const char* getEffectName(uint8_t effect) {
	switch(effect) {
	  case TM6605.eSharpClick:                return "Sharp Click";
	  case TM6605.eInstantClick:              return "Instant Click";
	  case TM6605.eLightTap:                  return "Light Tap";
	  case TM6605.eDoubleClick:               return "Double Click";
	  case TM6605.eLightPulse:                return "Light Pulse";
	  case TM6605.eStrongAlert:               return "Strong Alert";
	  case TM6605.eMediumDurationAlert:       return "Medium Alert";
	  case TM6605.eSharpClick2:               return "Sharp Click2";
	  case TM6605.eMediumClick:               return "Medium Click";
	  case TM6605.eFlashStrike:               return "Flash Strike";
	  case TM6605.eDoubleHighClickShort:      return "Double High Click (Short)";
	  case TM6605.eDoubleMediumClickShort:    return "Double Medium Click (Short)";
	  case TM6605.eDoubleFlashStrikeShort:    return "Double Flash Strike (Short)";
	  case TM6605.eDoubleInstantClickLong:    return "Double Instant Click (Long)";
	  case TM6605.eDoubleMediumInstantClickLong: return "Double Medium Instant Click (Long)";
	  case TM6605.eDoubleFlashStrikeLong:     return "Double Flash Strike (Long)";
	  case TM6605.eAlert:                     return "Alert";
	  case TM6605.eToggleClick:               return "Toggle Click";
	  case TM6605.eLongSlowFadeTransition1:   return "Long Slow Fade 1";
	  case TM6605.eLongSlowFadeTransition2:   return "Long Slow Fade 2";
	  case TM6605.eMediumSlowFadeTransition1: return "Medium Slow Fade 1";
	  case TM6605.eMediumSlowFadeTransition2: return "Medium Slow Fade 2";
	  case TM6605.eShortSlowFadeTransition1:  return "Short Slow Fade 1";
	  case TM6605.eShortSlowFadeTransition2:  return "Short Slow Fade 2";
	  case TM6605.eLongFastFadeTransition1:   return "Long Fast Fade 1";
	  case TM6605.eLongFastFadeTransition2:   return "Long Fast Fade 2";
	  case TM6605.eMediumFastFadeTransition1: return "Medium Fast Fade 1";
	  case TM6605.eMediumFastFadeTransition2: return "Medium Fast Fade 2";
	  case TM6605.eShortFastFadeTransition1:  return "Short Fast Fade 1";
	  case TM6605.eShortFastFadeTransition2:  return "Short Fast Fade 2";
	  case TM6605.eLongSlowBoostTransition1:  return "Long Slow Boost 1";
	  case TM6605.eLongSlowBoostTransition2:  return "Long Slow Boost 2";
	  case TM6605.eMediumSlowBoostTransition1: return "Medium Slow Boost 1";
	  case TM6605.eMediumSlowBoostTransition2: return "Medium Slow Boost 2";
	  case TM6605.eShortSlowBoostTransition1: return "Short Slow Boost 1";
	  case TM6605.eShortSlowBoostTransition2: return "Short Slow Boost 2";
	  case TM6605.eLongFastBoostTransition1:  return "Long Fast Boost 1";
	  case TM6605.eLongFastBoostTransition2:  return "Long Fast Boost 2";
	  case TM6605.eMediumFastBoostTransition1: return "Medium Fast Boost 1";
	  case TM6605.eMediumFastBoostTransition2: return "Medium Fast Boost 2";
	  case TM6605.eShortFstBoostTransition1: return "Short Fast Boost 1";
	  case TM6605.eShortFastBoostTransition2: return "Short Fast Boost 2";
	  case TM6605.eLongAlert:                 return "Long Alert";
	  case TM6605.eSoftNoise:                 return "Soft Noise";
	  case TM6605.eSleepCommand:              return "Sleep Command";
	  default:                         return "Unknown Effect";
	}
}

Result

  • The LRA motor will start working and switch to a new vibration mode every two seconds
  • The name and ID of the current vibration mode will be displayed in the serial monitor (set to 115200 baud rate)

Vibration mode

Effect Duration(ms) Effect Duration(ms) Effect Duration(ms)
SharpClick 65 InstantClick 45 LightTap 130
DoubleClick 200 LightPulse 215 StrongAlert 190
MediumDurationAlert 730 SharpClick2 90 MediumClick 65
FlashStrike 20 DoubleHighClickShort 120 DoubleMediumClickShort 120
DoubleFlashStrikeShort 100 DoubleInstantClickLong 150 DoubleMediumInstantClickLong 150
DoubleFlashStrikeLong 100 Alert 240 ToggleClick 620
LongSlowFadeTransition1 390 LongSlowFadeTransition2 620 MediumSlowFadeTransition1 400
MediumSlowFadeTransition2 650 ShortSlowFadeTransition1 410 ShortSlowFadeTransition2 490
LongFastFadeTransition1 340 LongFastFadeTransition2 390 MediumFastFadeTransition1 310
MediumFastFadeTransition2 360 ShortFastFadeTransition1 340 ShortFastFadeTransition2 350
LongSlowBoostTransition1 320 LongSlowBoostTransition2 650 ShortSlowBoostTransition2 460
MediumSlowBoostTransition2 640 ShortSlowBoostTransition1 320 MediumFastBoostTransition11 320
LongFastBoostTransition1 290 LongFastBoostTransition2 615 ShortFastBoostTransition2 470
MediumFastBoostTransition2 590 ShortFastBoostTransition1 330 SleepCommand
LongAlert 10000 SoftNoise 480

Was this article helpful?

TOP