Cuprins:

TOYL Task Tracker: 3 pași (cu imagini)
TOYL Task Tracker: 3 pași (cu imagini)

Video: TOYL Task Tracker: 3 pași (cu imagini)

Video: TOYL Task Tracker: 3 pași (cu imagini)
Video: Bogdan DLP ✘ @AlessioMarco - Parfumul Tau | Official Video 2024, Noiembrie
Anonim
Image
Image
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker

Nu-l urăști doar atunci când intenționezi să lucrezi sau mai rău, dacă ești în mijlocul unei sesiuni de lucru și o notificare vine pe telefon - o „verificare rapidă” devine ore mai târziu. De asemenea, știți cât timp lucrați la anumite sarcini în raport cu timpul pe care l-ați alocat săptămânal pentru muncă?

Introduceți TOYL Task Tracker. Vă permite să opriți telefonul și să vă concentrați asupra muncii, permițându-vă simultan să setați timpul pe care doriți să lucrați săptămânal - să zicem 60 de ore - și sarcinile pe care doriți să le îndepliniți. Când vă așezați pentru o sesiune, aveți o idee despre cât de mult vă mai rămâne pentru munca dvs. generală. Tracker-ul are două moduri: Temporizator, unde ați setat cât timp doriți să petreceți pe sarcină pe săptămână și Cronometru, unde puteți pur și simplu să porniți-opriți cronometrul după selectarea unei sarcini.

Provizii

Circuit

  • Adafruit Feather Huzzah
  • Adafruit FeatherWing
  • Pinii antetului masculin
  • Pinii antetului feminin
  • Baterie de 500mAh
  • Rezistențe 100K ohm x2
  • Banda izolatoare
  • Sârmă torsadată
  • Decapanti de sârmă
  • Fan de lipit

Carcasă

  • Foaie acrilică opacă 24 "x18"
  • Bandă cu două fețe
  • Acces la un dispozitiv de tăiat cu laser
  • Software de vector

Pasul 1: lipiți circuitul

Lipiți circuitul
Lipiți circuitul
Lipiți circuitul
Lipiți circuitul
Lipiți circuitul
Lipiți circuitul

Lipiți pinii antetului feminin la Huzzah Feather. Acest tutorial este util pentru configurarea hardware Feather Huzzah. Apoi, lipiți pinii antetului masculin pe FeatherWing. Lipirea acestora în acest mod vă permite să vă alăturați și să separați Aripa Penei de Huzzah Pene atunci când este necesar. Acest lucru este deosebit de util atunci când trebuie să adăugați rezistențe la FeatherWing, care este pasul următor. Conectați rezistențe de 100K ohm de la fiecare pin 0 și 2, conectat la 3V.

Configurați hardware-ul Feather Huzzah

Configurați hardware-ul Feather Wing

Pasul 2: Adăugați codul

Adaugă codul tău
Adaugă codul tău
Adaugă codul tău
Adaugă codul tău

Acest cod este o adaptare a codului lecției 5 Internetul obiectelor, Permițând timpul, aș dori să înlocuiesc serviciul Preceptitaton cu unul care urmărește sarcinile care sunt adăugate prin applet-ul ToDosit IFTTT. În acest moment, va trebui să introduceți manual un set de sarcini și să utilizați butonul A pentru a le parcurge. În plus, mi-aș fi dorit să fi codat temporizatorul pentru a număra în câteva minute și pentru a opri când trec la următoarea sarcină. O mulțumire imensă lui Becky Stern pentru crearea codului de bază pentru cronometru și ciclism prin sarcini. Dacă sunteți interesat să conectați proiectul la internet, vă recomand cu tărie să parcurgeți acest set de clase.

// Instructabile codul eșantionului clasei Internet of Things // Afișarea circuitului Date Internet // Datele meteo sunt colectate într-un flux // NeoPixels multipli vizualizează starea vremii // // Modificat de Becky Stern 2017 // pe baza Exemplului de abonament Adafruit IO

// Adafruit investește timp și resurse oferind acest cod sursă deschisă.

// Vă rugăm să susțineți Adafruit și hardware open source achiziționând // produse de la Adafruit! // // Scris de Todd Treece pentru Adafruit Industries // Copyright (c) 2016 Adafruit Industries // Licențiat sub licența MIT. // // Tot textul de mai sus trebuie să fie inclus în orice redistribuire.

/ ************************ Adafruit IO Configuration ********************* *********

/ vizitați io.adafruit.com dacă trebuie să vă creați un cont, // sau dacă aveți nevoie de cheia Adafruit IO. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/ ******************************** Configurare WIFI **************** ********************** /

#define WIFI_SSID "WifiName"

#define WIFI_PASS "Parola Wifi"

#include „AdafruitIO_WiFi.h”

AdafruitIO_WiFi io (IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);

/ ************************ Programul principal începe aici ********************* ********** /

#include #include #include #include

#include

#include #include #include

#define OLED_RESET 3

Afișaj Adafruit_SSD1306 (128, 32, & Wire, OLED_RESET);

// această constantă nu se va schimba:

butonul const intPinA = 0; // pinii pe care butoanele sunt atașate la butonul const intPinB = 16; // acesta are deja un rezistor pullup, celelalte două au nevoie de un buton const intPinC = 2;

// Variabilele se vor schimba:

buton intAPushCounter = 0; // contor pentru numărul de apăsări de butoane int buttonAState = 0; // starea curentă a butonului int lastButtonAState = 0; // starea anterioară a butonului

// Variabilele se vor schimba:

int buttonBPushCounter = 0; // contor pentru numărul de apăsări de butoane int buttonBState = 0; // starea curentă a butonului int lastButtonBState = 0; // starea anterioară a butonului

// Variabilele se vor schimba:

int buttonCPushCounter = 0; // contor pentru numărul de apăsări de butoane int buttonCState = 0; // starea curentă a butonului int lastButtonCState = 0; // starea anterioară a butonului

String displayForecast = "necunoscut";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed * precipitation = io.feed ("precipitație"); // configurați feedul „precipitații”

// AdafruitIO_Feed * taskmanager = io.feed ("taskmanager"); // configurați fluxul „taskmanager”

configurare nulă () {

pinMode (buttonPinA, INPUT); pinMode (buttonPinB, INPUT_PULLUP); pinMode (buttonPinC, INPUT);

// SSD1306_SWITCHCAPVCC = generează tensiunea de afișare de la 3.3V intern

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Adresați 0x3C pentru 128x32

// Afișați conținutul bufferului de afișare inițial pe ecran -

// biblioteca inițializează acest lucru cu un ecran de pornire Adafruit. display.display (); întârziere (2000); // Pauză timp de 2 secunde

// Ștergeți tamponul.

display.clearDisplay ();

// porniți conexiunea serială

Serial.begin (115200);

// conectați-vă la io.adafruit.com

Serial.print („Conectarea la Adafruit IO”); io.connect (); // configurați un handler de mesaje pentru fluxul „precipitații”. // funcția handleMessage (definită mai jos) // va fi apelată ori de câte ori este primit // un mesaj de la adafruit io. precipitații-> onMessage (handleMessage);

// așteptați o conexiune

while (io.status () <AIO_CONNECTED) {Serial.print ("."); întârziere (500); }

// suntem conectați

Serial.println (); Serial.println (io.statusText ());

}

bucla nulă () {

// io.run (); este necesar pentru toate schițele.

// ar trebui să fie întotdeauna prezent în partea de sus a buclei // funcției. menține clientul conectat la // io.adafruit.com și procesează orice date primite. io.run ();

// citiți pinul de intrare al butonului:

buttonAState = digitalRead (buttonPinA); buttonBState = digitalRead (buttonPinB); buttonCState = digitalRead (buttonPinC);

// comparați butonul State cu starea sa anterioară

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// dacă starea s-a schimbat, creșteți contorul dacă (buttonAState == LOW) {// dacă starea curentă este LOW, atunci butonul a fost apăsat butonulAPushCounter ++; Serial.print ("numărul de butoane A apasă:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// dacă starea curentă este LOW atunci butonul a fost apăsat buttonBPushCounter ++; Serial.print ("numărul de apăsări ale butonului B:"); Serial.println (buttonBPushCounter); Serial.println ("Timer de pornire"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// dacă starea curentă este LOW atunci butonul a fost apăsat buttonCPushCounter ++; Serial.print ("numărul de apăsări ale butonului C:"); Serial.println (buttonCPushCounter); Serial.println („Timp de oprire”); timerEnabled = 0; }} if (timerEnabled == 1) {// creșteți temporizatorul numai când a fost pornit timerVal = (millis () - lastStartTime) / 1000; }

// afișează poziția 1 - prognoză

// if (buttonAPushCounter% 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (ALB); // display.setCursor (0, 0); // display.print ("Prognoza:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("a doua linie"); // display.println („exemplu de conținut”); // display.display (); // // întârziere (2000); //}

// afișează poziția 1 - Sarcina 1

if (buttonAPushCounter% 3 == 0) {display.setTextSize (1); display.setTextColor (ALB); display.clearDisplay (); display.setCursor (0, 0); display.println ("Cercetare - Interviuri"); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }

// afișează poziția 2 - Sarcina 2

if (buttonAPushCounter% 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Making Studio - Code"); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }

// afișează poziția 3 - Sarcina 3

if (buttonAPushCounter% 3 == 2) {display.clearDisplay (); display.setCursor (0, 0); display.println ("DSV - Sketching"); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }

// salvați starea curentă ca ultima stare, // pentru data viitoare prin bucla lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// această funcție este apelată ori de câte ori un mesaj

// este primit de la Adafruit IO. a fost atașat la // feedul din funcția setup () de mai sus. void handleMessage (date AdafruitIO_Data *) {

String forecast = data-> toString (); // stochează datele meteo primite într-un șir

Serial.print ("primit <-"); Serial.println (prognoză); displayForecast = prognoză; // următoarele șiruri stochează diferitele cuvinte ale raportului meteo IFTTT pe care le-am descoperit până acum String task1 = String („Task 1”); String rain = String ("Ploaie"); String lightrain = String ("Ploaie ușoară"); String rainshower = String („Dus de ploaie”); String AMshowers = String ("AM Showers"); String rainandsnow = String ("Ploaie și zăpadă"); String snow = String („Zăpadă”); String snowshower = String („Zăpadă de duș”); String cloudy = String ("Noros"); String mostlycloudy = String ("Majoritatea înnorat"); String partialcloudy = String ("Parțial înnorat"); String clearsky = String ("Clear"); String fair = String ("Târg"); String sunny = String ("Soare");

// Aceste instrucțiuni if compară variabila meteo primită cu condițiile stocate și controlează NeoPixels în consecință.

// dacă este ploaie în prognoză if (forecast.equalsIgnoreCase (ploaie) || forecast.equalsIgnoreCase (lightrain) || forecast.equalsIgnoreCase (rainshower) || forecast.equalsIgnoreCase (AMshowers)) {Serial.println ("precipitații în prognoza de azi ");

}

// dacă există zăpadă în prognoză if (forecast.equalsIgnoreCase (ninsoare) || forecast.equalsIgnoreCase (rainandsnow) || forecast.equalsIgnoreCase (snowshower)) {Serial.println ("precipitații în prognoza de astăzi");

}

// dacă există soare în prognoză if (forecast.equalsIgnoreCase (clearsky) || forecast.equalsIgnoreCase (corect) || forecast.equalsIgnoreCase (sunny)) {Serial.println ("un fel de soare în prognoza de astăzi");

}

// dacă sunt nori în prognoză if (forecast.equalsIgnoreCase (înnorat) || forecast.equalsIgnoreCase (majoritatea înnorat) || forecast.equalsIgnoreCase (în parte înnorat)) {Serial.println ("cer înnorat în prognoza de astăzi");

}

}

Pasul 3: Creați Container / Shell

Creați Container / Shell
Creați Container / Shell
Creați Container / Shell
Creați Container / Shell
Creați Container / Shell
Creați Container / Shell
Creați Container / Shell
Creați Container / Shell

Pentru shell, începeți prin a determina ce dimensiune doriți să aibă cadrul dvs. sau puteți descărca fișierul meu. După ce determinați dimensiunea, puteți utiliza MakerCase pentru a crea aspectul pentru fișierul vector.

Rulați fișierul prin tăietorul laser - ar trebui să dureze aproximativ 5 minute. Apoi puneți coaja împreună.

Nu am ținut cont de lățimea materialului, ceea ce face ca butoanele mele să fie greu accesibile. Mai trebuie să găsesc o modalitate de a le atașa. De asemenea, sunt foarte mici, ceea ce le face dificil de lucrat.

Recomandat: