情人节创意 - 一起度过的天数计数器(照片)
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
图> 图>
早在 2017 年 9 月,我想,我刚刚开始我的大学二年级,我遇到了一个了不起的女孩。我搬进了她和她的朋友的住处,最后我们一起分享了房子的一层楼,只有我和她。所以我们开始交谈并成为最好的伙伴,几个月后,我们开始约会。我们开始约会的那一天是 10.12.2017(英国日期)。
日; 10日
月; 12日
不管怎样,差不多一年过去了,我正试图弄清楚我们的周年纪念日该做什么,一个想法突然出现在我的脑海中。我认为让她做一些我正在学习的事情(电子学)可能会很好,所以我决定使用一个计数系统来计算我们开始约会的天数并将其放入相框中并有我和她的照片一起。
您可能遇到过这个线程并且需要一个想法来庆祝您的周年纪念,或者您只是浏览一下,无论哪种方式,这都是一个有趣的项目,我将在这里输入所有内容以向您展示如何制作自己动手。
这个项目唯一困难的部分是代码。我已经制作了一个示例模板,当你编译和上传它时,它会显示我和我女朋友的日期,但我在代码中添加了注释,以便你可以在自己的日期中进行编辑
无论如何,享受吧!
代码
- DaysCounter.ino
DaysCounter.inoC/C++
为此,您需要下载 arduino IDERTC 库 zip 文件,
七段zip文件
将这两个库保存到安装 arduino ide 的库文件夹中。
从那里打开 arduino ide 并单击“草图”
'包括图书馆'
'添加 zip 库'
按照下面的代码
调整时间 - 在第 7 行的括号中显示 (2017, 12, 9, 0, 0, 0,) 您需要更改前 3 个数字
即 2017, 12, 9 ----> 2014, 4, 6,
你们在一起的任何日期,在那里输入。
然后编译并选择上传,如果一切都按计划进行并且您正确地遵循了步骤,它应该显示你们在一起的天数
#include#include SevSeg sevseg; //实例化一个七段控制器对象RTC_DS3231 rtc;日期时间 dtBegin (2017, 12, 9, 0, 0, 0); //!!!!!!在这里调整时间!!!!!!TimeSpan tsPassed;void showInfo(const DateTime&dt) { Serial.print("NOW:"); Serial.print(dt.year(), DEC); Serial.print('/'); Serial.print(dt.month(), DEC); Serial.print('/'); Serial.print(dt.day(), DEC); Serial.print(' '); Serial.print(dt.hour(), DEC); Serial.print(':'); Serial.print(dt.minute(), DEC); Serial.print(':'); Serial.print(dt.second(), DEC); Serial.print("\tPASSED:"); Serial.print(tsPassed.days(), DEC); Serial.print(' '); Serial.print(tsPassed.hours(), DEC); Serial.print(':'); Serial.print(tsPassed.minutes(), DEC); Serial.print(':'); Serial.print(tsPassed.seconds(), DEC); Serial.println("");}//==========================================////==========================================void delayWithUpdate( uint32_t parDelay){ uint32_t 开始=millis();而 (millis()<开始+parDelay){ sevseg.refreshDisplay(); }}//==========================//========================void setup(){ Serial.begin(9600); Serial.println(__TIME__); if (!rtc.begin()) { Serial.println("找不到 RTC"); //===设备将被冻结在这里。 //?????????可能是一些错误 LED 闪烁会很好用??????而 (1); } 延迟(1000); //!!!!!!调整时间://1) 取消注释下面的一行(在那些注释下)//2),再次上传代码 //3) 返回注释行 //4)。再上传一次 rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //调整时间字节的行 numDigits =4;字节 digitPins[] ={7, 8, 9, 10}; //SEG:A B C D E F G . //PIN:11 7 4 2 1 10 5 3 //ARDU:2 3 4 5 11 12 13 6 //字节段Pins[] ={2, 3, 4, 5, 11, 12, 13, 6}; byte segmentPins[] ={2, 3, 4, 5, 11, 12, 13, 6};布尔电阻器OnSegments =false; // 'false' 表示电阻在数字引脚上 byte hardwareConfig =COMMON_CATHODE; // 查看 README.md 中的选项 bool updateWithDelays =false; // 默认 'false' 是推荐的 boolleadingZeros =false; // 如果您想保留前导零,请使用“true” bool disableDecPoint =true; // 如果小数点不存在或未连接,则使用“true” sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistanceOnSegments, updateWithDelays,leadingZeros, disableDecPoint); sevseg.setBrightness(100); sevseg.setNumber(1234, 1);延迟更新(1000); sevseg.setNumber(8888, 1);延迟更新(1000); }//======================================================void loop(){ sevseg.refreshDisplay();现在日期时间 =rtc.now(); tsPassed =现在-dtBegin;静态 uint32_t nextReportMillis=0;静态 uint16_t prevDaysPassed=0; if (tsPassed.days() !=prevDaysPassed){ prevDaysPassed=tsPassed.days(); sevseg.setNumber(prevDaysPassed, 0); sevseg.refreshDisplay(); if (millis()>nextReportMillis){ //===在这里打印一些信息 showInfo(now); nextReportMillis=millis()+5000; } }
示意图
https://www.circuito.io/app?components=512,11021]复制并粘贴链接。
点击添加组件
类型;
RTC(添加);
7段显示器20mm(选择通用,不要选择sparkfun);
按照图表并使用跨接电缆连接每个引脚
制造工艺