Tartalomjegyzék:

TOYL Task Tracker: 3 lépés (képekkel)
TOYL Task Tracker: 3 lépés (képekkel)

Videó: TOYL Task Tracker: 3 lépés (képekkel)

Videó: TOYL Task Tracker: 3 lépés (képekkel)
Videó: «Человек и война» // «Скажи Гордеевой» 2024, Július
Anonim
Image
Image
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker

Ne csak gyűlölje, ha dolgozni tervez, vagy rosszabb esetben, egy munkamenet kellős közepén van, és egy értesítés érkezik a telefonjára-a „gyors ellenőrzés” órákkal később lesz. Azt is tudja, hogy mennyi időt dolgozik bizonyos feladatokon a heti munkára szánt időhöz képest?

Lépjen be a TOYL Feladatkövetőbe. Lehetővé teszi a telefon kikapcsolását és a munkára való összpontosítást, ugyanakkor lehetővé teszi, hogy beállítsa a heti munkaidőt-mondjuk 60 órát-és az elvégzendő feladatokat. Amikor leül egy foglalkozásra, akkor képet kap arról, hogy mennyi ideje maradt a munkájára. A nyomkövetőnek két módja van: az időzítő, ahol előre beállította, hogy mennyi időt szeretne tölteni feladatonként hetente, és a stopper, ahol egyszerűen elindíthatja-leállíthatja az időzítőt egy feladat kiválasztása után.

Kellékek

Áramkör

  • Adafruit Feather Huzzah
  • Adafruit FeatherWing
  • Férfi fejléc csapok
  • Női fejléc csapok
  • 500mAh akkumulátor
  • 100K ohmos ellenállások x2
  • Szigetelő szalag
  • Sodrott huzal
  • Huzalhúzók
  • Forrasztó ventilátor

Burkolat

  • Átlátszatlan akril lap 24 "x18"
  • Kétoldalú ragasztó
  • Hozzáférés egy lézervágóhoz
  • Vektor szoftver

1. lépés: Forrasztás az áramkörön

Forrasztja az áramkört
Forrasztja az áramkört
Forrasztás az áramkör
Forrasztás az áramkör
Forrasztja az áramkört
Forrasztja az áramkört

Forgassa a női fejléceket a Feather Huzzah -ra. Ez az oktatóanyag hasznos a Feather Huzzah hardver beállításához. Ezután forrasztja a fejléc csapjait a FeatherWinghez. Az ilyen módon történő forrasztás lehetővé teszi a tollszárny összekapcsolását és elválasztását a Feather Huzzah -tól, ha szükséges. Ez különösen akkor hasznos, ha ellenállásokat kell hozzáadnia a FeatherWinghez, ami a következő lépés. Csatlakoztasson 100K ohmos ellenállásokat minden 0 és 2 érintkezőből, 3V -ra csatlakoztatva.

Állítsa be a Feather Huzzah hardvert

Állítsa be a Feather Wing hardvert

2. lépés: Adja hozzá a kódot

Adja hozzá kódját
Adja hozzá kódját
Adja hozzá kódját
Adja hozzá kódját

Ez a kód az 5. lecke tárgyak internete kódjának adaptációja. Ha időm engedi, szeretném lecserélni a Preceptitaton szolgáltatást egy olyanra, amely a ToDosit IFTTT kisalkalmazáson keresztül hozzáadott feladatokat követi. Jelenleg manuálisan kell beírnia egy feladatkészletet, és az A gombbal végig kell lépnie rajtuk. Ezenkívül szerettem volna az időzítőt kódolni, hogy percben számolja, és leálljon, amikor a következő feladatra vált. Hatalmas köszönet Becky Sternnek az időzítő alapkódjának létrehozásáért és a feladatok elvégzéséért. Ha érdekli a projekt internethez való csatlakoztatása, azt javaslom, hogy nézze meg ezt az osztályt.

// Instructables Internet of Things Class mintakód // Circuit Internet Data

// Az Adafruit időt és erőforrásokat fektet be a nyílt forráskód biztosításába.

// Kérjük, támogassa az Adafruitot és a nyílt forráskódú hardvert az Adafruit termékeinek megvásárlásával! // // Todd Treece írta az Adafruit Industries számára // Copyright (c) 2016 Adafruit Industries // Az MIT licenc alapján engedélyezett. // // A fenti szöveget minden újraelosztásnak tartalmaznia kell.

/************************ Adafruit IO konfiguráció ********************** *********

/ látogasson el az io.adafruit.com webhelyre, ha fiókot kell létrehoznia, // vagy ha szüksége van az Adafruit IO kulcsra. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/******************************** WIFI konfiguráció **************** **********************/

#define WIFI_SSID "WifiName"

#define WIFI_PASS "WifiPassword"

#include "AdafruitIO_WiFi.h"

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

/************************ Itt kezdődik a fő program ********************* **********/

#befoglalás #befoglalás #befoglalás #befoglalás

#befoglalni

#befoglalni #befoglalni #befoglalni

#define OLED_RESET 3

Adafruit_SSD1306 kijelző (128, 32, & Wire, OLED_RESET);

// ez az állandó nem változik:

const int gombPinA = 0; // azok a gombostűk, amelyekhez a nyomógombok a const int gombhoz vannak rögzítvePinB = 16; // ennek már van felhúzó ellenállása, a másik kettőnek szüksége van egy const int gombraPinC = 2;

// A változók változnak:

int gombAPushCounter = 0; // számláló a gombnyomások számához int buttonAState = 0; // a gomb jelenlegi állapota int lastButtonAState = 0; // a gomb előző állapota

// A változók változnak:

int gombBPushCounter = 0; // számláló a gombnyomások számához int buttonBState = 0; // a gomb jelenlegi állapota int lastButtonBState = 0; // a gomb előző állapota

// A változók változnak:

int gombCPushCounter = 0; // számláló a gombnyomások számához int buttonCState = 0; // a gomb jelenlegi állapota int lastButtonCState = 0; // a gomb előző állapota

String displayForecast = "ismeretlen";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed *csapadék = io.feed ("csapadék"); // a 'csapadék' feed beállítása

// AdafruitIO_Feed *taskmanager = io.feed ("taskmanager"); // a 'feladatkezelő' feed beállítása

void setup () {

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

// SSD1306_SWITCHCAPVCC = a kijelző feszültségének generálása 3.3V -ból belsőleg

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Cím 0x3C 128x32 esetén

// A kezdeti megjelenítési puffer tartalom megjelenítése a képernyőn -

// a könyvtár inicializálja ezt egy Adafruit splash képernyővel. display.display (); késleltetés (2000); // Szünet 2 másodpercre

// Törölje a puffert.

display.clearDisplay ();

// indítsa el a soros kapcsolatot

Sorozat.kezdet (115200);

// csatlakozzon az io.adafruit.com webhelyhez

Serial.print ("Csatlakozás Adafruit IO -hoz"); io.connect (); // üzenetkezelő beállítása a 'csapadék' feedhez. // a handleMessage függvény (az alábbiakban definiálva) // meghívásra kerül, amikor üzenet érkezik // az adafruit io -tól. csapadék-> onMessage (handleMessage);

// várjon a kapcsolatra

while (io.status () <AIO_CONNECTED) {Serial.print ("."); késleltetés (500); }

// kapcsolatban vagyunk

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

}

void loop () {

// io.run (); minden vázlathoz kötelező.

// mindig jelen kell lennie a ciklus // függvényének tetején. az ügyfelet csatlakoztatva tartja az // io.adafruit.com webhelyhez, és feldolgozza a bejövő adatokat. io.run ();

// olvassa el a nyomógomb bemeneti csapját:

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

// a buttonState összehasonlítása az előző állapotával

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// ha az állapot megváltozott, akkor növelje a számlálót, ha (buttonAState == LOW) {// ha az aktuális állapot LOW, akkor a gomb megnyomta a gombotAPushCounter ++; Serial.print ("A gomb megnyomásának száma:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// ha az aktuális állapot LOW, akkor a gombot megnyomta buttonBPushCounter ++; Serial.print ("B gomb megnyomások száma:"); Serial.println (buttonBPushCounter); Serial.println ("Indítás időzítő"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// ha az aktuális állapot LOW, akkor a gombot megnyomták buttonCPushCounter ++; Serial.print ("C gomb megnyomások száma:"); Serial.println (buttonCPushCounter); Serial.println ("Stopping timer"); timerEnabled = 0; }} if (timerEnabled == 1) {// csak akkor növelje az időzítőt, amikor elindította timerVal = (millis () - lastStartTime)/1000; }

// 1. pozíció megjelenítése - előrejelzés

// if (buttonAPushCounter % 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (FEHÉR); // display.setCursor (0, 0); // display.print ("Előrejelzés:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("második sor"); // display.println ("példa tartalom"); // display.display (); // // delay (2000); //}

// 1. pozíció megjelenítése - 1. feladat

if (buttonAPushCounter % 3 == 0) {display.setTextSize (1); display.setTextColor (FEHÉR); display.clearDisplay (); display.setCursor (0, 0); display.println ("Kutatás - Interjúk"); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }

// 2. pozíció megjelenítése - 2. feladat

if (buttonAPushCounter % 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Stúdió készítése - kód"); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }

// 3. pozíció megjelenítése - 3. feladat

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

// az aktuális állapot mentése utolsó állapotként, // a következő alkalommal a cikluson keresztül lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// ezt a függvényt hívják meg minden üzenet esetén

// az Adafruit IO -tól érkezik. a fenti setup () függvényben a // feedhez csatolták. void handleMessage (AdafruitIO_Data *adatok) {

String előrejelzés = adatok-> toString (); // tárolja a bejövő időjárási adatokat karakterláncban

Serial.print ("kapott <-"); Serial.println (előrejelzés); displayForecast = előrejelzés; // a következő karakterláncok tárolják a különböző IFTTT időjárásjelentési szavakat, amelyeket eddig felfedeztem String task1 = String ("1. feladat"); String rain = String ("Eső"); String lightrain = String ("Könnyű eső"); String esőzuhany = String ("Esőzuhany"); String AMshowers = String ("AM zuhanyok"); String rainandsnow = String ("Eső és hó"); String snow = String ("Hó"); String snowshower = String ("Hózuhany"); String cloudy = String ("Felhős"); String Mostcloudy = String ("Többnyire felhős"); String részben felhős = String ("Részben felhős"); String clearsky = Karakterlánc ("Törlés"); String fair = String ("Fair"); String sunny = String ("Sunny");

// Ezek az if utasítások összehasonlítják a bejövő időjárási változót a tárolt feltételekkel, és ennek megfelelően vezérlik a NeoPixeleket.

// ha esik az eső az előrejelzésben előrejelzés ma );

}

// ha hó van az előrejelzésben if (prognoz.equalsIgnoreCase (hó) || prognoz.equalsIgnoreCase (esőhó) || prognoz.equalsIgnoreCase (hóeső)) {Serial.println ("csapadék az előrejelzésben ma");

}

// ha van nap az előrejelzésben if (prognoz.equalsIgnoreCase (világos) | || prognoz.equalsIgnoreCase (fair) || prognoz.equalsIgnoreCase (napos)) {Serial.println ("valamiféle nap az előrejelzésben ma");

}

// ha vannak felhők az előrejelzésben if (prognoz.equalsIgnoreCase (felhős) || prognoz.equalsIgnoreCase (többnyire felhős) || prognoz.equalsIgnoreCase (részben felhős)) {Serial.println ("felhős égbolt az előrejelzésben ma");

}

}

3. lépés: Hozza létre a tárolót / héjat

Hozza létre a tárolót / kagylót
Hozza létre a tárolót / kagylót
Hozza létre a tárolót / kagylót
Hozza létre a tárolót / kagylót
Hozza létre a tárolót / kagylót
Hozza létre a tárolót / kagylót
Hozza létre a tárolót / kagylót
Hozza létre a tárolót / kagylót

A héjnál kezdje azzal, hogy meghatározza, milyen méretűre szeretné a keretét, vagy töltse le a fájlomat. Miután meghatározta a méretet, a MakerCase segítségével létrehozhatja a vektorfájl elrendezését.

Futtassa le a fájlt a lézervágón - körülbelül 5 percet vesz igénybe. Ezt követően rakja össze a héjat.

Nem vettem figyelembe az anyag szélességét, ami megnehezíti a gombok elérését. Még mindig meg kell találnom a módját, hogy rögzítsem őket. Nagyon kicsik is, ami megnehezíti a munkát.

Ajánlott: