我试过用软串行库编写蓝牙发送的PPM值阅读器。PPM阅读器在添加BTSerial.println(value1);之前工作正常

#include <PPMReader.h>
#include <InterruptHandler.h>
#include <SoftwareSerial.h>

int interruptPin = 3;
int channelAmount = 2;
int pwmOutPin = 2;


PPMReader ppm(interruptPin, channelAmount);
SoftwareSerial BTSerial(8,9);

void setup()
{
  Serial.begin(9600);
  BTSerial.begin(9600);
  BTSerial.write("AT\r\n");
  BTSerial.write("AT\r\n");
  BTSerial.write("AT+INQ\r\n");
  delay(5000);
  BTSerial.write("AT+CONN1\r\n");

  Serial.println("Started");
}

void loop()
{

  unsigned int value1 = ppm.latestValidChannelValue(1, 0);

  BTSerial.println(value1);
  Serial.println("value1: " + String(value1));

}

BTSerial.println值为:
1500
1500
1500
1498
1500
etc...

BTSerial.println值为:
1500
1304
1500
1076
1848


最正确的值是稳定的1500
我做什么坏事?我能优化这个的性能吗?板是Arduino Nano V3。

最佳答案

串行打印可以大大降低程序在小型单片机上的执行速度。SoftwareSerial非常需要资源。最好的方法是不要使用它。获得一个基于Arduino Mega的板,它有四个硬件串行外围设备。或者,将您的诊断输出到SPI/I2C并通过逻辑分析仪读取输出。
如果您不能执行上述任何操作,请尝试提高Serial数据速率。

10-06 03:35