亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

简单的 Arduino 天文钟

组件和用品

Arduino UNO
任何 arduino .. 有时不仅是
× 1
按钮(未锁定)
带下拉电阻(我使用 1kohm)
× 1
电阻 10k ohm
× 1

应用和在线服务

Arduino IDE

关于这个项目

我正在做一个有趣的项目,我需要一个 Arduino 天文钟,只要我按下按钮就可以工作。这不是一件复杂的事情,但我认为这段代码对于其他人的项目会很方便。

我可能为您节省了 1 小时的编码时间。

EEPROM:

当您断开电源或重置电路板时,Arduino 的内存不会丢失其信息。(信息)。我正在使用 #include 库基本上可以完成所有事情,并且默认情况下已经安装。

中断:

我们的 Arduino 内部正在发生一些事情,但我们希望它停止做任何事情,并在例如某个引脚被拉高时处理我们的 ISR 功能。这里不需要额外的库:

项目代码:

  • 定义并包括:
#include  #define interruptPin 2 #define eeAddress 0 //ARDUINO 的 EEPROM(内部非易失性存储器)的地址 float starttime =0; //做数学运算的变量 float endtime=0;浮动结果时间=0,旧结果时间=0;  

这里没有什么新东西,我们包含了 EEPROM 库,我们决定按钮将被连接到(pin2)的哪个位置。

然后我决定使用 EEPROM 存储器的地址 0 来存储我们的时间(浮点数 =4 字节)。 Arduino UNO 有 1024 字节(芯片 ATmega328),但我选择地址 0,因为我试图在我的生活中组织一次。

  • 设置()
void setup() { Serial.begin(9600); while (!Serial) {; // 等待串口连接。仅适用于本机 USB 端口 } Serial.println("串行通信已准备就绪,先生!:.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);}  

通常,我们在 Arduino 和我们的 PC 之间启动串行通信(9600 波特):

attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE); 

当interruptPin的逻辑电平发生变化时Attachinterrupt激活该函数:(____________-HERE------------------_HERE____________).

这样它会在我们按下的开始和结束时触发两次。如果没有任何反应,我们的中断引脚值将保持低电平,因为我们的下拉电阻“迫使”它保持低电平。

  • 循环()
void loop() { }  

没有什么。把你的东西放在那里!

  • 其他功能:
void refreshTime(){ if(digitalRead(interruptPin)){ starttime=millis(); Serial.print("开始时间:"); Serial.println(开始时间); }else if(digitalRead(interruptPin)==LOW){ endtime=millis();结果时间=结束时间-开始时间; Serial.print("结束时间:"); Serial.println(结束时间); Serial.print("结果时间:"); Serial.println(结果时间); WhatsNewEeprom();//存储eeprom }  

这是pin(interruptPin)发生中断时将要执行的函数。

每次中断引脚中的状态发生变化(HIGH 到 LOW 或 LOW 到 HIGH)时都会触发中断,那些 if(...) 用于检测它的 HIGH->LOW 或 LOW->high 变化。

存储由 Arduino millis() 的内部时钟记录的时间,并为我们准备好结果时间做差异。最后,它将新信息存储在 eeprom 中:

void WhatsNewEeprom(){ Serial.println("-----------检查 eeprom"); EEPROM.get(eeAddress, oldresulttime); Serial.print("oldresulttime");Serial.println(oldresulttime); Serial.print("resulttime");Serial.println(resulttime); if(resulttime!=oldresulttime){ EEPROM.put(eeAddress, resulttime); Serial.print("-----叮!eeprom记录新时间:");Serial.println(resulttime); }else{ Serial.println("没有找到新的时间,eeprom 没有受到干扰"); }  

这个检查存储在 eeprom 中的时间值是否与我们在变量“resulttime”中的值相同,如果是,我们没有改变它,所以什么都不做。

额外的!去抖动我们的按钮:

我们人类对于 Arduino 的处理时间非常慢,按一下按钮对我们来说似乎很快,但对于 Arduino 来说真的很慢,这使得信号“反弹”,就像在确定真实状态之前切换 highlowhighlowhighlow 几次一样。

如果我们想要(我没有),我们可以通过硬件或软件修复它:

  • 通过软件去抖动
  • 通过硬件去抖动,使用电容!!! :D

我只是要添加一个 220nF 的并联(从 sensepin 到 GND)

电容器“吃掉”电压的快速变化。

代码

  • arduino 计时器
arduino 计时器Arduino
使用 eeprom 和中断,很容易破解
//由 Javier Muñoz 编码 23/10/2017//问题和烧毁的电报 [email protected]#include #define interruptPin 2#define eeAddress 0 // ARDUINO 的 EEPROM(内部非易失性存储器)的地址 float starttime =0; //做数学运算的变量 float endtime=0;浮动结果时间=0,旧结果时间=0;无效设置(){ Serial.begin(9600); while (!Serial) {; // 等待串口连接。仅适用于本机 USB 端口 } Serial.println("串行通信已准备就绪,先生!:.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);//当interruptPin的逻辑电平发生变化时激活该函数,所以:(__-HERE------------------_HERE____)这样它存储了我们的手指按下按钮的时间}void loop() {//你的东西在这里//(eeprom存储)上次以毫秒为单位测量的“浮动结果时间”}void refreshTime(){ if(digitalRead(interruptPin) ){ 开始时间=毫秒(); Serial.print("开始时间:"); Serial.println(开始时间); }else if(digitalRead(interruptPin)==LOW){ endtime=millis();结果时间=结束时间-开始时间; Serial.print("结束时间:"); Serial.println(结束时间); Serial.print("结果时间:"); Serial.println(resulttime);WhatsNewEeprom(); }}void WhatsNewEeprom(){ Serial.println("-----------检查 eeprom"); EEPROM.get(eeAddress, oldresulttime); Serial.print("oldresulttime");Serial.println(oldresulttime); Serial.print("resulttime");Serial.println(resulttime); if(resulttime!=oldresulttime){ EEPROM.put(eeAddress, resulttime); Serial.print("-----叮!eeprom记录新时间:");Serial.println(resulttime); }else{ Serial.println("没有找到新的时间,eeprom 没有受到干扰"); }}

示意图

带有下拉电阻的按钮的简单连接 天文台_APM32Y9FoM.fzz

制造工艺

  1. 使用 Adafruit 1/4 60 Ring Neopixel 的简单挂钟
  2. 简单字时钟(Arduino)
  3. 诺基亚 5110 LCD 上的 DIY 简单 20 kHz Arduino 示波器
  4. Arduino Spybot
  5. FlickMote
  6. 自制电视 B-Gone
  7. 主时钟
  8. 带有 Arduino 的简单障碍物传感器
  9. 找到我
  10. Arduino Power
  11. 简单的 UNO 计算器
  12. 带 DS1302 RTC 的简单闹钟