如何利用Arduino制作一个番茄钟

描述

  我经常难以专注于我应该做的事情。该设备可以很好的帮助我解决这个问题!

  补给品

  微芯科技ATtiny85×1

  ArduinoIDE

  电烙铁(通用)

  什么是番茄钟

  我经常难以专注于我应该做的事情。有时是由于:体力活动不足,睡眠不足,或智能手机干扰。这个问题开始困扰我,所以我试图找到解决办法,于是了解到了番茄钟原理,这是通过将您的工作时间分为几个系列的25分钟专注和5分钟休息来完成的。在专注期间,您需要关闭互联网,以便您不会收到通知并能够完全专注于应该做的事情。另一方面,在5分钟的休息时间里,可以完全的专注。

  因此我决定造一个这样的物理设备来帮助我。

  第1步:原型

  我打开Tinkercad,创建了一个原型电路。

led

  第2步:印刷电路板

led

led

  我将所有组件放在PCB上,创建了轨道,并添加了一个多边形。我将项目导出到Gerber文件,创建了一个新文件夹,并将这些文件添加到其中,然后将它们压缩为.zip扩展名,以便我可以轻松地将它们传递到生产环境。

  第3步:组装

led

  与此同时,我得到了零件,即LED、电阻器、服装和其他元件。板子是双层的,元件多的部分用热风台焊接,另一部分用普通烙铁焊接。

  第4步:设备运行原理

led

  此时,MadinaMe的工作方式是,当您单击按钮时,会开始25分钟倒计时,并且每5分钟一个LED会熄灭并通知您经过的时间。时间过去后,会激活一个迷你动画,通知休息时间,从休息时间返回后,再次按下按钮。

项目代码:

(ST_CP) of 74HC595
const int latchPin = 1;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 2;
//Pin connected to Data in (DS) of 74HC595
const int dataPin = 0;
bool lightOn;
void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(3, INPUT);

  lightOn = false;
  light(false);
Serial.begin(9600);
}


void loop() {
  pomodoro();
  Serial.println(digitalRead(3));
}

void light(bool state) {
  byte val = 255;
  if (state == false) val = 0;

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, val);
  digitalWrite(latchPin, HIGH);
}

void registerWrite(int whichPin, int whichState) {
  // the bits you want to send
  byte bitsToSend = 0;

  // turn off the output so the pins don't light up
  // while you're shifting bits:
  digitalWrite(latchPin, LOW);

  // turn on the next highest bit in bitsToSend:
  bitWrite(bitsToSend, whichPin, whichState);

  // shift the bits out:
  shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);

  // turn on the output so the LEDs can light up:
  digitalWrite(latchPin, HIGH);
}

void pomodoro()
{
  if (digitalRead(3) == 1)
  {
    delay(500);
    for (int i = 0; i <= 5; i++) {
      delay(10);
      light(true);
    }

    if (digitalRead(3) == 0)
    {
      for (int i = 5; i >= 0; i--) {
        if (digitalRead(3) == 1)
        {
          break;
        }
        delay(10000);
        light(false);
      }
    }
    for (int a = 0; a < 10; a++)
    {
      for (int i = 5; i >= 0; i--) {
        delay(100);
        light(true);
      }

      for (int i = 5; i >= 0; i--) {
        delay(100);
        light(false);
      }
    }
  }
}

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

全部0条评论

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

×
20
完善资料,
赚取积分