我有下面的设置。我发现我的arduino重新启动了。我有Arduino板,液晶显示器,传感器。传感器和LCD显示器共享共地和5v电源,由7805 IC和Arduino板使用7812稳压IC供电。最后,它们处于共同接地电位之下。现在我有了一段代码。我单独尝试了每个功能都工作正常,没有任何错误,Arduino板不会被重置。当我把所有的代码块放在一起的时候。要重新启动。一旦它重新启动工作正常几分钟,再次重置。
如何解决这个问题?
#include <LiquidCrystal.h> #include <avr/wdt.h> LiquidCrystal lcd(12, 11, 7, 6, 5, 4); void setup() { Serial.begin(9600); wdt_enable(WDTO_8S); MODE=INIT; pinMode(beeper, OUTPUT); lcdClear(); } void loop() { Track_loop(); LCD_Display(); CHK_Key(); wdt_reset(); Serial.println(".........................."); } void Track_loop() { calcPos(); calcTime(); calcElevationAngle(); callMode(); actuate(); // checkHWFaults(); Wind_calc(); Print_Result(); } void Print_Result() { Print_Date(); Print_Time(); }
我已经在我的串行中添加了这些功能。println语句
void Print_Date(){
Serial.print("Local Date:");
Serial.print(local_day);
Serial.print("/");
Serial.print(local_month);
Serial.print("/");
Serial.println(local_year);
}
void Print_Time()
{ Serial.print("local_time is:");
Serial.print(local_h);
Serial.print("-");
Serial.print(local_m);
Serial.print("-");
Serial.println(local_s);
}
我怀疑你对看门狗的使用引起了问题。
如果我们说http://www.embedds.com/using-watchdog-timer-in-your-projects/是一个"权威的"信息源,那么也许你对wdt_reset()的调用没有被及时调用,因此你的系统正在被重置?
从http://www.nongnu.org/avr-libc/user-manual/group_如果您启用了看门狗定时器,您必须小心并重置它在它充满并复位MCU之前。否则,如果您的程序挂起或在没有重置的情况下陷入无限循环,看门狗只是在计数并复位系统
avr _watchdog.html
#define wdt_reset() __asm__ __volatile__ ("wdr")
复位看门狗定时器。当看门狗定时器使能时,一个呼叫在计时器到期之前,需要执行此指令,否则需要执行"看门狗"启动的设备将复位。
如果你从你的项目中禁用看门狗,你仍然得到相同的结果吗?
更新1
要调试代码,可以使用serial .println("xxxx")函数将所需的文本输出到已设置的串行端口。
看
- 谷歌搜索 <
- LadyAda教程/gh>
- 无数
注意:我们是否应该更新这些说明,使它们包含完整的说明?标记为社区Wiki,以便每个人都可以根据需要更新。