这是一种基于航位推算原理设计的平面定位装置,属于相对定位方式,存在积分误差且误差随时间增大。
前一版本使用Arduino nano写,这一版本使用Stm32duino(F103c8t6)。
详见https://github.com/stm32duino/Arduino_Core_STM32
* 详见https://github.com/adafruit/Adafruit_SSD1306
* 按照Adafruit官方说明,还需要安装Adafruit GFX library,详见https://github.com/adafruit/Adafruit-GFX-Library
我电脑中该文件的路径在
C:\Users\Vulcan\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.5.0\variants\BLUEPILL_F103XX\variant.h
以供参考,appdata文件夹为隐藏文件夹注意寻找方法。
- 将
// UART Definitions
#define SERIAL_UART_INSTANCE 1
// Default pin used for 'Serial' instance
// Mandatory for Firmata
#define PIN_SERIAL_RX PA10
#define PIN_SERIAL_TX PA9
改为
// UART Definitions
#define SERIAL_UART_INSTANCE 1
// Default pin used for 'Serial' instance
// Mandatory for Firmata
#define PIN_SERIAL_RX PB7
#define PIN_SERIAL_TX PB6
#define ENABLE_HWSERIAL2
#define PIN_SERIAL2_RX PA3
#define PIN_SERIAL2_TX PA2
- 使用 Serial 的 PB6作为TX引脚 PB7作为RX引脚
- 打开 Serial2 RX--PA3 TX--PA2
- 将
// I2C Definitions
#define PIN_WIRE_SDA PB7
#define PIN_WIRE_SCL PB6
改为
// I2C Definitions
#define PIN_WIRE_SDA PB11
#define PIN_WIRE_SCL PB10
- 更改SDA1使用的引脚
- 板子选择
- 开始烧录
一.添加帧格式传输
考虑到有的单片机将String转换为float不方便,因此添加帧格式通信方式。
帧头0x55,帧尾0xAA。
int32_t x0 = x * 100;
byte x1 = x0 & 0xff;
byte x2 = (x0 >> 8) & 0xff;
byte x3 = (x0 >> 16) & 0xff;
byte x4 = (x0 >> 24) & 0xff;
int32_t y0 = y * 100;
byte y1 = y0 & 0xff;
byte y2 = (y0 >> 8) & 0xff;
byte y3 = (y0 >> 16) & 0xff;
byte y4 = (y0 >> 24) & 0xff;
int16_t p0 = p * 100;
byte p1 = p0 & 0xff;
byte p2 = (p0 >> 8) & 0xff;
Serial1.write(0x55);
Serial1.write(x1);
Serial1.write(x2);
Serial1.write(x3);
Serial1.write(x4);
Serial1.write(y1);
Serial1.write(y2);
Serial1.write(y3);
Serial1.write(y4);
Serial1.write(p1);
Serial1.write(p2);
Serial1.write(0xAA);