最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

Arduino最后倒计时定时器无线编程

时间:2017-05-24 20:34来源:未知 作者:admin 点击:
W顺利消失? 字节fadeincrement = 5; / millis()时序变量,只是衰落 unsigned long previousfademillis; int fadeInterval = 30;//////////////////////////////////////////////////////////////////////void se
Arduino最后倒计时定时器无线编程

/如果你不能告诉,第五张图片(gif)表明,“倒计时”计时器LED衰落/ /

*不要害羞点击图片获得更多的描述在本教程的**。

它是做什么的?

  • 这是一个<strong>增强的</strong>厨房定时器,可以关闭任何设备,你通常会插到墙上的插座。但当有19秒,Arduino将欧洲的“倒计时”的歌,就像在GEICO的商业!
  • 你可以上传代码到Arduino通过蓝牙无线传输。

<b style="font-family: CompleteInHimPro;">难度:</b><b style="background-color: blue;color: blue;border: 1.0px solid black;">E</b><b style="background-color: blue;color: blue;border: 1.0px solid black;">一</b><b style="background-color: blue;color: blue;border: 1.0px solid black;">S</b> <b style="color: white;border: 1.0px solid black;">Y</b> <b style="color: white;border: 1.0px solid black;">..</b><b class="callout">我们将阅读原理图和重编程的蓝牙模块!</b>

<strong>前言</strong>:

在开始这个项目,请确认谁教我“秘密的多任务”来提高本项目。特别感谢秃头工程师FadeWithoutDelay Code(void dothefade())看到这链接更多信息。

特别感谢”欧洲最后的倒计时“创作一首歌,很容易配置通过代码。

首先,检查出三以上的视频。

注:* *最后的倒计时的歌是听到附近的第一视频*结束

这是为什么Arduino项目的独特性比任何其他继电器开关?这是因为它不使用delay()所有功能(这是一个非常好的事情)!

*为什么不使用延迟,它是什么?别担心,我会解释的,在下一步的**。

警告

<u>我们将处理的</u><u>交流电(AC)所以一定要确保你得到成人的监督。</u>

 

故事时间:

(第二视频)有一天,我正在玩slither.io只是在完成我的作业。当我在玩我的游戏,我的爸爸让我打开我们的湿磨了整整45分钟。那时候打我冰冷的水被扔在我的背上。我问自己,“为什么不那些印度商人添加定时器将自动关闭我的机?”

*湿机基本上是一个大的冰沙搅拌机叶片,而是采用锥形花岗岩石头米粉成面团* *

不幸的是,这个模型没有一个定时器(只是一个通断开关)。

这是一个湿粉碎机可如果大米是地做出适当的:

这就是所谓的剂量。看起来美味!

<strong>实现</strong>:

那时候我想使我的Arduino Uno关掉我的磨床。毕竟,机器人有一个更好的反应时间比我们人类。个人,我只想专注于打slither.io进入顶尖行列,但不要错过正确的时间关掉磨床。(相信我,我玩的很好的时候,没有人看)。

在这个项目中,我以为我会让事情更有趣一点;<u>我决定做一个延迟的免费项目</u>。

并使它更加特别,我决定忽视使用物理按键和LCD(液晶显示器)的项目。相反,我想用我的可靠的手机设置计时器!

奖金特点:

该项目还包括一个额外的功能,我希望你能利用你每次打上传按钮:无线编程。它不包括一个因为我知道从个人的经验,一些不友好的Arduino盾。所以我将创建一个简单、高效的无线编程器电路的荣誉。它是无线的程序员有点类似于网站,但我把一些不必要的组件,节省了更多的物理空间

为什么使用无线编程吗?

  • 为什么不.我的意思是,这是未来的,如果你认为我的Arduino代码可以更好你可以上传代码,Arduino在锁紧的地方没有USB。(如果你懒得连接USB编程)

步骤1:多任务与Arduino的Delay Analogy

多任务处理

  1. 主要目标是褪色/闪烁的LED,播放音乐,并允许Arduino可以听任何用户输入通过蓝牙在同一时间这怎么可能?答:多任务的实现!
    1. 好吧,你让我;它叫多任务制造幻觉。你看,电脑(如Arduino)不多的任务,相反,他们所做的一切,一次一行代码,但是他们做的真的很快,使用一个时钟,因此看起来像他们可以多任务!你可能会听到有人说超频CPU。这基本上使你的CPU更无功的时钟,从而提供更高的处理能力。时钟是CPU立足了跟踪速度应处理的数据从一个位置到另一个位置,做一个动作。
      1. 这就像你的孩子大吼大叫,“我们在家吗?”每一秒,你说“我们不是”。但有一个小的时间窗口,当你说“我们”;如果孩子错过时间的小窗口,甚至1次,你还是会说“我们没有”,继续开车在路上经过你家(这听起来很可笑,但坚持用类比)。
      2. 当你说“我们”,进入你的房子你刚刚做了一个动作,监控车内的一切,如车灯、喇叭、对你的孩子来说在“同一时间”或在一个非常快的速度顺序。这是怎样的millis()作品.

Arduino的Delay

  1. 现在有了这个脏的功能,如我所说,名为延迟()。是什么情况呢?
  2. 使用同样的比喻一样,如果你使用延迟你会到达你的目的地,但你不能做任何事情,一路上。所以,Layman,你会继续开车从一个随机的位置,你的房子在一条直线上;你将穿越在一个恒定的速度,你的一切因为你不能停止或关闭(或甚至把一个信号灯)因为延迟迫使你等待,盯着时钟,直到时间来做一个动作。
    1. 这就像你会盯着时钟(在工作或学校)开始兴奋的一天结束。你专注于<strong>一件事:时钟</strong>!

结论

  1. 因此,更频繁的孩子大叫(孩子,请不要这样做),更多的机会,你可能会说“是”,在给定的时间窗口,去你家。因此,更快的计算机的反应时间,更快的处理能力(和Arduino的延误原因较少使用更快的反应时间)。
    1. 事实上,如果我们摆脱了delay(),我们可以让电脑。但不要高估自己,Arduino Uno的时钟速度是16mhz,而i7核心处理器,在大多数Windows电脑,是2.4GHz。所以,这是一个巨大的差异因此,Arduino可以如果你加太多的数据读到有些延迟。
      1. 太多的滞后可以衰落LED播放音乐了在同一时间由于输出时钟读数的要求一致millis()
      2. 但是,阅读从蓝牙而衰落LED<strong>或</strong>演奏音乐是好的。

 

主要目的:

正如你们许多初学者Arduino的知道,<strong>你喜欢用delay()</strong>。这是一个很大的不,不,不!

这个项目的目标是影响我的同胞的人避免使用delay()和大规模的项目应该是一个例子。当你使用延迟,你停止整个Arduino直到给定的条件是完整的。例如:如果你想眨眼LED的每一秒,最简单的方法就是延迟(1000)。但这是非常低效的,如果你想在闪烁的LED播放音乐,你根本不可能,所以你不得不多任务的Arduino。

所以你知道你想要你的机器人在同一时间做一些事情。这可能是很难在第一,这就是为什么它总是有助于你身边示意你的计划有一张纸。无论如何,一个主要的功能我想你学的是millis()功能和如何使用它来做一些其他很酷的和不必要的东西同一时间

所以准备好“沟延迟看钟”,为我的老板曾说!

步骤2:收集工具

收集工具

你将需要这些工具:

  • 带橡皮的铅笔(你会发现他们在学校)
  • 烙铁链接
  • 有些焊料链接
  • 电气胶带(从您当地的五金商店和沃尔玛)
  • 剪刀(你可以在你的孩子的背包或沃尔玛找到它们)
  • 线切割机(从您当地的五金商店或洛斯)
  • 镊子链接
  • 一个小型的热胶枪(亚马逊或者在业余爱好大堂)
  • 电钻(在您当地的五金商店和沃尔玛)
    • 对不同大小的螺钉钻头
  • 一个平头螺丝刀(-)
  • 十字螺丝刀(+)
  • 线机(在Lowes)
  • 美工刀(沃尔玛)
  • 一个表做这一切的东西。
  • 电脑(Mac或Windows)与蓝牙功能(或蓝牙适配器)

步骤3:收集无线编程器材料

无线编程器资料收集

好吧,到无线编程器的成分如下:

  • Arduino Uno(这将在教程中使用的)或任何其他Arduino电路板。链接(如果这是一个中国克隆的吧)
  • #p#分页标题#e#打印机的USB电缆或任何USB电缆,需要计划你的Arduino板。
  • 一个hc-05蓝牙模块,以突破板(小心骗局,和链接是安全的)林K
  • 女性对男性和女性对女性的跳线(不妨让男性对男性的其他项目(不是我)在未来)李NK
  • 一个破碎的跳线是件(⅔)的hc-05突破板长度。
  • (可选的现在,但要用厨房定时器后)发光二极管链接
  • 一个10K,一个1K的电阻,和一个大约2K的电阻。链接糖果袋(相信我,你将节省更多的钱因为这样你得到的各种电气元件)
  • 1用友一个电容(与比Arduino UNO,如纳米的波特率下Arduinos)和01(Arduino Uno)用友。基本上,越大的波特率下的电容。我想你可以摆脱一个1uF的电容或以上,但我警告你更高的电容并不意味着更好。只要是安全的,使用不到1uf是安全的。同时,确保对电解电容器的额定电压大于5伏。糖果袋另外,陶瓷和铝电解电容器好这个电路。

步骤4:收集材料,厨房定时器

收集材料,厨房定时器
  • 同样的Arduino电路板链接
  • 继电器模块链接
  • “这些…我的意思是LEDs(我们只需要一个)链接
  • 一个220-550(欧姆)电阻
  • 有源蜂鸣器和压电扬声器(只有一个)链接
  • 我们将完成修改hc-05模块后<strong>8步</strong>
  • 你可以用别的容器包装的所有组成部分,但要确保它不是金属的因为我们将处理的交流电(AC)。
  • 一架板插座
  • 与有线PC的电源输入口
  • 一个5-12v和1.25-1.95 AMPS与DC jack之间的权力Arduino的AC适配器(你可能会找到一些旧设备,直流插孔)链接
  • 四螺钉和四个螺母配合。(最低)(看图片)
  • 四垫圈,安装螺钉(最低)(看图片)
  • 跳线
  • 热收缩管(电线链接

步骤5:在命令模式(复位电路)

在命令模式(复位电路)
  1. 我觉得它更容易看图片因为他们按照原理图(电路)和最节省物理空间。
  2. 销的位置
    1. 该hc-05状态引脚连接到陶瓷电容器。01用友,但如果您使用的是电解电容器确保(-)距国家销盖点。
    2. 连接一个10K电阻接地的陶瓷电容器或另一端(-)帽的电解电容器(我用的是陶瓷电容器)。
    3. 最后,将复位线从Arduino的电容和10K电阻之间的电线或接头。

什么是与电容和电阻?

  1. Arduino的复位引脚,只有当它被拉至GND(地)。因此,该电路作为一个复位定时器。
    1. 如果你已经注意到,每次你上传你的代码,你的电脑首先重置Arduino(Arduino的内置LED闪烁迅速在第一)然后上传代码。这项技术是AtMega芯片的方式(在Arduino单片机)注意,有人将代码加载到它们,但复位时间是开放的一个小的时间窗口。如果你刚刚摆脱的电容,然后复位线就会被拉得太久,你会错过那开放的时间窗口打开的上传能力的Arduino。

    1. 波特率:波特率越大电容。
  1. 下一步将告诉你如何处理逻辑问题(hc-05 RX Arduino TX)使用电压分压器。

步骤6:在命令模式电路(分压器)

在命令模式电路(分压器)

*只是一点有用的提醒。示意图只显示引脚和他们应该连接,但是Arduino引脚位置,右边是水平翻转。但原理图的引脚位置仍然是正确的。* *

为分压器的公式是(VOUT = VIN * R1 /(R1+R2))。我们要转换成5V至3.3333…V,这就是为什么我们使用1K和2K的电阻。所以你可以使用2K和4K或。5K和1K。了解分压器,看看这个链接

  1. 只是带1K的电阻和弯曲成L形,使它的一个腿长。
  2. 现在,以2K的电阻和一个短的腿弯曲。屈腿的1K的电阻焊接弯接头。
  3. 其次,采取一些跳线连接!
    1. 这里是引脚位置:
      1. Arduino的GND去hc-05的GND。

      2. Arduino的5V去hc-05的VCC(+5V)。

      我搞砸了,接下来的两步骤的图片但纠正它最后的三张照片。别担心,下面的步骤仍然是正确的。

      1. Arduino的D10去hc-05 TX引脚。

      2. Arduino的D11去电压分压器去hc-05的RX引脚。

        1. 1K的电阻可以被确定为数# 1或“领袖”,因为它是排在第一位的,它的微小的“领袖棒”。<strong>腿不弯曲应连接到Arduino的TX引脚,该引脚D11。</strong>

        2. <strong>2K的电阻</strong>是电阻右边没有坚持带路。腿不弯曲<strong>应连接到Arduino的GND。</strong>

        3. 最后的最后一站,或“领导坚持“应该连接到hc-05的RX引脚。

        4. 它应该看起来像下面的图片

      3. 最后,将改进的复位线hc-05到Arduino的复位引脚。

      • 为什么电压分压器?
        • 如果你跳过这一步,然后这是一个保证你hc-05将油炸在无线接收生命的某些时刻。我的意思是,hc-05采用3.3 V的逻辑电平和Arduino使用5V的逻辑电平。当Arduino接收数据从hc-05两模块好因为Arduino可以采取一个3.3V逻辑电平因为3.3V作为一个二进制1,0V则视为一个二进制0。从3.3 V,一半以上的5V是二进制1。但如果你把hc-05接收线,这是一个完全不同的故事。Arduino会发出一个0-5V信号,因为hc-05期待3.3V逻辑损坏的hc-05 RX引脚。不幸的是,我是一个反叛和炸我整个hc-05板,所以不要做我所做的,用分压器。* * * *它肯定没有电压分压器工作,但突然的震动对任何跳线可以轻易炒由于小静电荷的蓝牙模块* * * *

      • 是的,要3.3-5v因为hc-05具有电压调节器使用VCC电源hc-05是完全安全的。但RX线不因为Arduino Uno是过时的。
        • 我认为所有的新传感器出来的热潮,每个人都希望Arduino改变5V稳压器3.3V,但这只是一种直觉。:)但是你现在,Arduino与3.3V逻辑层面Arduino板101!!!
      • 在下一步中,我将通过软件整合为hc-05设置。

步骤7:在命令(软件)

在命令(软件)
  • 下载最新的Arduino IDE
  • 下载at_command.ino素描在底部或复制并粘贴以下代码:

在命令代码

#包括<< softwareserial。H > 
 softwareserial myserial(10,11);// RX,TX,不再迷茫。记住,在hc-05 Arduino是TX RX和rx-tx.欢迎你!
无效setup() { 
系列。开始(9600);
串行out.println(“输入命令:”);
 myserial。开始(38400);//默认速度
 hc-05串行。”程序的一个新的println(hc-05蓝牙模块如下”);
延迟(500);
串口打印(“”);延迟(1000);串口打印(“+组织的”);串口打印(“+角色= 0);串口打印(“+极= 0”);串口打印(“+ UART = 115200,0,0”);串行out.println(“+初始化”);
延迟(1000);
 } 
无效loop() 
 { 
如果(myserial。available()){ 
系列。写(myserial。read());
 } 
如果(串行。available()){ 
 myserial写(。
  • 可选的(你想成为一个职业在电气工程和别人展示你的图?退房Fritzing

看看上面的视频的1080p或阅读下面的说明。

  • 为了使hc-05无线编程器,它必须用同样的节奏为Arduino。当我说我的意思是波特率的节奏。现在,当你在邮件中收到你的hc-05,可能是在38400的默认波特率。但是Arduino Uno在115200 / 57600和纳米是57600。基本上,如果你读的ATMEGA芯片或矩形广场IC你将看到的名字。ATmega328通常是57600波特率和ATmega168 19200(太慢了)。你总是可以玩他们唯一可能的波特率的hc-05可以处理:4800,9600,19200,38400,57600,115200,23400,460800,921600,1382400。为了设置波特率,必须在命令模式下输入。
  1. 打开Arduino IDE。
  2. 点击文件->打开->无论你救了at_command.ino素描(通常在下载)
  3. 打开at_command.ino
    1. 你也可以打开一个新的草图,和代码复制并粘贴在确定新素描的空白setup()和loop()你改写。
  4. 单击“工具->板:选择你的板(我用的是Arduino Uno)
  5. 单击“工具->端口:选择你的板的端口号(你可以通过进入设备管理器,找到你的USB设备端口)
  6. 确保你的电路是由前一步仍然不变(hc-05 TX引脚10和hc-05的RX引脚11通过分压器)#p#分页标题#e#
  7. 点击上传,等到它说“完成上传”在屏幕的底部。
  8. 现在断开hc-05 Vcc(5V)。
  9. 记者在hc-05背在VCC同时插入按钮(5V)。LED开始闪烁每2秒。
  10. 在右上角点击串口监控(它看起来像一个放大镜)
  11. 你会看到一个空白的屏幕,然后说“输入命令:“
  12. 确保在底部设置左串行监测角说:“两NL和CR”和9600波特率。
  13. 输入以下命令每一个命令在获得好的回应后(输入以下6个命令。在+姓名+ Pswd是可选的)。
  • 在组织的(复位hc-05默认出厂设置)
  • 在+角色= 0(主从模式)
  • 在北极= 1,0(内置LED设置)
  • 在UART = 115200,0,0(这是Arduino Uno。例如,如果你有你会说57600,0,0)纳米
  • 在+名字=(任何你想要的名字)例如,我在+姓名=羊肉说(就不说了)
  • 在+ Pswd = 4的PIN码(默认密码为1234)
  • 在init(启动蓝牙)

您刚刚创建了一个无线编程器!现在让我们来测试它。

 
  • at_commands.inoat_commands.ino
    下载

步骤8:测试无线编程器

测试无线编程器
  1. 按照最终的无线编程器原理图
  2. 只要将针从D10和D11 D0(RX)移动到D1(TX)。
  3. 把一个LED的引脚11的电流限制电阻(小腿到GND和长腿到引脚11)。
    1. 目前公司LED可以通过焊接220-500欧姆电阻的一个LED的腿。(看更详细的说明,图片)
      1. 装饰发光二极管和电阻,LED的前剪腿=微调电阻的长度+装饰LED的腿。
      2. 下一步,只是绕焊在电阻焊电阻的LED。
  4. 现在用你的无线编程器连接到你需要它。
  5. 让您的Windows或Mac电脑在去蓝牙设置。
  6. 插上电源的Arduino通过USB连接到电源,或另一台计算机,或使用9V电池通过电源插座。
  7. 等到你看到这个名字,你把你的蓝牙模块,出现在设备列表。
  8. 您的设备上点击,在这种情况下,我的是“羊肉”。你应该等到你看到在hc-05 LED开始闪烁每2秒(不小心说1秒的视频);这意味着它是连接。
  9. 断开Arduino的电源,然后重新连接。
  10. 更多的蓝牙设置,点击COM端口点击。
  11. 找到你的COM端口,标有“名字”开发的B,例如,我的端口是14因为它说羊肉开发B。
    1. 你可以删除蓝牙设备输入信号,因为你不需要它。
  12. 推出Arduino IDE打开闪烁的例子。文件-> -> ->眨眼基本例子
  13. 去工具并确保董事会是正确的,端口设置是一个你发现。对我来说,我会点击端口:14,板:Arduino Uno。
  14. 打上传和它应该工作!如果它不工作,一直点击上传(它可能是一个定时误差,但它很少是我制作的电路)。
  15. <strong>重要**如果</strong>你想重新上传,确保串口监控关闭击球前上传<strong>* *</strong>

  16. 最常见的问题是我发现有些人不使用适当的蓝牙软件。
    1. 真实的故事的时候:回到我的天,我一直在努力,努力让这个电路工作,我流泪了,浪费了大量的时间。直到我读了科学制造网站这一后我才意识到它的工作在Windows和Mac的蓝牙软件。显然,我使用的是东芝的蓝牙协议栈,我确信你们中的许多人都太。就切换回老的Windows蓝牙协议栈。相信我,如果你加入有更多的好处。当然,你可能不能玩电脑游戏一样用Wii Remote Minecraft使用glovepie,但编程无线更好。此外,你可以切换回来。毕竟,这是你的电脑。

如果你有任何问题,解决问题,请不要犹豫,请通过评论。

步骤9:厨房定时器(容器)

厨房定时器(容器)
  1. 把覆盖在绝缘盒。
  2. 以导电盒与盖连接,并用铅笔素描的四个边的中心盖(使用斜线找到交叉点,这是该中心在每个中心的全部4个边画一个洞(不包括封面的顶部和底部)(见图片)。
  3. 用电钻钻4个孔与仍在盖。
  4. 现在拆下盖。
  5. 把螺丝插进盒子从外面。将螺母在螺杆从里面。使用螺丝刀,螺丝钉保持螺母。(你应该紧密配合。看图片)
  6. 把热胶枪胶在螺母和螺钉,除了螺丝的底部(朝向盒子中结束)
  7. 继续这剩下的3个漏洞。
  8. 下一步,将盖和胶垫圈四个孔在外面。
  9. 现在,把盖子盖上。
  10. 然后,在每一个孔,以确保其符合和摆脱多余的胶水螺丝钉。
  11. 擦掉铅笔痕迹。
  12. 最后,它应该看起来像最后一张照片。

步骤10:厨房定时器(AC开关)

厨房定时器(AC开关)

你会需要成人监督这部分。

总结这一步,你把插座放在系列继电器和PC的电源进。然后,把它放在盒子中包装整齐。用热缩管来掩盖在PC的电源入口节点,因为它是交流电压(跳到下一步学习如何使用热缩管现在)!!!别忘了用电工胶带无处不在。(看图片)

  • 确保接地(绿色)线连接到金属(光泽)墙上的插座板。
  • 另外,确保你有两线剩下连接墙板和系列PC的电源入口后(看图片)。
    • 确保你不要碰VCC,GND,在(信号)的继电器模块呢。我们将讨论在下一步。
    • 一条线(黑色)连接到左侧(继电器的常开边)。
    • 其他电线(松跳线)应连接到继电器的中间。
      • 在电线插入插座的位置如上所述螺钉。
  1. 把墙上的电源插座上的底部,在盒子的中心和它周围画一个轮廓。(看图片)

  1. 现在把封闭区域(我们在上一步了)。
    1. 我用电钻因为我没有旋转的Dremel。
      1. 只是钻一孔沿轮廓你画的每个孔之间的差距小。
      2. 然后,使用压力,弹出关闭钻区。
  2. 把墙上的电源插座上,在串联电路中,你把孔内。(看图片)
  3. 钻两孔为两个螺钉来固定插座。
  4. 把塑料垫圈和胶水在两孔的表面从盒子里面的观点。
  5. 在两个螺钉拧入孔,并安装面板。
  6. 从盒子的内部来看,胶在墙上的电源插座上,它不会掉出来。
  7. 用电工胶带在中继模块和周围的每一个金属物体内盒。
    1. 这包括把电工胶带(由内而外)周围的4个螺丝,把盖。
    2. 如果你不能达到用电工胶带的一些地区,尝试使用热熔胶代替。
  8. 现在把电脑的电源入口和脸放在这个盒子的一个墙(里面的观点)。
  9. 把电脑的电源<strong>线</strong>放在你想要的地方你的入口区。
  • 恭喜.你完成了这一步。你是3 / 4的这个项目做的方法!

步骤11:厨房定时器(无线编程器的最终电路)

厨房定时器(无线编程器的最终电路)
  • 图片前,示意应该告诉你我们现在所处的位置(如果你迷路了。)
  • 按照新的示意图。Piezo暗示,蜂鸣器有极性(看图片)。
  1. 从盒子中取出盖。
  2. 将Arduino在盖底顶。确保入口面临在同一方向的PC电源入口的切口。(查看图片)
  3. 使用任何器皿和草图的USB口和DC Jack概述。
  4. 剪出轮廓的美工刀。是否有足够大的刚棒Arduino的入口,通过相应的孔。
  5. #p#分页标题#e#用热胶,把Arduino进你想要的区域。同时,确保USB口和DC jack正在经历的剪影。
  6. 你会发现一个问题,把盖子盖上盒子!
    • 为了解决这个问题,你将不得不做出另一个缺口,但这个时候,你会在盒子上做切口(不是盖的)!<u>检查图片</u>

  1. 接下来,焊料的压电蜂鸣器长跳线就像我们与LED步骤8
  2. 现在,添加热缩管保护导线的金属接头(用于LED和Piezo buzzer这样做)。
    1. FYI(供你参考):使用烙铁的热量,缩短了热收缩管!
  3. 现在,有一把尺子和找到中心墙上的插座(墙壁插座上方的一侧)。
  4. 在发现中,找到大小合适的钻头适合LED开始钻探!
  5. 坚持领导的箱子里面直到你能看到头的LED开始凸出的孔(从外面)(看图片)
  6. 涂一点热胶在LED从箱子里面。
  7. 现在有一个完全符合压电蜂鸣器孔内的钻头。
  8. 使用相同的钻头,在盒子的侧面的中间钻一个孔(对我来说,我把蜂鸣器在白色的线。检查图片)
  9. 最后,幻灯片对LED腿接地跳线热收缩管。然后,焊接引脚到适当的位置。之后,使用烙铁收缩的热收缩管的导电金属接头(看图片)。

  1. LED(-)去蜂鸣器(-)。LED(+)去Arduino引脚D11
  2. 不要做我所做的第四张照片中的结束。只是你的消极和积极的电线,但<strong>原理是一样的</strong>。所以,蜂鸣器(-)到LED(-)。和蜂鸣器(+)去Arduino引脚D6

步骤12:你的状态和上传的代码

你的地位和上传代码

好吧,伙计们,

只要解压ZIP文件和从底部上传代码。别忘了包括时间库。(看看如何添加库,看看这个教程

现在,点击上传,和高枕无忧你Arduino接收HEX文件传输通过蓝牙。

最后,下载下面的应用程序从谷歌PlayStore”Arduino蓝牙控制器“Giumig Apps。

重要的******如果要重新上传,确保串口监控关闭击球前上传***

到目前为止,你已经学会了如何程序的无线和填满所有的事情知道的人,给一个电击,在一个小盒子。好吧,我说你已经相当远(看图片)。

“最后倒计时”的代码如下:

  • 如果你想要更多的空间在Arduino上运行的代码,你可以评论/删除了介绍,位于setup()。从“欢迎弥敦^ 2的通用AC开关…”
  • 你需要下载代码的底部,这是一个zip文件,为了得到球。H和ac_switch_with_no_delay代码放在一起,否则你会得到一个错误代码中缺失的音调。h文件。
  • 下面的代码只是为了显示什么样子如果你没有Arduino IDE编辑器。
“倒计时”计时器代码
#包括<<时间。”
 #包括<< timelib。H > 
 / * 
我是一个自由软件;你可以将我和/或修改
我,但你必须有人参加拍我。
创作者:Nathan Ramanathan(但我的朋友叫我弥敦^ 2)
 / /特别感谢秃头工程师FadeWithoutDelay密码
 /看到更多的信息
 * / 
 / -----------------------------------------------------------不要连接销D12是因为它作为一个虚拟销--------------------------------------------------------- / 
 int dummypin baldengineer.com/fading-led-analogwrite-millis-example.html = 12;//我原来一个错误d33了Arduino板,有少于33的I /。所以我决定牺牲一个真正的销。
 int piezopin = 6;//该引脚连接到压电蜂鸣器
 
 
 #定义继电器8 / / #定义是一个简单的方法来识别,在任何人的代码,所有的引脚Arduino会乱动。
 #确定LED 11 
 int speakerpin;
 /全局变量
 int HR = 1;// 1小时
 int Mn = 30;// 30分钟
 int秒= 0;// 0seconds /因此,1小时和30。//Use maxLoad for the maximum amount of time for the switch to be open(For safety purposes).
double maxLoad = hr * (60 * 60 * 1E3)/*hours*/ + mn * (60 * 1E3)/*minutes*/ + sec * (1E3)/*seconds*/;
double h = 0, m = 0, s = 0, a = 0, b = 0, c = 0, BeepTime = .25E3;
bool e = false, d = false, f = false, fadeOrNot = false, viewer = false, pause = true, start = false, shortTime = false, lightOrNot = true, buzzOrNot = true; //If you music off as default, simply change buzzOrNot to false
String where = ""; String split = "";
int str = 0, count = 0, buzzerCount = 0;
double interval = 0;
double newInterval = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////////
// define directions for LED fadeWithoutDelay


// constants for min and max PWM
const int minPWM = 0;
const int maxPWM = 255;
// State Variable for Fade Direction
bool q = true;
// Global Fade Value
// but be bigger than byte and signed, for rollover
int fadeValue = 0;
// How smooth to fade?
字节fadeincrement = 5;
 / millis()时序变量,只是衰落
 unsigned long previousfademillis;
 /多快
int fadeInterval = 45;
//////////////////////////////////////////////// The FINAL COUNTDOWN song
#include "pitches.h"
unsigned long songMillis = 0;
int thisNote = -1;
// notes in the melody:
//int melody[] = {
//  NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5
//};


int melody[] = {//The FINAL COUNTDOWN song
  NOTE_B4, NOTE_A4, NOTE_B4, NOTE_E4, 0, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_B4, NOTE_A4, 0, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_E4, NOTE_FS4, 0, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_FS4, NOTE_A4,   NOTE_G4, 0, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_E4, 0, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_B4, NOTE_A4, 0, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_E4, NOTE_FS4, 0, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_FS4, NOTE_A4, NOTE_G4
};


// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  16, 16, 4, 4, 2, 16, 16, 8, 8, 4, 2, 16, 16, 4, 4, 4, 4, 16, 16, 8, 8, 8, 8,  4, 8, 16, 16, 4, 4, 2, 16, 16, 8, 8, 4, 2, 16, 16, 4, 4, 4, 6, 16, 16, 8, 8, 8, 8, 4
};


const int lengthOfSong = 23 + 26;//因为某些原因millis()不喜欢计算数组的大小。
 /////////////////////////// 
 
 
 ////////////////////////////////////////功能干预
 unsigned long的millis() psmillis = 0;
 unsigned long shorttimemillis = 0;
 unsigned long placeholder1 = 0;
 unsigned long placeholder2 = 0;
 //////////////////////////////////////////////////////////////////////////////////////////////////////// 
无效setup() { 
 / /把你的设置代码,运行一次:
系列。开始(115200 /);取决于Arduino你选择,因为我们正在利用。例如,该hc-05和Arduino都运行在115200的波特率。
 speakerpin = piezopin;
 pinmode(speakerpin,输出);/ Arduino的引脚输出/告诉
 pinmode(LED,输出);
 pinmode(继电器输出);
 digitalwrite(继电器,高);/ /关闭交流开关(继电器)
 ///////////////////////////////////////////////////////////介绍(只运行一次)
串行out.println(“欢迎弥敦。你想把这台机器上多久?例如,4小时,30分钟,2秒的4h 30m 2S。顺序并不重要。”);
 /串行out.println(“T \但,如果你输入4h 2m 3S,但是你实际上意味着1m二十多岁的时候,只需输入您的意思‘噢1m 20s。这真的很简单!”);
 /串口。println(”式“V”的观点去看你。1.5小时最大(安全隐患)!”);
 /串行out.println(“你知道有一个!要打开或关闭它,“L”型。”);
 /串口。println(”式的“B”把报警状态。”);} 
 
 
 
无效loop() { 
 /把你的主要代码,运行多次:
 unsigned long currentmillis = millis();
如果(串行。available()){ 
 STR =串行。read();
如果(因而isalpha(STR)!开始)
开关(STR){ 
案例“H”:/ /小时
 H =哪里。tofloat();/ /不修改变量H,M,或是因为我们想用户所输入的显示!
            interval -= a;
            a = (h * 60 * 60 * 1E3);
            where = "";
            d = true;
            interval += a;
            psMillis = millis();
            viewer = true;
            break;
          case 'm':
            //minutes
            m = where.toFloat();
            interval -= b;
            b = (m * 60 * 1E3);
            where = "";
            e = true;
            interval += b;
            psMillis = millis();
            viewer = true;
            break;
          case 's':
            //seconds
            s = where.toFloat();
            interval -= c;
            c = (s * 1E3);
            where = "";
            f = true;
            interval += c;
            psMillis = millis();
            viewer = true;
            break;
          case 'v':
            if ((interval <= maxLoad)) {
              Serial.print("You entered a time of ");
              readTime(d, e, f, h, m, s);
              Serial.println(split);
              Serial.print("\t");
           串行out.println(“Y型”是的,我们将开始!”);
查看器=假;
 } { //其他
。改变就改变了maxLoad开头的所有代码(17-19行)。
串行out.println(“太!走下“+字符串(HR)+“小时”+字符串(Mn)+“分钟”+字符串(SEC)+“秒”);} 
 
打破;
案例“Y”:
如果((间隔≤maxLoad)&(间隔>0)){ // /启动机器
查看器=假;
 fadeinterval = 4;
 println(”系列。;
串行out.println(“暂停/恢复:'p'不复位:R T端的计时器:“E”没有剩余时间:‘W’。”);
如果(buzzornot){ 
期= true;
 beeptime = 1E3;
 buzzercount = 4;} 
 
如果(lightornot){ 
 digitalwrite(LED,高);
 } 
 digitalwrite(继电器、低);
 fadeornot = false;
 newinterval =区间;
 psmillis = millis();
开始=真;
 placeholder1 = millis();
 } 
打破;
 } 
开关(STR){ 
案例P 
如果(':
 {开始){ ////////////////////////////////////////////////////////////////////////////////////最!停顿){ //该代码允许用户暂停机定时器然后继续回到它离开的地方。
暂停= true;
 fadeornot = false;
 newinterval = newinterval -(placeholder2 - placeholder1);
 psmillis = currentmillis;
 placeholder1 = currentmillis;
串行out.println(“恢复”);
 digitalwrite(继电器、低);
;)
别的{ 
暂停= false;//相信它或没有,但我们需要暂停虚假,为了。:0 
 fadeornot = true;
 placeholder2 = currentmillis;
双pausedinterval =(newinterval -(placeholder2 - placeholder1));
打印串口。剩余时间:”);
 readduring(pausedinterval);
 digitalwrite(继电器,高);
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 
 } } } 
 
 
打破;
 
 
案例的“r”:/ /复位定时器
如果(开始){ 
串口打印(“重置定时器回到“);
 readtime(D,E,F,H,M,S);
串口打印(分);
 newinterval =区间;
如果(停顿){ 
串行out.println(“恢复”);} 
 
其他
 { 
串行out.println(“,还暂停”);} 
 
 psmillis = millis();
 placeholder2 = millis();
 placeholder1 = millis();
数据=定时器
如果(开始){ 
串行out.println(“结束计时器”);
暂停= true;
 newinterval = 0;
数据= lengthofsong + 1;
 } 
打破;
案例“W”:/ /结束计时器
如果(启动和暂停){ 
系列。打印(“T T T时间:”);
双pausedinterval =(newinterval -(millis() - placeholder1));
 readduring(pausedinterval);
 } 
打破;
案例“L”:/ /灯光设置
 lightornot = true;
如果(计数= = 0){ 
 digitalwrite(LED,低);
 lightornot = false;
串行out.println(“T tnightlight:关闭”);
 fadeornot =!开始){ 
 digitalwrite(LED,高);
串行out.println(“T tnightlight:“);
 fadeornot = true;
 } 
 else if(数= =!开始){ 
 fadeornot = false;
串行out.println(“T tnightlight:衰落”);} else 
 
(启动和暂停){ 
如果(计数= = 1){ 
 fadeornot = false;
串行out.println(“T tnightlight:简历衰落”);
计数+ +;
 } 
 } 
别的!pause) {
            if (count == 1) {
              count++;
              fadeOrNot = true;
              Serial.println("\t\tNightLight: Blinking");
            }
          }
          if (count == 2) {
            count = -1;
          }
          count++;
          break;
        case 'b':                                        //Alarm settings
          Serial.print("\t\tBuzzer: ");
          if (buzzOrNot) {
            buzzOrNot = false;
            shortTime = false;
            speakerPin = dummyPin;
            Serial.println("Off");
          }
          else {
            buzzOrNot = true;
            Serial.println("On");
            speakerPin = PiezoPin;
            shortTime = true;
            BeepTime = 75;
          }
          break;
      }
    }
    else if (isDigit(str)) {
      where += char(str);    //Add numbers, not words, in a string that will be converted later with toFloat().
    }
  }
  else {                          //This else statement will probably have more instances tha#p#分页标题#e#n if语句,所以它是完美的代码,需要更新每一毫秒!
如果(fadeornot = = false){ 
 dothefade(currentmillis);//衰落LED(…因为它看起来很酷)
 } 
如果!暂停和lightornot){ 
如果(currentmillis - psmillis > = 500){ //显示计时器暂停
 
 
 digitalwrite(LED,!//读出数字接口的值(LED));//将LED和快速的方式。
 psmillis = currentmillis;
 } }如果
 
(短期){ 
如果(currentmillis - shorttimemillis > = beeptime){ 
如果(buzzercount > 5){ 
期=假;
 buzzercount = 0;
其他
 { },!//读出数字接口的值(speakerpin));
 shorttimemillis = currentmillis;
 buzzercount + +;
 } } }如果
 
 
((观众)){ 
如果(currentmillis - psmillis > = 3E3){ //输入后,定时器,用户可能不知道。所以一个提示会弹出像一个恼人的广告后3秒。
串行out.println(“T”型以为:“V”来查看你的计时器。”);
 psmillis = currentmillis;
查看器=假;
 } }如果
 
(启动和暂停){ //,if()声明,激活时,“Y”是输入序列。
 / /
如果(间隔> = 18.5e3){ 
如果(currentmillis - psmillis > =(newinterval - 18.5e3)){ //这将关闭当表机。18.5e3秒的音乐播放时间。
 melodywithoutdelay(currentmillis);/ /结束计时器倒计时的歌
 } } { 
 
其他
如果(currentmillis - psmillis > =(newinterval)){ 
数据= lengthofsong;
 melodywithoutdelay(currentmillis);/结束定时器哔哔声
 
 
 } } } } 
 
 
 
 } 
 
 
 /无效dothefade(unsigned long thismillis){ //特别感谢秃头工程师FadeWithoutDelay密码
 /看baldengineer.com/fading-led-analogwrite-millis-example.html更多信息
 / James Lewis创造的
 /是时候更新
 /如果没有,什么都没有发生
如果(lightornot){ 
如果(thismillis - previousfademillis > = fadeinterval){ 
 /是的,它是!
      if (q) {
        fadeValue += fadeIncrement;
        if (fadeValue >= maxPWM) {
          // At max, limit and change direction
          fadeValue = maxPWM;
          q = false;
        }
      } else {
        //if we aren't going up, we're going down
        fadeValue -= fadeIncrement;
        if (fadeValue <= minPWM) {
          // At min, limit and change direction
          fadeValue = minPWM;
          q = true;
        }
      }
      // Only need to update when it changes


      analogWrite(led, fadeValue);


      // reset millis for the next iteration (fade timer only)
      previousFadeMillis = thisMillis;
    }
  }
}


void readTime(bool a_a, bool b_b, bool c_c, int hh, int mm, int ss) {
  split = "";
  if (a_a) {
    split += (hh + String(" hours"));
  }
  if (a_a && b_b) {
    split += ((", and ") + String(mm) + String(" minutes"));
  }
  else if (b_b) {
    split += (mm + String(" minutes"));
  }
  if ((b_b && c_c) || (c_c && a_a)) {
    split += ((", and ") + String(ss) + String(" se条件”));} else if(
 
 c_c){ 
分裂+ =(SS +字符串(“秒”));} 
 
!(a_a)&!(b_b)&!(c_c)){ 
分=(显然没有。”);} } 
 
 
无效readduring(双把){ 
 int哈=小时(弄/(1E3));
 int马=分钟(得到/(1E3));
 int SA =二(得到/(1E3));
布尔真=假;布尔btrue = false;布尔ctrue = false!= 0)
真实=真实;
如果!= 0)
 btrue = true;
如果!= 0)
 ctrue = true;
 readtime(真正的,btrue,ctrue,哈,马,SA);
系列。println(分裂);
 } 
 
 
 / 
无效MelodyWithoutDelay(双cmillis){ 
 int noteduration = 1700 / notedurations [数据];
 int pausebetweennotes = noteduration * 1.2;
如果((cmillis - songmillis <= pausebetweennotes / 4)){ 
 digitalwrite(LED,低);
 } 
 else if((cmillis - songmillis <= pausebetweennotes)){ 
音(speakerpin,旋律[数据],noteduration);
如果(lightornot)
 digitalwrite(LED,高);
 } { 
其他
 fadeornot = true;
如果(数据> = lengthofsong){ 
数据= 2;
 psmillis = cmillis;
 digitalwrite(继电器,高;
 fadeinterval = 45;
 fadeornot = false;
开始=假;
期= true;
 beeptime = 1E3;
 } 
数据+ +;
不一(speakerpin);
 songmillis =
 
  • ac_switch_with_no_delay.zipac_switch_with_no_delay.zip
    下载

步骤13:结论:提示和技巧完全手册

  1. 第一步是打开你的蓝牙设备,找到你的设备。(记住,你的密码是当我们在命令模式,我的是1234)”的默认密码是1234”
  2. 第二,打开Arduino蓝牙控制器的应用。
  3. 第三、在你的设备上点击并确认没有其他设备连接到它。同时,确保Arduino是插在通过DC插座或USB。
    1. 注:由于蓝牙模块把你的Arduino到无线接收器的USB端口是不可用的,所以你不能计划通过USB,但你可以通过USB然后程序的无线(如果你是编程通过USB,但你不是)。
  4. 在终端模式下点击。

在开始的时候,“倒计时”定时器将问你多久,你想把你的机器。

  • 恼人的是,当你插入你的Arduino与权力、串口吐出段引言(可在setup()删除)。
      1. 串联重复setup()每次有新设备连接
      2. 所以每次你进入程序通过蓝牙后堵在Arduino的力量,会给你介绍两款!
        1. 为了避免这种情况,进入终端模式<strong>两次</strong>(只是退出程序,再点击你的蓝牙设备)。你只需要做一次每次你给Arduino的权力。

*****************************************************************************************************************************完全手册

  1. 定时器指令
    • 如果你想要一个定时器1小时29minutes和30s,你会1h29m30s型和顺序并不重要。如果你真的想让周围的混乱,你可以说“29am 1 Wh 3q,0wes,仍然得到相同的结果;只要<strong>数</strong>小时/分钟/秒总是先于<strong>信</strong>,代表的时间单位,它是一个有效的按键。除了字母“Y”和“V”,因为他们有潜力激活定时器<strong>还没开始</strong>呢(看下面)。
  • 这些命令只在定时器还没有开始(出于安全原因)
    • 如何查看定时器吗?
      • 类型V / /你不必型V开始计时;它只是确保你如果你输入的是不是正确的。
    • 如何启动定时器吗?
      • Y型是。
        • 哔跟着你开始,和LED将开始消失,以更快的速度。
  • 这些命令后,定时器工作已经开始(出于安全原因,如人的宝贝,点击“Y”太多的时间在您的手机,集无限定时器(或大于50天:]))
    • 如何暂停/恢复定时器吗?
      • 型P /吐出时间暂停计时器
    • 如何重置定时器吗?
      1. “R”型
    • 如何结束定时器吗?
      1. 型“e”
    • 如何看时间的剩余量?
      1. 型W /吐出时间做其他任何事情
  • 这些命令在所有时间的工作(因为它是安全的方式)
    • 如何关闭蜂鸣器(音)?
      1. “B”类
      2. 如何切换光吗?/ /说你不喜欢光,因为它太亮了。嗯,你可以把它关掉,定时器仍然会做它的工作!不是多漂亮!
        • “L”型切换光从->上->衰落
        • 暂停时,LED会闪烁一次。恢复时,LED将继续以正常的速度。
      3. 技巧
        • <strong>让我们说你需要一个时间上的“1m40s”但你不小心输入“1m0s”。嗯,这是很简单的解决</strong>。所有你要做的是“40”型。然后,当你输入“V”来查看你的计时器,你会看到Arduino说1分40秒。
  • 你可能注意到你不能超过1小时30分钟的时间。这是因为我想对这个产品添加安全功能。
    1. 例如:有人说婴儿<strong>意外</strong>类型的100h”。这会持续100个小时,可能不会很好的机器,你的<strong>电费</strong>!
  • 但如果你想要一个4小时的最大运行时间,你会说:
    1. 国际人力资源= 4;
    2. int Mn = 0;
    3. int秒= 0;

步骤14:结语:解释代码

我强烈建议听视频。

我将解释的主要复杂的代码,因为一切都比其他的暂停/恢复代码很容易了解自己。因此,暂停/恢复的代码将被解释在视频比什么都重要。如果你们想要我的代码的其他部分的一些解释,请不要犹豫,请通过评论。

如果你需要额外的帮助,FadeWithoutDelay检查了秃头工程师网站

MelodyWithoutDelay是我发明的。它基本上是一样的tonemelody相同,除了它不包含延迟。看看我原来的MelodyWithoutDelay下面的代码:

  • 这首歌是为“倒计时”相同,但它的扩展版本,持续41秒。
  • 激活型G。测试Arduino的多任务处理能力型“H”和Arduino会说“你好”时给你唱一曲!
  • 你可以上传的代码下面的“倒计时”计时器箱;不会发生什么不幸。
melodywithoutdelay代码
//Invented by Nathan Ramanathan
#include "pitches.h"
#define led 11    //attach a LED at pin 11
#define buzzer 6


unsigned long songMillis = 0;
bool check = false, a = false, fadeOrNot = true;
int thisNote = -1;
// notes in the melody:
//int melody[] = {
//  NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5
//};


int melody[] = {//The FINAL COUNTDOWN song
  NOTE_B4, NOTE_A4, NOTE_B4, NOTE_E4, 0, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_B4, NOTE_A4, 0, NOTE_C5, NOTE_B4, NOTE_C5, NOTE_E4, NOTE_FS4, 0, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_FS4, NOTE_A4,   NOTE_G4,0,NOTE_B4,NOTE_A4,NOTE_B4,NOTE_E4,0,NOTE_C5,NOTE_B4,NOTE_C5,NOTE_B4,NOTE_A4,0,NOTE_B4,NOTE_A4,NOTE_B4,NOTE_E4,NOTE_FS4,0,NOTE_A4,NOTE_G4,NOTE_A4,NOTE_G4,NOTE_FS4,NOTE_A4,   NOTE_G4,NOTE_FS4,NOTE_G4,NOTE_A4,NOTE_G4,NOTE_A4,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_FS4,NOTE_E4,NOTE_B4,NOTE_C5,NOTE_G4,0,NOTE_B4,NOTE_A4,NOTE_B4,NOTE_E4,0,NOTE_C5,NOTE_B4,NOTE_C5,NOTE_B4,NOTE_A4,    0,NOTE_C5,NOTE_B4,NOTE_C5,NOTE_E4,NOTE_FS4,0,NOTE_A4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_FS4, NOTE_A4,NOTE_G4,0,NOTE_B4,NOTE_A4,NOTE_B4,NOTE_E4,0,NOTE_C5, NOTE_B4, NOTE_C5, NOTE_B4, NOTE_A4,0, NOTE_C5,NOTE_B4,NOTE_C5,NOTE_E4,   NOTE_FS4,0,NOTE_A4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_FS4, NOTE_A4,NOTE_G4        
};


// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  16, 16, 4, 4, 2, 16, 16, 8, 8, 4, 2, 16, 16, 4, 4, 4, 4, 16, 16, 8, 8, 8, 8,  4,8,16,16,4,4,2,16,16,8,8,4,2,16,16,4,4,4,6,16,16,8,8,8,8,  2,16,16,3,16,16,8,8,8,8,4,8,1,4,8,16,16,4,4,2,16,16,8,8,8,  2,16,16,4,4,4,8,16,16,8,8,8,8,4,6,16,16,4,4,2,16,16,8,8,4,2,16,16,4,4,  4,6,16,16,8,8,8,8,4
};


const int lengthOfSong = 23+25+25+30+9; //For some reason the millis() doesn't like calculating array size.
//////////////////////////////////////////////////////////////////////
// constants for min and max PWM
const int minPWM = 0;
const int maxPWM = 255;

// State Variable for Fade Direction
bool b = true;

// Global Fade Value
// but be bigger than byte and signed, for rollover
int fadeValue = 0;


// Ho#p#分页标题#e#W顺利消失?
字节fadeincrement = 5;
 
 
 / millis()时序变量,只是衰落
 unsigned long previousfademillis;
 
 

int fadeInterval = 30;
//////////////////////////////////////////////////////////////////////
void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(115200);
  Serial.println("Type 'g' to hear a melody.");
}

void loop() {
  // no need to repeat the melody.
  unsigned long currentMillis = millis();
  if (Serial.available()) {
    int c = Serial.read();
    if (c == 'g') {
      check = true;
      fadeOrNot = false;
    }
    if (c == 'h') {
       Serial.println("Hello");
    }
  }
  else {
    if (fadeOrNot) {
      doTheFade(currentMillis);
    }
    if (check) {
      MelodyWithoutDelay(currentMillis);
    }
  }
}

void MelodyWithoutDelay(long cMillis) {
  int noteDuration = 1700 / noteDurations[thisNote];
  int pauseBetweenNotes = noteDuration * 1.2;


  if ((cMillis - songMillis <= pauseBetweenNotes / 4)) {
    digitalWrite(led, LOW);
  }
  else if ((cMillis - songMillis <= pauseBetweenNotes)) {
    tone(buzzer, melody[thisNote], noteDuration);
    if (melody[thisNote] != 0){ 
 digitalwrite(LED,高);} } { 
 
 
其他
如果(数据> = lengthofsong){ 
数据= 2;
检查=假;
 fadeornot = true;
 } 
数据+ +;
不一(蜂鸣器);
 songmillis = cmillis;蜂鸣器
 } } 
 
 
无效dothefade(unsigned long thismillis)
 / {
如果(thismillis - previousfademillis > = fadeinterval){ 
如果(B){ 
 fadevalue + = fadeincrement;
如果(fadevalue > = maxpwm){ 
 /最大,限制和改变方向
 fadevalue = maxpwm;
 B = false;} } { 
 
其他
 fadevalue = fadeincrement;
如果(fadevalue <= minpwm){ 
 / / min,限制和改变方向
 fadevalue = minpwm;
 B = true;
 } 
 } 
 analogWrite(LED,fadevalue);
你需要下载代码的底部,为了得到球。H和MelodyWithoutDelay码在一起,否则你会得到一个错误代码中缺失的音调。h文件。

===================================================================================

我希望你喜欢这个教程,我希望大部分你将能够程序的无线!

你想创建一个命令吗?看看这个链接去参加一个自由班来帮助启动你的兴趣教学。

关键是在外面玩的开心,做一些你和其他人觉得有趣,这是最困难的部分,然后你必须解释每一步的关键细节。我希望你能加入我们的教学社区!

记住,尽量少用延迟你的代码<u>在你的工作</u>,当然:)

 
  • melodywithoutdelayexample.zipmelodywithoutdelayexample.zip
     

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片