#include #include // 使用 BMI270 感測器函式庫 // 定義 BLE 服務與特性 UUID BLEService myService("19b10000-e8f2-537e-4f6c-d104768a1214"); BLEIntCharacteristic motorControlCharacteristic("19b10001-e8f2-537e-4f6c-d104768a1214", BLERead | BLEWrite | BLENotify); // 震動馬達控制引腳 const int motor1 = 9; const int motor2 = 10; // 固定震動時間與強度(可自行調整) const int FIXED_DURATION = 200; // 震動時間 (毫秒) const int FIXED_POWER = 150; // 震動強度 (0~255) void setup() { Serial.begin(115200); while (!Serial); pinMode(motor1, OUTPUT); pinMode(motor2, OUTPUT); analogWrite(motor1, 0); analogWrite(motor2, 0); // 初始化 BMI270 IMU if (!IMU.begin()) { Serial.println("BMI270 初始化失敗!"); while (1); } if (!BLE.begin()) { Serial.println("初始化 BLE 失敗!"); while (1); } BLE.setLocalName("Nano33BLE"); BLE.setAdvertisedService(myService); myService.addCharacteristic(motorControlCharacteristic); BLE.addService(myService); BLE.advertise(); Serial.println("BLE 設備已啟動,等待連接..."); } void loop() { BLEDevice central = BLE.central(); if (central) { Serial.print("已連接到: "); Serial.println(central.address()); while (central.connected()) { Serial.print("收到"); // 當收到控制指令後,直接讀取整數值處理 if (motorControlCharacteristic.written()) { Serial.print("收到控制指令: "); int commandValue = motorControlCharacteristic.value(); Serial.println(commandValue); controlMotor(commandValue); } delay(100); } Serial.println("設備已斷開"); } } void controlMotor(int commandValue) { if (commandValue == 1) { Serial.println("控制 MOTOR1"); vibrateMotor(motor1, FIXED_DURATION, FIXED_POWER); } else if (commandValue == 2) { Serial.println("控制 MOTOR2"); vibrateMotor(motor2, FIXED_DURATION, FIXED_POWER); } else { Serial.println("未知的指令"); } } void vibrateMotor(int motor, int duration, int power) { analogWrite(motor, power); delay(duration); analogWrite(motor, 0); }