首页 > 解决方案 > 仅使用寄存器的 2 个 Arduino Uno 之间的串行通信

问题描述

我需要在 2 个 Arduino Uno 之间传输一个字符串,使用没有功能的串行通信(只是操作寄存器,例如 UDR0)。

我可以使用发送字符串

#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1


void USART_Init(unsigned int ubrr)
{
  UBRR0H=(unsigned char)(ubrr>>8);
  UBRR0L=(unsigned char)ubrr;
  UCSR0B=(1<<RXEN0)|(1<<TXEN0);
  UCSR0C=(1<<USBS0)|(3<<UCSZ00);
}

void USART_Transmit(unsigned char data)
{
  while(!(UCSR0A&(1<<UDRE0)));
  UDR0=data;
}

void SendString(char *StringPtr)
{
  while(*StringPtr !=0x00)
  {
    USART_Transmit(*StringPtr);
    StringPtr++;
  }
}

void setup()
{
    USART_Init(MYUBRR);
}

void loop()
{
 SendString("123456");
  delay(1000);
}

但我不知道如何复制另一端的UDR0寄存器的内容。该功能应该是这样的:

unsigned char USART_Receive(void)
{
  while(!(UCSR0A&(1<<RXC0)))

  return UDR0;
}

但我不知道如何实际使用它;我需要将所有这些字符从串行保存到一个字符串,然后在连接到第二个 Arduino Uno 的 LCD 上显示该字符串,但是每次当我尝试接收更多的一个字符时,它都工作得非常糟糕(空格,一个很多零,无效字符)。

我读到如果我有一个 LCD 连接到第二个 arduino,最好不要使用 USART_Receive() 函数,并将其作为中断来实现,但我也不知道该怎么做。

你知道如何将字符串传输到另一个 Arduino 吗?

标签: carduinoarduino-unoserial-communication

解决方案


也许尝试将所有字符放入一个大数组中,然后将该数组发送到您的 LCD。这样,读取一个字符和下一个字符之间的时间就最小化了。(UART是异步的,所以如果你太慢,你会错过请求的数据)。


推荐阅读