我有以下设置。我发现我的arduino再次重启。我有Arduino板,lCD显示器,SENSOR。传感器和LCD显示器SHARE公共接地和7805 IC和Arduino板的5v电源使用7812稳压器IC上电。最后他们处于共同的地面潜力。现在我有代码的Peice。单独我尝试每个功能都正常工作没有任何错误,Arduino Board将不会被重置。当我把我所有的代码块放在一起。重新开始。一旦它重新开始工作几分钟,然后再次重置。
如何解决此问题?
#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();
}
我在我的Serial.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);
}
答案 0 :(得分:0)
我怀疑你使用看门狗导致了问题。
如果我们说http://www.embedds.com/using-watchdog-timer-in-your-projects/是一个“权威”信息来源,那么你的wdt_reset()调用可能没有被及时调用,因此你的系统正在重置?
如果启用了看门狗定时器,则必须小心并重置它 在它填满并重置MCU之前。否则,如果您的程序挂起或 坚持一些无限循环,没有重置看门狗只是计数 并重置系统
来自http://www.nongnu.org/avr-libc/user-manual/group_avr_watchdog.html
#define wdt_reset() __asm__ __volatile__ ("wdr")
重置看门狗定时器。当看门狗定时器启用时,呼叫 在计时器到期之前需要该指令,否则为a 将发生看门狗启动的设备重置。
如果从项目中禁用监视程序,您是否仍会获得相同的结果?
更新1
要调试代码,请使用Serial.println(“xxxx”)函数将所需文本输出到已设置的串行端口。
见
注意:我们是否应更新这些说明以使其包含完整说明?标记为社区Wiki,以便每个人都可以根据需要进行更新。