Add accelerometer deadzone via UART and ESP-NOW.

Filter BMA456 logs by configurable LSB threshold; master can set deadzone
for local sensor or slaves using ACCEL_DEADZONE (UART) and ESP-NOW broadcast
until unicast delivery is restored.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-18 23:06:25 +02:00
co-authored by Cursor
parent e5db0b21c7
commit ee38ce551a
24 changed files with 838 additions and 73 deletions
+26
View File
@@ -38,6 +38,32 @@ func (s *serialPort) Close() error {
return s.port.Close()
}
func (s *serialPort) exchangePayload(payload []byte, cmdName string) ([]byte, error) {
if len(payload) == 0 {
return nil, fmt.Errorf("empty payload")
}
frame, err := uartframe.EncodeFrame(payload)
if err != nil {
return nil, fmt.Errorf("encode frame: %w", err)
}
log.Printf("sending %s command (%d bytes): % x", cmdName, len(frame), frame)
if _, err := s.port.Write(frame); err != nil {
return nil, fmt.Errorf("write: %w", err)
}
respPayload, err := uartframe.ReadFrame(s.port, nil)
if err != nil {
return nil, fmt.Errorf("read response: %w", err)
}
log.Printf("response payload (%d bytes): % x", len(respPayload), respPayload)
if len(respPayload) == 0 {
return nil, fmt.Errorf("empty response payload")
}
return respPayload, nil
}
func (s *serialPort) exchange(cmdID byte, cmdName string) ([]byte, error) {
frame, err := uartframe.EncodeFrame([]byte{cmdID})
if err != nil {