我熟悉许多关于Arduino的技术专家的观点,并在某种程度上分享了他们的观点。不过,例如,对于快速自动化而言,该平台非常有用:它像孩子的设计师一样,允许您在几个小时内对设备进行组装和编程,而不会浪费时间在各种“未定义的__bss_start__引用”和“未检测到设备”上。有一次,要使另一个例程自动化,我需要一个显示器。我翻阅了Aliexpress,但仍然找不到适合Arduno的盾牌。
猫引起注意出现上下故障
因此,我需要一个对话框用户界面,而且需要快速。(这只猫引起了人们的注意,它确实起作用了。)好像所有制造商都故意建议手动绘制输入字段和进度条,对按钮处理程序进行编程,并概括地说,做我不想做的所有事情。令人惊讶的是,为什么不提供一个可以解决这些问题的高级库呢?在大约80%的情况下,所有任务都可以归结为一个简单的顺序:- 显示带有输入字段的表单。
- 等待用户编辑Foo字段。
- 获取Foo字段的新值。
- 作为回报。
但是缺乏图书馆并不是唯一的障碍。我的Arduino Uno的ROM稀缺(与Leonardo,Ethernet,Pro的情况相同)充其量只能存储一张分辨率为128x128像素的图像。而且没有地方存放代码了。在走遍全球速卖通,DX和类似商店之后,我最终发现,以网络开发人员的语言来说,是“笨蛋”或“太胖”的盾牌。前者不能解决问题,但价格便宜。后者就像是防空导弹系统,您将不得不为此冗余支付一定的费用。如果我可以将Nikanor Ivanovich的嘴唇放在Ivan Kuzmich的鼻子上……经过一番犹豫之后,我决定填补这一烦人的营销空白。我们应该建立什么盾牌
我铺开木板,订购了前几个样品进行实验,然后进行了尝试。
这个想法逐渐形成。因此,该解决方案应该易于使用且始终便宜(大约在下面):- 板子上的屏蔽层应该是一个微控制器,至少要有两个屏幕才能使用。
- 为确保内存没有问题,您可以添加microSD插槽。
- 另外,就在防护板上,您需要放置一些按钮。
- 微控制器必须执行“黑工作”,渲染表单字段并按以下方式处理按钮按下:仅通过向缝合的屏蔽罩供电,才有可能翻阅表单,编辑输入字段,在复选框中放置小鸟等。
- Arduino : I2C, SPI UART. Arduino; (, ).
- Arduino GPIO, .
- , , « Vim, !», , , GTK Glade .
防护罩最基本的组件是显示模块。产品的价格和技术特性在很大程度上取决于它。在寻找合适的模块时,我想吃鱼和骑马:一方面,我从可用性标准出发,另一方面,模块的成本应该最小。这些标准基本上是相互矛盾的:像Terraelectronics这样的商店在全国设有办事处,它们为普通型号提供了一定的彩色显示屏,但是价格在2000卢布以上;另一方面,同一个Aliexpress上有很多不错的选择,但是它们都有相同的缺点:它们与我们不幸的用户之间存在一个深渊,其中一千多个纸箱死亡,其行为也很容易预测,例如石油报价或天气的行为。当然,每个人都了解它的含义。所以我的想法仍然只是一个想法。经常发生的情况是,夜间厨房kitchen饮一杯茶是致命的。一位朋友分享了他如何更改HTC显示屏损坏的情况。事实证明,智能手机的显示屏无疑比Terraelectronics目录中的产品具有更好的性能,但价格却便宜了两到三倍!那是一个启示。此后,很快就找到了一个展示架,在俄罗斯几乎每一步都可以花一分钱买到。它已安装在诺基亚2600/2650/3100/3200/5100/5140/6100/6220/6610/7210/7250手机上。(后来发现,我重新发现了美国,因为该显示器用于Arduino的许多屏蔽中。)其分辨率(128×128像素)足以显示具有三个或四个输入字段的表单。
给上釉比自负好
许多人可能仍然不太了解如何使用所描述的小工具。也许最简单的方法是在两种标准情况下进行说明:- 我们有一个数字温度计,有必要在显示器上显示其读数。
- 有一个伺服驱动器,需要设置其操作参数。例如,他的位置。
温度计
#include <intelcd.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define FORM_TERMO 0
#define FIELD_TERMO 0
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
InteLCD lcd;
void setup(void)
{
lcd.init();
sensor.begin();
}
void loop(void)
{
sensor.requestTemperatures();
lcd.update(FORM_TERMO, FIELD_TERMO, sensor.getTempCByIndex(0));
delay(1000);
}
伺服
#include <InteLCD.h>
#include <Servo.h>
#define FORM_SERVO 0
#define FIELD_SERVO 0
InteLCD lcd;
Servo myservo;
void lcdEvent(void);
void setup(void)
{
myservo.attach(9);
lcd.init();
}
void loop(void)
{
}
void lcdEvent(void)
{
switch (lcd.event.code) {
case InteLCD::FIELD_UPDATED:
if (lcd.event.formid == FORM_SERVO && lcd.event.fieldid == FIELD_SERVO)
{
myservo.write(lcd.event.arg[0]);
delay(15);
}
break;
}
}
到底
我认为,DIY电子产品应朝着最大的模块化方向发展,其中每个模块都非常简单和完整。然后,当孩子从各个乐高零件上架起玩具城堡时,用户必须将其装置组装成砖块,而无需使用锤子和锉刀。我的盾牌朝着这个方向迈出了一小步。我将很高兴听到有价值的建议,并了解除了我之外还有谁错过了这么有用的事情。