第1步:电话部分
电话部分
贝尔模型202电话(或1930年至1970年的任何拨号电话)
仿古木制雪茄盒
df robot bluno nano
deek-robot nano终端适配器
spi micro sd读卡器
micro sd卡
220欧姆电阻器(连接到耳机扬声器)
2x 10k欧姆电阻(连接到电话拨号)
母电源插孔
5v(或高达12v)电源
第2步:名称标签部件
这是要制作的项目列表一个名牌。我做了10个。
(注意:我将其中的一个短路,使其部分功能失调。提前计划:可能会额外订购一两个布鲁诺斯或者提出一个计划“b”以防万一!)
df机器人bluno甲壳虫
4x 100欧姆电阻器
蓝色可穿戴led
红色可穿戴设备led
黄色可穿戴led
绿色可穿戴led
9v双容量(1200mah)锂电池
9v电池连接器
微型开关
2cmx8cm原型板(切成两半)
名称带剪辑的标签夹(亚马逊)
avery 5141“您好我的名字是”名称标签(亚马逊)
第3步:连接电话
手机内的arduino需要执行以下所有操作任务。本节介绍如何将所有内容连接在一起。
当有人拿起耳机时打开arduino
拨打电话
抓住声音sd卡
在耳机扬声器上播放声音
原理图
附图是原始图像和fritzing格式。您可以在此处下载fritzing应用程序:fritzing.org
拨号和电源开关
手机内部有三个需要连接的开关。
“挂机”开关,为bluno nano上的vin供电。
当接收器挂在挂钩上时,此开关断开。
“主动拨号”开关,表示车轮不在其家中位置。这是有线的,使d8在激活时为+ 5v,在激活时为0v。
当手机处于静止位置时,我的手机上此开关正常连接 。一旦用户开始移动拨号盘,开关就会断开连接。我把一端贴在arduino上。我把另一端连接到arduino上的d8。 d8还连接到10k欧姆电阻到+5。这种配置产生一个“高”使能信号,告诉sketch程序是时候开始计数脉冲了。
(在其他一些手机上,当拨号“休息”时,此开关正常断开。如果您有这种类型的手机,则需要将其与我的电话对接:结束到+5,另一端接到d8和一个接地的10k电阻。)
“脉冲”开关每次拨号时产生一个脉冲在从释放返回原位时传递一个数字。这用于在引脚d7上产生+ 5v脉冲。
在我的手机上,当拨盘“休息”时,此开关正常连接。用户松开方向盘后,每次通过号码时,此开关断开连接。我把一端贴在arduino上。我将另一端连接到arduino上的d7。 d7还连接到一个10k欧姆电阻,该电阻导致+5导致引脚在断开时被拉高。此配置为sketch程序生成“高”脉冲以进行计数。
(在其他一些手机上,当拨号“休息”时,此开关正常断开。如果您有这种类型的手机,则需要将其连接到我的对面:一端为+5,另一端为d7,另一端为10k接地电阻。)
我没有添加任何特殊电路,如电容器进行去抖动。我用软件处理了这个。每次开关打开或关闭时,你都会得到一堆电力尖峰(++++ - + - + - + - + - + -------)直到它结束。在决定状态实际发生变化之前,软件只等待输入引脚上的值稳定到一个电压或另一个电压一段足够长的时间。
听筒扬声器
用于产生声音的输出引脚需要是具有pwm功能的引脚。此外,根据您使用的arduino,您可能需要注意运行pwm所需的定时器并可能启用它。 arduino nano上的针脚d9(在我的情况下是bluno nano)是一个很好的默认选择,因为默认配置正确。
耳机有三条线。简化,这些是:地面,耳机和吹嘴。由于耳机和吹嘴松散连接,因此并不那么简单。我将电压表置于“接通”位置以测量电阻。在这种模式下,当您探测正确的两个端子时,电压表会产生少量的电,从而在听筒中产生“静态”的沙哑声。
将一个端子连接到地。将另一个端子连接到一个220欧姆的电阻,该电阻通向d9 pwm引脚。这非常适合我在标准电话耳机扬声器中所需的声级。
(如果你想创建一个“扬声器电话”,你需要添加一些额外的电路来将声音放大到一个外部扬声器供所有人听。我没有在我的实现中这样做但是本来不错增强。)
(如果要添加音量控制,可以将电位器连接到其中一个模拟输入引脚,并根据输入电压读数调整声级。)
micro sd卡spi
spi可以直接连接到arduino nano。 gnd至gnd,+ 5至+5,miso至miso,mosi至mosi,以及sck至sck。我使用引脚d4作为我的选择引脚,所以:d4到cs。 (如果您使用的是5v arduino,例如nano,请确保使用5v sd卡控制器。)
电线
我剪了一段cat-5以太网电缆和从电话上的连接器通过一个钻入基座的孔向下延伸到安装在雪茄盒下面的arduino。以太网电缆中的8根电线对我的连接来说已经足够了,对于任何标准的拨号电话都应该足够了。因为我将所有地面连接在一起,只有一个地面连接到arduino,因此8根电线对我来说是过度杀死的。我不需要在手机上运行+5线,但如果你使用不同类型的手机,你可能会发现有必要这样做。无论哪种方式,对于几乎任何项目来说,8根电线应该足够了。
我还在雪茄盒后面钻了一个小洞,让我在切断电源线后将电源线插入。端部在盒子内拼接在一起,然后连接到电源。
暴露usb连接器进行编程
我用电工胶带完全包裹nano,只留下usb连接器暴露并可以进行编程。如果您决定将usb电缆留在盒子内,即使您没有编程,也必须确保电缆末端与所有电气部件隔离。静电会弄乱电子设备,导致奇怪的事情发生如此意外的重置或更糟。
模拟引脚a0
注意:不连接任何东西针脚a0。该引脚用于为随机数发生器播种,因此它需要浮动未连接。
可选:两个arduinos卸载声音
如果您需要卸载声音我提供了原理图到了第二个arduino。如果ram耗尽或需要更快启动,请执行此操作。标准的arduino nano处理声音。 bluno beetle处理拨号和蓝牙连接。
将两个arduinos连接在一起:d2到d2,d3到d3。
步骤4:连接名称标签
名称标签内电子设备的接线图是公平的简单:只需几个led,一个开关和一个电池。 “可穿戴”led有点难以使用。我的绕线工具在这里派上用场了。
开始之前
在布线bluno beetle名称标签之前,我建议对每一个进行预编程,这样他们就可以了启动时依次闪烁所有数字引脚(d2,d3,d4,d5)。 (在提供的草图中定义start_with_blink,或编写您自己的简单草图来执行此操作。)这将允许您在组装后立即测试不良焊接连接。
绕线和焊接led
将所有四个电阻焊接到引脚d2,d3,d4和d5
从电路板背面夹住引线。
将电阻器导线留下约1英寸(2厘米)
将裸露的导线焊接到地面,留下1.5到2英寸(3-4厘米)。
使用绕线工具,将绿色led的红色线缠绕到d2电阻上并将其焊接到位。
将黑色引线绕线连接到接地引脚。
对蓝色led,黄色led和红色led重复步骤5和6。
确认没有引脚意外触及邻居。
再次验证。
将usb电缆插入充电器电源插座,确认所有四个led在启动时按正确顺序闪烁。
如果一切似乎都连接正确,请将一根热缩管滑过每个暴露的针脚(包括接地针)并将其缩小,使其贴合。我用烙铁来完成这个任务。如果你有一个热缩枪(又名热“吹风机”),那将是更好的选择。
焊接开关和电池
将面包板切成大约3“x .5”(5cm x 1cm)(大约是bluno beetle抵达盒子高度的一半。
将面包板顶部三个孔中的开关焊接。
焊接一端针。
确保开关的两端都贴着面包板,如果需要,可能会重新焊接第一根针。
焊接另一端两个开关销到面包板。
在电路板背面:焊接正极端(红线)电池连接器连接到开关的顶部引脚。(焊接到面包板,使其连接到顶部引脚。)
将电池的负极(黑线)焊接到电池的接地孔上。 bluno。
将红线切割,剥离并焊接到开关的中间引脚上(焊接到面包板的背面)与开关的电气连接。)
将电线穿过几个孔以消除应力。
将红线的另一端焊接到bluno上的vin孔,这样当开关打开时,9伏将施加到vin。
确认没有交叉线。
连接电池并进行测试,确保bluno开启并在开关打开时闪烁。
缠绕电工胶带以覆盖整个面包板。
用电工胶带包裹bluno,直到您对电线应变消除和隔离连接感到满意为止。
留出一个用于连接usb电缆的开口,以便将来进行编程。
将其打开并再次测试。
步骤5:打包名称标签
这些是步骤将可穿戴名称标签包装在bluno beetle进来的盒子里面。
用锋利的手术刀切开开关的矩形孔exacto刀
将开关和电路板放入盒子中并将其按压在侧面以找到合适的步伐来切割孔。/li》
使用泡沫和电池将卡纸切换到位。
将电池放在电路板旁边的盒子里
bluno来了用一块泡沫。将其卷起并粘贴,然后将其塞入盒子中,使开关牢固地固定到位。
为前面的led线切一个洞因此它在关闭时不会干扰翻盖,距离顶部大约0.75英寸(1.5厘米)。尺寸无关紧要。稍后会隐藏。我的洞大约1.5英寸x .25英寸(1厘米x) .5厘米。
通过孔进给led
使用透明胶带将led指示灯朝外。透明胶带确保led安全并面向全世界以获得全亮度。
将bluno推入usb接口的盒子中,可以进行编程。
将avery 5141名称标签剥离并粘贴在白纸上,然后将其剪成形状。最好不要将名称标签直接粘贴到盒子上,因为将来某个时候您需要将其删除。
覆盖led并将“hello my name is”名称标记为带。
切割塑料名牌固定器,使其牢固地固定在盒子背面。
附上剪辑。
第6步:arduino草图
我已经提供了在这个项目中配置和运行bluno arduinos所需的全部四个草图。
如果您还没有下载arduino ide。这里:arduino.cc
解压缩包含草图的zip文件,并从arduino ide中打开它们。这些是草图:
blunobasic:用于初始化所有blunos
blunophone:在手机上的bluno nano上运行
blunophonesounds(可选) :播放手机上的声音
blunonametag:在“可穿戴”名称标签上运行
步骤7:在中央电话上准备ble
将草图 blunobasic 加载到手机内的arduino bluno nano中并执行以下操作:
打开串口监视器
设置“无行结束”类型“+++”并发送
应说“进入at模式”
现在我们处于“at”模式,用于在电路板上配置ble蓝牙。
设置“两个nl& cr”
at + mac =?
复制mac地址
打开 blunonametag 草图。
找到正确的“centralmac”
粘贴mac以指定正确连接。
全部输入要完成配置,请执行以下命令:
at + role = role_central
at + cmode = unique
at + ibeacons = off
at + blunodebug = off
at + usbdebug = off
at + exit
现在用草图重新编程bluno blunophone 用于正常操作。
步骤8:在名称标签上准备ble
加载草图 blunobasic 将放置在名称标签内的每个bluno beetle上并执行以下操作:
打开串行监视器
设置“无行结束”
输入“+++”并发送
应该说“进入at模式”
现在我们处于“at”模式,用于配置主板上的ble蓝牙。
设置“两个nl& cr”
at + mac =?
复制mac地址
打开 blunophone 草图。
查找“phonelookup_t phonebook [] = {”
将mac粘贴到阵列中的适当位置,可能会创建一个新条目。
删除最重要的4位数字,从而创建一个32位十六进制数字。
确保mac_prefix与上一步中删除的最重要的4位数匹配。
(步骤5和6实现优化以在手机sketch上保存珍贵的ram。)
绑定到bluno手机的mac。例如,如果bluno中央mac是0xb4994c50236a,那么您可以在外设名称标签上执行此操作:
at + bind = 0xb4994c50236a
确定一个数字作为名称的id标签。例如“8”。将该数字插入上面讨论的phonebook []数组条目,并在外围名称标签bluno上执行此操作:
at + name = 8
输入以下所有命令以完成配置:
at + role = role_peripheral
at + cmode = unique
at + ibeacons = off
at + blunodebug = off
at + usbdebug = off
at + exit
现在使用sketch blunonametag 重新编程bluno以进行正常操作。
步骤9:创建声音
《我附上了一个包含我在sdcard上安装的所有声音的zip文件。声音来自各种网站:
来自freesound.org的有趣声音
电话录音来自:http://stuff.gigo.com/phone/
如果您想要一组不同的声音,可以生成一些或从各种网站下载。但它们需要转换为简单的单声道8位16khz wav格式。我是这样做的:
转到:https://audio.online-convert.com/convert-to-wav
更改位分辨率:8位
更改采样率:16000 hz
更改音频通道:单声道
高级:
pcm格式:pcm无符号8位
开始转换
下载
如果需要,请重命名文件,文件名中有8个或更少的字符,扩展名为“.wav”(又名8.3格式)。
将sd卡插入计算机
将所有文件复制到micro sd卡上最顶层的目录中
弹出
插入通过spi接口将micro sd卡连接到arduino控制器中。
blunophone sketch负责安装sd卡并使用库播放声音文件:sd.h,spi.h和tmrpcm .h
步骤10:arduino手机草图软件
在手机内部的bluno nano上运行的sketch blunophone 旨在使用ble进行通信蓝牙与另一个草图 blunonametag 在电池供电的“可穿戴式”bluno beetles上执行,其中包含分散在房间内的人们的“名牌”。
可选择手机声音可以播放一个单独的arduino,也将被安置在手机内。这样做的原因有很多,稍后将在评论中进行描述。如果您希望其他arduino使用sketch nanophonesounds 播放声音,请定义offload_sound。我用一个内置的bluno nano制作了一部手机。我制造了第二部手机,其中包含用于通信的bluno beetle,以及用于播放声音的标准arduino nano。在大多数情况下,我用单个bluno nano记录手机,但知道还有其他选择。
这个程序适用于arduino。 ram最大化因此,如果添加更多功能或增加变量数量,您可能会遇到一些奇怪的行为,例如程序重置和意外重启。该程序使用一些先进的技术来节省ram(以及一些黑客来节省ram)。 (如果你有ram问题,你应该认真考虑将声音功能卸载到另一个arduino。)
bluno ble似乎只用于两个蓝牙永不改变端点之间的通信:一个中心端口和一个外围设备。似乎我正在使用它的目的不是专门设计的。通过一些努力,我得到了它的工作 - 主要是。有时需要多次尝试才能建立连接。
该程序的设计有一个中央bluno和许多外围设备。在任何给定时间只连接一个外围设备,但中央bluno从已知外围设备列表中动态选择。通常连接速度相当快(在15秒内),但有时需要更长时间(几分钟)。外围设备(名称标签)在代码中内置了一个看门狗,以便偶尔强制重启。这种“黑客”似乎有所帮助,但并不完美。手动关闭/打开所有外围设备以及中央电话似乎有时可以帮助建立稳固的连接。
此草图动态运行“at + bind”命令,然后“at + restart”连接期望的外围设备。那个序列并不总是有效。如果在一个循环中调用两次而不是一次,它似乎更稳定。不幸的是,每次通过循环都会增加额外的延迟时间。如果您不担心额外的延迟,请考虑调整程序调用at + bind三次以获得更好的稳定性。
当通过usb电缆将sketch编程到bluno中心或任何外围设备时,我发现它如果我关掉房间里所有其他的blunos,那么最稳定。由于通过蓝牙从一个bluno到另一个bluno的串行连接,程序员似乎对bluno的目标编程感到困惑。
这使用plainprotocol库来格式化通过蓝牙发送的命令。这可以在github上找到:
git clone https://github.com/dfrobot/blunoaccessoryshieldde.。.
当在串行监视器上手动弄乱at命令时,我发现最好运行sketch blunobasic 。
正常程序流程
软件具有各种不同功能的状态。正常的软件路径如下所示:
当手机放在开关挂钩上时,电流不会流动并且bluno电源关闭。
当有人拿起听筒时,接通电源并且bluno开始启动,调用功能设置()。
在初始化期间安装sd卡,初始化蓝牙ble,并初始化相关的数字引脚。这需要几秒钟。
一旦所有内容都初始化,就会播放拨号音。与所有声音一样,此声音来自sd卡上的文件。拨号音实际上是一个相对较短的声音文件,一旦完成就会重复。
一旦手机上的滚轮开始移动,软件就会检测到引脚d8上的更改并停止拨号音。
电话号码中的每个数字都是根据d7针脚上检测到的脉冲数计算出来的。
拨打全部6位数后,程序将启动铃声,在phonebook []数组中找到该号码,并绑定到列出的名称标签的mac地址。
只要完成简单的握手以验证mac地址是否与预期的名称标签id匹配,就会在耳机扬声器上播放一长串(有些愚蠢)的“你好”声音(当时草图上的名称标签开始快速闪烁颜色疯狂)。
通常此人会自动挂断电话并观看有人打开礼物。电源关闭,因此bluno什么都不做。
特殊情况导致特殊情况
如果有人拨打手机上写的号码(869-869)或“tmw-tmw”)然后播放随机应答消息。另外,the mad wrapper在圣诞树深处隐藏了一个额外的bluno beetle“名牌”。布鲁诺开始快速地眨眼。在树上有一个特别的礼物供所有人享用!
各种标准的at& t错误信息都是针对诸如未知号码之类的内容而播放的,并且在没有答案的情况下响铃太长。
如果手机处于摘机状态4分钟,则摘机at& t“blat-blat-blat 。..”声音表示挂断电话。
很多计时器
每次循环时,程序都会检查时间并查看是否有任何“计时器”已过期。定时器用于一系列事情,包括正常操作和错误测试:
有一个看门狗定时器,用于重置和重新绑定到所需的名称标签。
有一个定时器用于去除“拨号移动”引脚d8。在宣布状态发生变化之前,我们等待嘈杂的信号稳定下来。
有一个定时器用于消除引脚d7上的脉冲。
在开始同步时,有一个定时器用于限制与名称标记的握手通信。
没有足够的ram用于变量和数组
程序完全超出ram使用量,导致以下警告
可用内存不足,可能会出现稳定性问题。
如果添加任何新内容,则可能出现错误功能,程序将开始表现得非常奇怪,包括重启。我实现了一些技巧来最小化ram使用:
诸如声音文件名之类的字符串作为常量存储在rom中。函数pgm_read_word()用于检索rom的常量。
mac地址是48位十六进制数。我的原始实现将mac地址存储为52个字符的字符串。当我只有三个名称标签与之通信时,这很好。一旦我启用了10个远程blunos,我就用光了。我能够通过存储10个32位长整数来恢复程序。所有bluno beetle mac地址中最重要的16位对于我所拥有的设备始终是相同的,因此我只是将16位添加到唯一的32位数字进行绑定。
另一种节省ram的方法(可能是最好的方法)是在两个arduinos之间拆分任务。如果定义了offload_sound,则删除声音产生功能。这被替换为使用softwareserial库与另一个连接到d3和d4的arduino进行通信的功能。这样做可以在ram中留出足够的空间来支持许多新功能或更多名称标签。
步骤11:消除嘈杂的电话交换机
当手机内的开关打开或关闭时,它不会干净利落。电压将反弹+ 5,0,+ 5,0,+ 5,0 。..。..一段时间,直到它稳定在一个或另一个上。这可以用一些电子设备来处理,例如电容器。我用软件处理它。 blunophone 草图会检查该值是否发生变化,然后等待一段时间来验证该值是否再次发生变化。
延迟10毫秒效果很好!
#define debounce_delay 10 // wait 10ms for the circuit to settle during puls transition
用于跟踪时间的变量:
long timeofpulsepinstatechange = 0; // save the time for debouncing
去抖动的一些代码:
if (pulseinputlaststate != pulseinputpinstate) {
timeofpulsepinstatechange = millis();
}
if ((millis() - timeofpulsepinstatechange) 》 debounce_delay) {
// debounce - this happens once it‘s stabilized
if (pulseinputtruestate != pulseinputpinstate) {
// this means that the switch has either just gone from closed-》open or vice versa.
pulseinputtruestate = pulseinputpinstate;
}
步骤12 :arduino名称标记草图软件
草图 blunonametag 实现在dfrobot上运行的可穿戴“名称标记” bluno beetle。
它使用ble蓝牙连接与隐藏在古董电话中的中央bluno进行通信。
在空闲状态 - 当没有连接到手机时 - - 蓝色led轻轻地发出更亮的光,然后变暗。
随着通信握手开始,一些不同颜色的led亮起,蓝色led发出全亮度不再发出脉冲。
握手需要使用名称标签的id进行回复。这是从at + name =?返回的结果。有关使用适当编号配置at + name的重要说明,请参阅本instructable的另一部分。
一旦通信完全建立,所有颜色的led都开始疯狂地闪烁。
很多计时器
每次循环时,程序都会检查时间并查看是否有任何“定时器”已过期。
有一个计时器可以更新蓝色led的亮度。 (我真的很喜欢这个简单的细微特征。在空闲状态下轻柔的平静脉冲为项目增添了一点“自然”的人性。)
每个彩色led都有一个定时器告诉它闪烁一定时间。每个led的闪烁速率不同,导致轻微随机的光图案。
有一个计时器可以检查来自手机的消息。
有一个看门狗定时器可以重置整个bluno beetle。有时,完全开始是与尝试接触的中央bluno同步的唯一方法。
步骤13:轻轻地点亮led以获得良好的平静效果
我尽可能尝试为我的应用添加一些微妙的“自然”效果。如果做得好,这将增加一定程度的舒适度并获得用户的一点信任。它让人感觉很好。这是一个很好的设计。
如果您只是需要向用户显示您的小工具已启动,那么简单的事情就是在启动过程中点亮led并忘记它。
咩。
使用arduino pwm功能并做一些有趣的事情。做吧!这并不难(特别是因为我已经提供了一些代码供您复制/粘贴到您的应用程序中)。
我喜欢以下代码的效果,它实现了蓝色led轻轻发光以平静的“呼吸”速度变得更加明亮和暗淡。感觉很棒!
我将蓝色led连接到一个支持pwm的引脚(bluno beetle上的引脚d3)。
#define blue_led 3 // blue led
我设置了一些参数led发光的速度和亮度有多快
#define glow_min 15 //15 // min brightness of glow
#define glow_max 100 //120 // max brightness of glow
#define glow_update_delay 40 // when to increment
#define glow_step_size 2
及相关变量
long timeoflastpulseupdate = 0;
int glowvalue = 0; // led brightness 0-255
int glowincrement = glow_step_size; // either + or - depending on up/down glow
我创建了一个实用程序函数来帮助确定是否需要调整led的亮度:
// gently glow bright/dim when not connected
bool timetoupdateglow () {
long now = millis();
if ((now - timeoflastpulseupdate) 》 glow_update_delay) {
timeoflastpulseupdate = now;
return true;
} else {
return false;
}
}
然后,每次通过循环,如果是时候改变亮度,改变它。如果 glowincrement 为正数,则led会略微变亮。如果 glowincrement 是负数,则蓝色led稍微变暗。
void loop() {
。..
if (timetoupdateglow()) {
glowvalue += glowincrement;
if (glowvalue 《= glow_min) {
glowvalue = glow_min;
glowincrement = glow_step_size; // +1 so start glowing brighter
} else if (glowvalue 》= glow_max) {
glowvalue = glow_max;
glowincrement = -glow_step_size; // start dimming now
}
analogwrite(blue_led, glowvalue);
}
。..
}
步骤14:疯狂的浮华色彩吸引注意力
引起人们对小工具的关注的一个好方法是使用几个led“随机”泼洒闪亮的颜色。我对我使用的效果感到满意。每个led以不同的快速闪烁,以创建一个有趣的色彩管弦乐队。
定义闪烁率和变量:
// blink rates when connected spaced to look like random orchestrated splatter
#define blue_blink_delay 300 // blink rate 0.3 seconds
#define yellow_blink_delay 500 // blink rate 0.5 seconds
#define red_blink_delay 800 // blink rate 0.8 seconds
#define green_blink_delay 1300 // blink rate 1.3 seconds
long timeoflastblueblink = 0;
long timeoflastgreenblink = 0;
long timeoflastyellowblink = 0;
long timeoflastredblink = 0;
确定何时闪烁led的一些实用程序功能
// after connected we wildly blink the blue led
bool timeforblueblink () {
long now = millis();
if ((now - timeoflastblueblink) 》 blue_blink_delay) {
timeoflastblueblink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the green led
bool timeforgreenblink () {
long now = millis();
if ((now - timeoflastgreenblink) 》 green_blink_delay) {
timeoflastgreenblink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the yellow led
bool timeforyellowblink () {
long now = millis();
if ((now - timeoflastyellowblink) 》 yellow_blink_delay) {
timeoflastyellowblink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the red led
bool timeforredblink () {
long now = millis();
if ((now - timeoflastredblink) 》 red_blink_delay) {
timeoflastredblink = now;
return true;
} else {
return false;
}
}
以及闪烁的功能。
void blink (int pin) {
digitalwrite(pin, high);
delay(100);
digitalwrite(pin, low);
}
并且,如果处于正确的状态,每个循环一次,检查时间并使led闪烁
void loop() {
。..
if (timeforblueblink()) {
blink (blue_led);
}
if (timeforgreenblink()) {
blink (green_led);
}
if (timeforyellowblink()) {
blink (yellow_led);
}
if (timeforredblink()) {
blink (red_led);
}
。..
}
直流接触器的电弧特性介绍
旧款iPhone只能连接到2.4GHz和5GHz频段?
龙芯中科新型工控芯片与工业软件联合创新实验室揭牌,上海这一传感器项目斩获“大飞机”创新创业大赛一
基于TSMC 0.25μm CMOS工艺实现ADC采样保持电路的设计
Dialog其FusionHD™ NOR闪存兼容并已在SmartBond™低功耗蓝牙无线MCU平台上认证
贝尔模型202蓝牙电话的制作教程
MQTT工业级无线路由器的特点
FPGA中定点数的处理方法
德州仪器(TI)的破损玻璃检测器解决方案
禾赛科技发布全新高性价比的32通道中端激光雷达解决方案
27MHz发送器电路原理图详解
聚灿光电为全资子公司增资人民币60000万元
四大主题全覆盖,电子产业全智道--30余场活动邀您参观NEPCON ASIA 2021
接地电阻柜的主要应用领域都有哪些
傅盛:AI的出现,让机器人有了更多可能
两岸逾20家PCB制造商宣布泰国投资计划
小米MIX+安卓8.0:再次改变手机!
气体脉冲放电电源的组成电路图
荣泰天猫旗舰店双十一超级大牌日即将震撼开启
苹果推出九年后 智能手机蓬勃发展时代宣告结束