首页 > 解决方案 > 在 atmega328p 上复制 Arduino 的串行通信

问题描述

我有一个简单的电路,带有一个 ESP8266 和一个 Arduino Nano,通过串行通信。

为了测试这种通信,我发送了一个简单的“打开”字符串,Arduino 应该打开一个 LED。

这是Arduino代码:

void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT);
}

void loop() {

  if(Serial.available() > 0) 
  {
    String command = "";
    while(Serial.available())
    {
      command += (char)Serial.read();
      delay(1);
      if (command == "T"){
        while(Serial.available())
        {
          command += (char)Serial.read();
          delay(1);
        }
      }else{
        command = "";
      }
    }

    if(command == "TURN ON") {
      digitalWrite(3, HIGH);  
    }

    if(command == "TURN OFF") {
      digitalWrite(3, LOW);
    }
  }

  delay(500);
}

这工作正常。

现在,我想用 Atmega328p 替换 Arduino。

我有基本电路: 在此处输入图像描述

加上 LED,以及连接到 ESP8266 的 TX 和 RX 引脚。

如果我将相同的代码上传到 Atmega328p,它不起作用,所以我想我错过了一些非常重要的东西(比如 UART 配置或其他东西),但我不知道那是什么

标签: arduinoatmegaserial-communication

解决方案


我猜你在 Atmega328p 上使用了外部编程器,它是新的 Atmega328p。

如果我的假设是正确的,那么 Atmega328p 中的保险丝位被设置为使用内部 1MHz 时钟,这就是问题所在。

你可以做些什么来解决这个问题:将编程器连接到 Atmega328p 转到工具>板,在板中选择 Arduino Uno。转到工具>程序员选择您正在使用的程序员。转到工具并选择刻录引导加载程序。

然后您可以将您的代码上传到 Atmega328p,它应该会按照您期望的方式开始工作。

我希望这有帮助。


推荐阅读