×

基于Arduino UNO的经典厨房定时器

消耗积分:0 | 格式:rar | 大小:0.43 MB | 2022-12-21

香香技术员

分享资料个

起初,上帝创造了天地。还有人类。人类创造了数字厨房定时器,就像这个。

人类说,酷但有点惨淡。让我们做一个更好的!

上帝说,我听到了你的呼唤,让 Arduinos 出现吧:地球上到处都是 Arduinos,这很好。

人类拿了一个 Arduino 并创造了一个更好的厨房定时器,就像这个。

上帝看到新的厨房计时器说:我看到了你的新厨房计时器,它看起来很糟糕,但似乎太有趣了!而这是好的。

你需要什么
既然您知道这一切的来源,让我们深入探讨一下。

我使用的所有组件都来自Arduino 入门套件,包括您在图片和视频中看到的小面包板。如果您愿意,可以随意将项目纳入更大的项目。

您还需要一个电源:在玩耍时,PC 的 USB 端口和电缆就足够了。

你需要做什么
首先:请从入门套件或您喜欢的组件箱中收集所有需要的组件;如果你没有,不要惊慌。互联网上有很多。您可以在下面找到组件列表。

而且,你也需要代码。它在它的盒子里,又在下面。

这个怎么运作
基本上,就像任何其他类似设备一样,您可以在您附近的任何商店花一美元购买。但是,这是你的。这将向您展示这些小工具实际上是如何工作的。

这里的关键字是:当前模式。计时器本身一次只能以四种模式中的一种运行:

  • IDLE - 计时器正在等待您的输入,显示当前设置的时间量;这也是上电或复位后的初始模式。
  • SETUP - 您可以通过长按 S4 进入此模式(在代码中这也称为“重置按钮”);在这里,通过使用 S3(“开始停止按钮”),您可以选择要更改的值,以便设置稍后倒计时的经过时间;最后,分别使用 S2(“向下按钮”)和 S1(“向上按钮”),您可以减少或增加所选值(小时、分钟或秒)。
  • RUNNING - 您可以通过按 S3 进入此模式,而离开它将需要 S3 或 S4(这将导致您进入空闲模式)。
  • RINGING - 当所需的时间过去后,此模式将自动激活;你可以通过按任意开关离开它(即,让小男孩停止响铃)。

编码
首先,我们需要包含适当的库:

FuSYWnkJEuFbD77fT3LF_cvCarWh

如果您还没有它们,则需要下载并安装它们:

  • Paul Stoffregen 的时间图书馆(请从绿色的“克隆或下载”按钮下载ZIP)
  • Arduino 液晶库

接下来,让我们初始化那个漂亮的 LCD 模块:

Fhr-q2MXpZV-cBukvuRDoc4eEPEf

请随意随意打乱引脚以获得良好的布线布局:不要跟着我这样做,因为我做了一个糟糕的布线计划!:D 例如,您可以反转上述语句中的后四个引脚,以避免在下面的示意图中看到黄色电线交叉(显然,您必须相应地调整按钮引脚常数,见下文)。玩,玩得开心!在复制/粘贴之后,Arduinos 的生活就开始了!

接下来的 51 行代码包含静态变量声明和初始化。请随意浏览它们,它们清晰的名称和一些零散的评论将引导您了解整个事情。

setup() 函数执行您已经在任何 Arduino 草图中看到无数次的通常的初步步骤。唯一值得注意的是第一个语句,它将设置初始 LCD 显示光标的位置。因为,是的:这个模块要求你沿着它的行和列设置一个位置,然后“打印”一些东西,它会从那个位置开始出现。

现在让我们转到 loop() 函数。

首先,让我们发现开关状态。为了实现这一点,几乎每一个都使用了以下代码块:

Fu1_1PcJ6fwpAx62VvCmvv2jbfMp

针对相关引脚发出 digitalRead 并将结果与​​先前读取的值进行比较:如果发生变化,则存储新值以供将来参考,如果按下按钮,则 bool "xxxButtonPressed" 静态变量设置为 true。

查看下面的威廉希尔官方网站 图,您会注意到每个输入引脚都被一个 10k 电阻器强制为低电平,除非按下相应的开关并且引脚本身直接连接到 +5V。一个相当经典的场景,嗯?

之前,我说“几乎每个”都是因为有一个按钮的作用与其他按钮不同:S4。它的代码块能够检测到上述长按以进入 SETUP 模式。

接下来是模式管理块切换:每个案例查看按钮状态触发器(“xxxButtonPressed”)并将流重定向到正确的新状态,或执行正确的操作。

FnQ2LU44vofk1CBY87oeVFsRiGrf

前面的代码片段显示了 IDLE 模式的管理方式,并且一目了然。另一个示例显示了在响铃时按下任何按钮将如何停止响铃:

FrELj0twenJ-JcOFmZ6DjEOqil-6

下一个块 - “时间管理” - 执行实际的时间差计算,触发 RINGING 模式并在需要时实际响铃。

最后一个块——“LCD 管理”——通过在适当的位置打印适当的字符串来管理每种模式的 LCD 显示。

就是这样。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于Arduino UNO的经典厨房定时器',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);