Arduino Mega Server
项目的开发如火如荼,在工作过程中必须克服一些意想不到的障碍。我今天将告诉您其中的一些信息,也许这将为您节省一些时间和精力。第一个笑话:而老妇人是个蠢货,还是见根!
我准备为Arduino Due发布系统的0.14版本,并将修改该版本以与Power Monitor一起使用。对于那些不了解的人,Power Monitor是用于监视电源的软件和硬件系统,它使您可以控制14个通道上的电源电压和功耗水平,并且具有对电源电流甚至网络示波器的内置控制,它可以直接在网页上显示表格实时电压和电流。
我组装了电路,检查了一切,然后运行-它不起作用。好吧,这很正常。我开始检查代码-一切正常,检查硬件-一切正常,检查连接-一切也正常。经过深思熟虑,我坐在椅子上开始思考哪里可能有错误。经过深思熟虑,我得出的结论是一切都正确完成。为什么不起作用?没有奇迹,所以我第二次检查了一切。
代码,硬件,连接。一切似乎都是正确的。我想了很多。我将再次沉迷于代码-结果为零。由于所有门诊方法都已用尽,因此我将患者转移到外科部门,并取出测试仪和烙铁。病人谨慎地看了我一眼,但他无言以对,无法告诉我任何事情。经过一些操作后,事实证明电源监视器根本没有通电!怎么会这样电源导线清晰可见,但无电!然后我突然发现,有
像我通常遇到的原型板,我习惯了这些原型板,并认为它们是唯一可能的板,但是确实如此(找到了十个不同点)
这正是我这次遇到的董事会。这似乎是一件小事,并且只有在您已经知道它的时候才是理所当然的,而当您不知道时,您可以全神贯注,直到弄清楚为什么设备不起作用。还有一个心理时刻-如果您认为轮胎完好无损,那么您就不会关注标记中的合格(您永远不知道制造商想要绘制什么)。这些笑话有时会在开发中发生-就像他们说的那样,扎根!有趣的第二件事:来自我们心爱的团队arduino.cc的问好
就像我说的那样,开发正如火如荼,AMS已经成为一个相当庞大的项目,当然,如果在项目中没有非常有用的条件编译指令,这是不可能的。这是一个功能强大的代码管理工具,尤其是因为Arduino Mega Server具有模块化结构,并且条件编译指令可启用和禁用系统的各种模块。#define
#ifdef
#endif
这样做是为了使您可以禁用不需要的模块并节省宝贵的微控制器内存。而且我没有在实践中遇到(使用不同的编程语言),因此条件编译指令不起作用或“笨拙”。废话!直到最近,我还认为这是不可能的,但是Arduino编程环境的(有趣的)开发人员并没有让我们感到无聊,而是首先要做的是。因此,我们正在尝试禁用不需要的模块,在这种情况下,将禁用与MajorDoMo一起使用的模块(到目前为止,它已经按预期工作了)。
理论上,指令之间的所有内容#ifdef MAJORDOMO_FEATURE
...
#endif
应该从编译中关闭。但是就在这里!
#ifdef MAJORDOMO_FEATURE
char majorMegaObject[] = "ncMega01";
char majorCommObject[] = "comm_mega01";
byte MAJOR_IP[] = {192, 168, 2, 8};
int MAJOR_PORT = 80;
EthernetClient mclient;
void majordomoInit() {
initStart("MajorDoMo");
timeStamp();
Serial.print("Connect to MajorDoMo... ");
if (mclient.connect(MAJOR_IP, MAJOR_PORT)) {
Serial.println("OK");
mclient.println();
} else {
Serial.println("failed");
}
delay(200);
mclient.stop();
modulMajor = MODUL_ENABLE;
initDone();
}
…
如您所见,条件编译不仅不能正常工作(不好,但是还没有到任何地方),而且可以“按上帝把它放入您的灵魂”的方式工作,也就是说,它需要的地方-可以编译,不需要的地方-不能编译!这非常糟糕,因为难以捉摸的“故障”非常难以捕捉,并且可能导致完全不可预测的后果。顺便说一下,本文是关于Arduino IDE版本1.6.5的。但是,显然,开发环境的版本并不重要,它们都相当容易出错。我最近才学到的东西,直到我编写了小草图和小项目,一切都井然有序。第三个笑话:同样,我们钟爱的arduino.cc和一个完全神奇的错误
我认为,我不会在这里描述很长时间了,这是Arduino环境的编译器中的异常错误,但是我将立即给出代码,以便您自己可以体会到这个奇迹。声明一个变量:long errorsHttpSend = 0;
在循环中,我们打印:Serial.println(errorsHttpSend);
结果:808333615
通过添加2重命名:long errorsHttpSend2 = 0;
在循环中,我们打印:Serial.println(errorsHttpSend2);
结果:0
问题出现了:如何在这样的系统中进行开发?在这里您还可以提及各种版本的Arduino IDE的完全不足的工作。在一个版本的环境中运行良好的代码拒绝在另一个版本中进行编译。一种环境编译项目,另一种“看不到”其中一个库。重新安装开发环境后,相同版本1.6.5(在重新安装之前已编译)将停止编译项目。因此,请记住使用Arduino时必须处理的内容。有一个积极的观点:有了这样的系统,您将无意中成为编程大师和系统管理大师。让我向Arduino开发团队表达我的新年愿望:您是我们亲爱的!祝您新年快乐,并希望您在新年期间发布正常工作的开发环境!新年快乐!
朋友们!我祝贺您即将到来的2016年,希望本文中的信息将帮助您节省新的一年的时间和精力!并成功发展!PS尽管存在敌人的所有阴谋诡计,但不久之后,针对Arduino Mega和Arduino Due的新版Arduino Mega Server将会以0.14 发行,具有许多新功能。加法。一个Youtube频道已打开,这是Arduino Mega Server 的促销视频,演示了如何在实际系统上工作。