
应该赚糖果,所以我们在Ada中攻击了一台点胶机,让人们回答有关Ada编程语言和AdaCore的问题! ![]() 介绍 几个月前,我的同事丽贝卡在我们位于AdaCore的厨房里安装了糖果分配器。我不记得究竟是怎么回事,但我受到了挑战,让它变得更有趣...... 所以我的想法是添加一个触摸屏,人们必须回答有关Ada或AdaCore技术的问题,并修改分配器,以便人们只有在给出正确答案时才会获得糖果。(邪恶,不是吗?) 为此,我将使用配备800x600 LCD和电容式触摸屏的STM32F469发现板。但在此之前,我必须破解糖果机.... 黑客分配器 首先要做的是破解糖果分配器,以便能够控制糖果输送系统。 糖果分配器由以下材料制成: 糖果的容器 一个转动蜗轮的马达将糖果推出机器 红外接近传感器,用于检测用户的手 我的目标是找到命令电机的信号并将我的系统插入其中间。当分配器试图打开电机时,意味着检测到手,我可以决定是否真的要打开电机。 ![]() 为了找到控制电机的信号,我开始查看连接电机的电线及其落在电路板上的位置。它连接到“大”晶体管的中心支路。晶体管的另一条腿接地,所以第三条必须是我正在寻找的信号。通过跟踪迹线,我看到该信号连接到8引脚IC:它必须是驱动机器的微控制器。 在这一点上,我有足够的信息来破解分配器,但我想了解检测是如何工作的,看看信号会是什么样子。所以我将逻辑分析仪连接到IC的每个引脚并开始记录。 以下是3个有趣的信号:红外LED,红外传感器和电机控制。 ![]() 发现 检测分三个阶段进行: 等待:微控制器每100ms仅打开红外LED(信号01)0.2毫秒。这是为了节省电力,因为机器设计为电池供电。 检测:当检测到某些东西时,MCU将打开红外LED 10次以确认传感器前面确实存在某些东西。 交付:电机开启最长300ms。在此期间,MCU每20ms检查一次,看看手是否仍在传感器前面(信号03)。 这证实控制电机的信号是我要插入项目的地方。这样我让分配器的MCU处理检测和误报。 ![]() 我刮了焊接掩模,切断了迹线并将电线焊接到每一侧。绿线现在是我的检测信号(当检测到手时为高),白线是我的电机命令。 我将这两根电线用额外的地线向下延伸到分配器的底部,然后在外面将它们连接到STM32F469发现板。 软件 软件方面并不复杂:我使用GNAT的GPL版本和STM32F469上ARM Cortex-M的Ravenscar运行时。来自分配器的绿线连接到将触发中断的GPIO,因此无论何时软件获得中断,都意味着传感器前面有一只手。使用另一台GPIO,我可以打开或关闭点胶机电机。 ![]() 对于GUI,我使用了一个名为Giza的玩具项目:它是一个用于基本触摸屏用户界面的简单图形工具包。接口有两个窗口。第一个窗口显示问题,每个可能的答案都有一个按钮。当玩家点击错误的答案时,几秒钟后会显示另一个问题; 当它是正确答案时,会显示交货窗口。在发送窗口,玩家可以通过使用“不,谢谢”按钮中止或将手放在传感器下并获得他的糖果! 这些代码可以在GitHub上找到:https ://github.com/Fabien-Chouteau/AMCQ 代码---
![]() |