Arduino 数据发送/接收状态LED功能

Arduino 数据发送/接收状态LED功能,arduino,embedded,led,transmission,Arduino,Embedded,Led,Transmission,很多硬件都带有Tx/Rx状态指示灯,但如果您的硬件没有,并且您想查看数据是否正在传输,该怎么办?如果您只是将LED设置为该行的值,它可能会在您看到它之前打开或关闭( 如果您不希望计时器即使在没有通信量的情况下也始终启动,您可以更改接收或发送中断来启用计时器,并且计时器可以在关闭LED时自行禁用。一个简单的方法是在Tx/Rx中断中打开LED,并启动一个约200ms的计时器(足够长以感知)。然后关闭计时器ISR中的LED 这样,在最后一次发送/接收活动200 ms后,指示灯熄灭。如果活动持续,指示灯

很多硬件都带有Tx/Rx状态指示灯,但如果您的硬件没有,并且您想查看数据是否正在传输,该怎么办?如果您只是将LED设置为该行的值,它可能会在您看到它之前打开或关闭(
如果您不希望计时器即使在没有通信量的情况下也始终启动,您可以更改
接收或发送中断来启用计时器,并且计时器可以在关闭LED时自行禁用。

一个简单的方法是在Tx/Rx中断中打开LED,并启动一个约200ms的计时器(足够长以感知)。然后关闭计时器ISR中的LED

这样,在最后一次发送/接收活动200 ms后,指示灯熄灭。如果活动持续,指示灯将保持点亮


如果发送/接收脉冲间隔大于200ms,则指示灯将闪烁。因此,关闭、打开和闪烁状态将广泛指示数据活动。

因此,您的基本问题是您希望为LED设置最小开启时间。您是否还希望确保它在一定时间内保持关闭,以便这是一种“运动”的感觉或者你更喜欢LED持续亮起,只要在最小开启时间到期之前传输另一个字符?作为补充说明,最小开启时间现在被认为是一种良好的安全实践,因为几年前有人研究通过记录开关面板上的灯来嗅探网络流量。哇,我没有idea、 而是一种“理想”情况可能是交通出现LED=!LED每隔.1秒左右一次事实上,为了确保这是一个实际的开/关信号,也许我想让它做些别的事情。老实说,我不知道什么是最好的…你看起来很有知识,你推荐什么?@Samskue:你有提到过交通嗅探吗?听起来很有趣!@MartinThompson,我这是2002年的Slashdot故事(我很惊讶我记得很久以前的事情),这是报纸。啊,好的,所以只有在有流量(1->0,0->1)的情况下,才会每.1秒切换一次,而在稳定(1->1)的情况下不会切换.对。它还假设没有其他任何东西在使用该LED,并且它有点假设LED开始处于“关闭”状态,尽管如果该假设是错误的,它会在第一个交通指示灯后自行修复。嘿,我很欣赏编码的开头!我只是无法想象最终结果。这是不完整的,因为它没有解决这个问题如何实现上述中断。我可以看到使用ISR(UART_RX_vect)和ISR(UART_TX_vect)的情况,但它们只是双缓冲(小)。因此,在完成初始字节时,它们只会快速跳闸一次。或者是TX的UDRn缓冲区在这两个字节之间填满,为下一个字节做好准备,并且完全为空。在UART_UDRE_vect之后但在UART_TX_vect之前。Rx的情况并非如此。启用ISR()还需要中断()vectors.@mpflaga,OP没有问如何实现中断,他问的是一个通用算法来实现流量LED的最小时间-想象一下我的代码是从他实现的任何中断处理程序调用的函数。他还说这可能在Mbed或Arduino上,那么我会使用谁的中断语法和处理呢?
void receive_or_transmit_interrupt()
{
     g_traffic = true;
     /* other stuff. */
}

void timer_that_fires_every_100_milliseconds()
{
     if ( led == ON)
     {
          led = OFF;
          g_traffic = false;
     }
     else if ( g_traffic )
     {
          led = ON;
     }
}