打印HardwareSerial类型的名称

时间:2014-05-06 18:37:42

标签: c++ arduino

我正在迭代硬件串口,我想打印一些当前正在使用的端口的状态信息。如何打印HardwareSerial类型的名称?一些示例代码:

HardwareSerial *possible_ports[] = {&Serial2, &Serial3};
int port_count = 2;
for (int i=0; i<port_count; i++) {
    Serial.print("using: ");
    Serial.println(*possible_ports[i]);
}
尝试此操作时出现编译错误:

"no known conversion for argument 1 from 'HardwareSerial' to 'const Printable&'"

1 个答案:

答案 0 :(得分:0)

好吧,正如编译器告诉你的那样,你不能打印HardwareSerial,因为它毫无意义。

但是,你没有采取正确的方法解决问题,因为这是一个折叠的问题:

  • 根据硬件的不同,您可能拥有不同数量的串口;
  • 在您设置的设置中或不是串口。

对于第一点,你可以做的并不多,一切都是在编译时设置的,而这是你必须实现的:不同的用例取决于不同的AVR。 / p>

HardwareSerial *possible_ports[] = {
#if defined(UBRRH) || defined(UBRR0H)
&Serial,
#endif
#if defined(UBBR1H)
&Serial1, 
#endif
#if defined(UBBR2H)
&Serial2,
#endif
#if defined(UBBR3H)
&Serial3
#endif
};

关于第二点,我不认为在HardwareSerial类中有什么可以测试的,尽管你可以自己做:

bool serial_is_configured() {
    return (_BV(TXEN0) & UCSRB == _BV(TXEN0));
} 
bool serial1_is_configured() {
    return (_BV(TXEN1) & UCSRB == _BV(TXEN1));
} 
// ...

参见HardwareSerial的源代码:

在那里:

  • cbi()清除了一点
  • sbi()设置了一下

HTH