当我尝试响应发送到机器的 SMS 时,我的 Arduino(Arduino Duemilanove 克隆)重新启动。这可能是内存问题(它只有 2048 字节 RAM)吗?
我对变量使用的不多。只有发送工作正常。
GSM 库占用的字节数略少于 1000 个字节。您用于调试的串行端口(假设您使用它),另外 100 个左右。所以我猜你内存不足导致调试控制台出现垃圾或重新启动Arduino。
您可以根据我在 Arduino Cookbook 中找到的信息使用此代码检查您的记忆:
int memory_free()
{
int free_value;
if ((int)__brkval == 0)
free_value = ((int)&free_value) - ((int)&__bss_end);
else
free_value = ((int)&free_value) - ((int)__brkval);
return free_value;
}
根据我的经验,如果返回的字节数少于 150,那么您就有麻烦了。
如果 SMS 的缓冲区大小最多为 160 个字符,则将其减至最小。一旦一切正常,将任何内容切换到调试控制台(保存超过 100 个字节)并增加 SMS 大小。您实际上可以通过发送短信来进行调试,包括内存状态。
如果您的 Arduino 和 GSM 调制解调器使用相同的电源,那么您可以尝试使用更好的电源并重复测试。您还可以分离电源 - 一个用于 Arduino,一个用于 GSM 调制解调器,然后重复测试。如果 GSM 调制解调器靠近 Arduino,您可以尝试将其移得更远。如果在所有这些措施之后仍然发生重置,则您有软件问题。
如果电源和内存都正常,那么您的 Arduino 正在重新启动,因为程序中有错误。寻找杂散指针。