This commit is contained in:
玖叁 2024-12-18 16:10:26 +08:00
parent 9773660492
commit 1fb8e6f30b
2 changed files with 73 additions and 3 deletions

View File

@ -28,13 +28,24 @@
返回示例 `01 05 10 01 FE` 返回示例 `01 05 10 01 FE`
### 查询超声波距离 `0x11` ### 查询 SPI Flash 挂载状态 `0x11`
查询示例 `00 04 11 FF` 查询示例 `00 04 11 FF`
| 返回数据 | 含义 |
| -------- | ---- |
| 01 | 已挂载 |
| 00 | 未挂载 |
返回示例 `01 05 11 01 FE`
### 查询超声波距离 `0x12`
查询示例 `00 04 12 FF`
返回一个 4 字节浮点数,表示距离,单位 m 返回一个 4 字节浮点数,表示距离,单位 m
返回示例 `01 08 11 距离3 距离2 距离1 距离0 FE` 返回示例 `01 08 12 距离3 距离2 距离1 距离0 FE`
## 控制 ## 控制

View File

@ -3,6 +3,7 @@
#include <BLEServer.h> #include <BLEServer.h>
#include <BLEUtils.h> #include <BLEUtils.h>
#include <BLE2902.h> #include <BLE2902.h>
#include <SPIFFS.h>
#include "consts.h" #include "consts.h"
// 使用 2 片 TB6612 控制 4 个电机 // 使用 2 片 TB6612 控制 4 个电机
@ -16,7 +17,8 @@
// 指令定义 // 指令定义
#define CMD_GET_BT_STATUS 0x10 #define CMD_GET_BT_STATUS 0x10
#define CMD_GET_DISTANCE 0x11 #define CMD_GET_SPIFFS_STATUS 0x11
#define CMD_GET_DISTANCE 0x12
#define CMD_MOTOR_MOVE_CONTROL 0x20 #define CMD_MOTOR_MOVE_CONTROL 0x20
#define CMD_MOTOR_ROTATE_CONTROL 0x21 #define CMD_MOTOR_ROTATE_CONTROL 0x21
@ -121,6 +123,48 @@ float getDistance()
return distance; return distance;
} }
class CarStorage
{
public:
static bool isMounted;
static void init()
{
if (!SPIFFS.begin(true))
{
Serial.println("SPIFFS Mount Failed");
isMounted = false;
}
else
isMounted = true;
}
static unsigned int getSensitivity()
{
if (!isMounted)
return 0xFF;
File file = SPIFFS.open("/sensitivity.txt", "r");
if (!file)
return 0xFF;
String sensitivity = file.readStringUntil('\n');
file.close();
return sensitivity.toInt();
}
static void setSensitivity(unsigned int sensitivity)
{
if (!isMounted)
return;
File file = SPIFFS.open("/sensitivity.txt", "w");
file.println(sensitivity);
file.close();
}
};
void setup() void setup()
{ {
// 初始化串口 // 初始化串口
@ -148,6 +192,9 @@ void setup()
pService->start(); pService->start();
pServer->getAdvertising()->start(); pServer->getAdvertising()->start();
// 初始化 EEPROM
CarStorage::init();
// 设置引脚模式 // 设置引脚模式
pinMode(STATUS_LED, OUTPUT); pinMode(STATUS_LED, OUTPUT);
digitalWrite(STATUS_LED, HIGH); digitalWrite(STATUS_LED, HIGH);
@ -198,6 +245,18 @@ void handleSerialPacket(uint8_t *packet, int length, BLECharacteristic &characte
characteristic.notify(); characteristic.notify();
break; break;
case CMD_GET_SPIFFS_STATUS:
Serial.println("CMD_GET_SPIFFS_STATUS");
// 构建响应数据
buffer[0] = PACKET_T_HEAD;
buffer[1] = 0x05;
buffer[2] = CMD_GET_SPIFFS_STATUS;
buffer[3] = (uint8_t)(CarStorage::isMounted ? 0x01 : 0x00);
buffer[4] = PACKET_T_TAIL;
characteristic.setValue(buffer, 5);
characteristic.notify();
break;
case CMD_GET_DISTANCE: case CMD_GET_DISTANCE:
distance = getDistance(); distance = getDistance();
Serial.println("CMD_GET_DISTANCE, distance: " + String(distance)); Serial.println("CMD_GET_DISTANCE, distance: " + String(distance));