我经常被问到的一个问题是如何使用代码重置Arduino。这听起来像是你永远都不应该做的事情。但以编程方式重置Arduino很可能是你在Arduino旅程中最终会遇到的事情!

Arduino(或几乎任何类型的微控制器)有两种基本的重置类型。

  • 硬件复位-物理连接一些引脚或按下按钮重新启动Arduino。
  • 软件复位-执行导致Arduino重新启动的代码段。

Arduino硬件复位

在我们学习如何使用代码重置Arduino之前,让我们先谈谈硬件重置。实际上,从代码中使用硬件也是可能的!

在Arduino上你会发现一个按钮。按下这个按钮是硬件复位。几乎我们所有人都曾在某个时间点做过这样的事。要么是我们的代码挂起了,要么就是有什么东西运行不正常。按下重置键!

Arduino硬件复位按钮

然而,你可能没有注意到,但是Arduino的一个输入引脚也被标记为重置!把这个引脚接地,就能重启Arduino!这个大头针最初是为了让Arduino Shields有自己的重置按钮。特别是如果他们盖住了机上的复位按钮,使它很难(甚至不可能)按下,而防护罩安装。

虽然我们很快就会在这里得到真正的软件重置,但通过编程来重置Arduino可以使用这个大头针!我们要做的就是用Arduino的一个数字引脚把引脚的代码调低。

我还发现这个别针非常有用,当我有覆盆子π或者通过主Arduino运行其他ArduinoI2C或SPI。如果RPi或主Arduino失去连接,他们可以简单地接地复位引脚,重新启动从设备,尝试恢复。

Arduino硬件复位引脚

软件接线图使用代码复位Arduino

如前所述,如何使用代码和硬件重置Arduino是可能的,通过以下超级简单的连接。简单地连接任何数字引脚到复位引脚。在本例中,我们将使用数字pin 4。

Arduino软件使用硬件引脚接线说明复位

硬件使用Code重新启动Arduino

现在我们可以硬件复位Arduino使用代码!

注意:如果有任何问题,只是删除线之间的引脚4和复位引脚。这将阻止Arduino处于重置循环。

/* * HOW TO RESET AN ARDUUINO USING CODE: HARDWARE RESET * By: TheGeekPub.com * More Arduino教程://www.ergcommercial.com/arduino-tutorials/ */ int ResetPin = 4;void setup() {digitalWrite(ResetPin, HIGH);//将数字引脚设置为5V pinMode(ResetPin, OUTPUT);//将数字引脚设置为输出引脚Serial.begin(9600);} void loop(){//一个有趣的倒计时!3…2…1以“3 . . ");延迟(1000);以“2 . . ");延迟(1000); Serial.println("1.."); delay(1000); Serial.println("We are now resetting Arduino programmatically"); Serial.println(); delay(1000); digitalWrite(ResetPin, LOW); // This command grouunds the reset pin and reboots the Arduino Serial.println("If it worked, the Arduino will never output this line!"); }

如果这段代码运行正常,Arduino将永远不会到达或执行下面这行代码。

系列。println(“如果它工作,Arduino将永远不会输出这行!”);

在串行控制台中,输出应该如下所示:

如果你看到“If it worked, the Arduino will never output this line!”“屏幕上的这条线有问题。检查您的线路和代码,如果有错误,请重新上传。如果你在上传代码时出现错误,请移除连接引脚4到复位线的电线。这将阻止Arduino陷入复位循环。

Arduino软件复位

现在我们来学习如何使用代码来重置Arduino。真的不需要:只使用代码。一个软件重置!

使用Code重新启动Arduino

这段代码只是调用软件复位功能,而不是将复位引脚接地。请记住,如果Arduino上的软件崩溃,软件复位将永远不会执行。了解软件重置的局限性!

/* * HOW TO RESET AN ARDUUINO USING CODE: SOFTWARE RESET * By: TheGeekPub.com * More Arduino教程://www.ergcommercial.com/arduino-tutorials/ */ void(* resetFunc) (void) = 0;//创建一个标准的重置函数void setup() {Serial.begin(9600);} void loop(){//一个有趣的倒计时!3…2…1以“3 . . ");延迟(1000);以“2 . . ");延迟(1000);以“1 . .”);延迟(1000); Serial.println("We are now resetting Arduino programmatically"); Serial.println(); delay(1000); resetFunc(); // reset the Arduino via software function Serial.println("If it worked, the Arduino will never output this line!"); }

输出应该与上面的硬件复位代码相同。

重启Arduino

下一个步骤

现在您可以继续阅读下一个教程,或者返回索引!