我试过用软串行库编写蓝牙发送的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
数据速率。