Obsah:

Tracker úkolů TOYL: 3 kroky (s obrázky)
Tracker úkolů TOYL: 3 kroky (s obrázky)

Video: Tracker úkolů TOYL: 3 kroky (s obrázky)

Video: Tracker úkolů TOYL: 3 kroky (s obrázky)
Video: Электрический или водяной полотенцесушитель? Что выбрать? Установка. #25 2024, Červenec
Anonim
Image
Image
Sledovač úkolů TOYL
Sledovač úkolů TOYL
Sledovač úkolů TOYL
Sledovač úkolů TOYL

Nenávidíte to, když plánujete pracovat nebo ještě hůř, jste uprostřed pracovního sezení a na váš telefon přijde oznámení-„rychlá kontrola“se stane o několik hodin později. Také víte, kolik času věnujete určitým úkolům v poměru k času, který jste si na práci přidělili za týden?

Zadejte TOYL Task Tracker. Umožňuje vám vypnout telefon a soustředit se na práci a současně vám umožňuje nastavit dobu, kterou byste chtěli odpracovat za týden-řekněme 60 hodin-a úkoly, které chcete splnit. Když si sednete k sezení, získáte představu o tom, kolik času vám zbývá na celkovou práci. Tracker má dva režimy: Časovač, kde jste si přednastavili, kolik času chcete strávit na úkol za týden, a Stopky, kde můžete jednoduše spustit nebo zastavit časovač po výběru úkolu.

Zásoby

Obvod

  • Adafruit Feather Huzzah
  • Peří křídlo Adafruit
  • Samčí kolíkové hlavičky
  • Samičí záhlaví kolíků
  • 500mAh baterie
  • Rezistory 100K ohm x2
  • Izolační páska
  • Splétaný drát
  • Odstraňovače drátů
  • Pájecí ventilátor

Kryt

  • Neprůhledný akrylový list 24”x18”
  • Oboustranná páska
  • Přístup k laserové řezačce
  • Vektorový software

Krok 1: Pájejte obvod

Pájejte svůj obvod
Pájejte svůj obvod
Pájejte svůj obvod
Pájejte svůj obvod
Pájejte svůj obvod
Pájejte svůj obvod

Připájejte kolíkové hlavičky k Feather Huzzah. Tento tutoriál je užitečný pro nastavení hardwaru Feather Huzzah. Poté připájejte samčí kolíkové hlavičky k FeatherWing. Pájení tímto způsobem vám umožní v případě potřeby připojit a oddělit Feather Wing od Feather Huzzah. To je obzvláště užitečné, když potřebujete do svého FeatherWing přidat odpory, což je další krok. Připojte odpory 100K ohmů z každého pinu 0 a 2 připojeného na 3V.

Nastavte si hardware Feather Huzzah

Nastavte si hardware Feather Wing

Krok 2: Přidejte svůj kód

Přidejte svůj kód
Přidejte svůj kód
Přidejte svůj kód
Přidejte svůj kód

Tento kód je adaptací kódu Lekce 5 Internet věcí, pokud to čas dovolí, chtěl bych nahradit službu Preceptitaton službou, která sleduje úkoly přidané prostřednictvím apletu ToDosit IFTTT. V tuto chvíli byste museli ručně zadat sadu úkolů a pomocí tlačítka A je procházet. Navíc bych byl rád, kdyby byl časovač zakódován tak, aby počítal v minutách a zastavil se při přepnutí na další úkol. Velké poděkování Becky Sternové za vytvoření základního kódu pro časovač a procházení úkolů. Pokud máte zájem o připojení projektu k internetu, vřele doporučuji projít si tuto sadu tříd.

// Instructables Internet of Class Ukázkový kód // Okruh zobrazuje internetová data // Data o počasí se shromažďují ve zdroji // Několik NeoPixelů vizualizuje povětrnostní podmínky // // Upraveno Becky Stern 2017 // na základě příkladu předplatného Adafruit IO

// Adafruit investuje čas a prostředky poskytováním tohoto otevřeného zdrojového kódu.

// Podporujte prosím Adafruit a hardware s otevřeným zdrojovým kódem nákupem // produktů od Adafruit! // // Napsal Todd Treece pro Adafruit Industries // Copyright (c) 2016 Adafruit Industries // Licencováno pod licencí MIT. // // Veškerý výše uvedený text musí být součástí jakékoli redistribuce.

/************************ Konfigurace IO Adafruit ********************* *********

/ navštivte io.adafruit.com, pokud si potřebujete vytvořit účet, // nebo pokud potřebujete IO klíč Adafruit. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/******************************* Konfigurace WIFI **************** *********************/

#define WIFI_SSID "WifiName"

#define WIFI_PASS "WifiPassword"

#include "AdafruitIO_WiFi.h"

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

/************************* Hlavní program začíná zde ******************** **********/

#include #include #include #include

#zahrnout

#include #include #include

#define OLED_RESET 3

Displej Adafruit_SSD1306 (128, 32, & Wire, OLED_RESET);

// tato konstanta se nezmění:

tlačítko const intPinA = 0; // piny, ke kterým jsou tlačítka připojena, const const buttonPinB = 16; // tento už má stahovací odpor, další dva potřebují jedno const int buttonPinC = 2;

// Proměnné se změní:

int tlačítkoAPushCounter = 0; // čítač počtu stisknutí tlačítka int buttonAState = 0; // aktuální stav tlačítka int lastButtonAState = 0; // předchozí stav tlačítka

// Proměnné se změní:

int tlačítkoBPushCounter = 0; // čítač počtu stisknutí tlačítek int buttonBState = 0; // aktuální stav tlačítka int lastButtonBState = 0; // předchozí stav tlačítka

// Proměnné se změní:

int buttonCPushCounter = 0; // čítač počtu stisknutí tlačítka int buttonCState = 0; // aktuální stav tlačítka int lastButtonCState = 0; // předchozí stav tlačítka

Řetězec displayForecast = "neznámý";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed *srážení = io.feed ("srážení"); // nastavení zdroje srážek

// AdafruitIO_Feed *taskmanager = io.feed ("taskmanager"); // nastavení zdroje 'taskmanager'

neplatné nastavení () {

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

// SSD1306_SWITCHCAPVCC = generovat zobrazovací napětí z 3,3 V interně

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Adresa 0x3C pro 128x32

// Zobrazit počáteční obsah vyrovnávací paměti na obrazovce -

// knihovna to inicializuje úvodní obrazovkou Adafruit. display.display (); zpoždění (2000); // Pauza na 2 sekundy

// Vymažte vyrovnávací paměť.

display.clearDisplay ();

// spusťte sériové připojení

Serial.begin (115200);

// připojení k io.adafruit.com

Serial.print („Připojení k Adafruit IO“); io.connect (); // nastavení obsluhy zpráv pro zdroj 'srážení'. // funkce handleMessage (definovaná níže) // bude volána vždy, když je // přijata zpráva z adafruit io. srážení-> onMessage (handleMessage);

// počkejte na připojení

while (io.status () <AIO_CONNECTED) {Serial.print ("."); zpoždění (500); }

// jsme připojeni

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

}

prázdná smyčka () {

// io.run (); je vyžadován pro všechny skici.

// vždy by měl být přítomen v horní části funkce smyčky //. udržuje klienta připojeného k // io.adafruit.com a zpracovává veškerá příchozí data. io.run ();

// přečtěte si vstupní pin tlačítka:

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

// porovnat buttonState s předchozím stavem

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// pokud se stav změnil, zvyšte čítač if (buttonAState == LOW) {// pokud je aktuální stav LOW, pak tlačítko bylo stisknuto tlačítkoAPushCounter ++; Serial.print ("počet stisknutí tlačítka A:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// pokud je aktuální stav LOW, pak bylo tlačítko stisknuto buttonBPushCounter ++; Serial.print ("počet stisknutí tlačítka B:"); Serial.println (buttonBPushCounter); Serial.println ("Časovač spuštění"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// pokud je aktuální stav LOW, pak bylo tlačítko stisknuto buttonCPushCounter ++; Serial.print ("počet stisknutí tlačítka C:"); Serial.println (buttonCPushCounter); Serial.println ("Časovač zastavení"); timerEnabled = 0; }} if (timerEnabled == 1) {// zvýší časovač pouze tehdy, když byl spuštěn timerVal = (millis () - lastStartTime)/1000; }

// pozice zobrazení 1 - předpověď

// if (buttonAPushCounter % 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (WHITE); // display.setCursor (0, 0); // display.print ("Předpověď:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("druhý řádek"); // display.println ("ukázkový obsah"); // display.display (); // // zpoždění (2000); //}

// pozice zobrazení 1 - úkol 1

if (buttonAPushCounter % 3 == 0) {display.setTextSize (1); display.setTextColor (BÍLÁ); display.clearDisplay (); display.setCursor (0, 0); display.println („Výzkum - Rozhovory“); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }

// pozice zobrazení 2 - úkol 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 (); }

// pozice zobrazení 3 - úkol 3

if (buttonAPushCounter % 3 == 2) {display.clearDisplay (); display.setCursor (0, 0); display.println („DSV - skicování“); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }

// uložení aktuálního stavu jako posledního stavu, // pro příště přes smyčku lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// tato funkce se volá vždy, když se objeví zpráva

// je přijímán od Adafruit IO. bylo připojeno k // zdroji ve funkci setup () výše. void handleMessage (data AdafruitIO_Data *) {

Řetězcová předpověď = data-> toString (); // uložení příchozích údajů o počasí do řetězce

Serial.print ("přijato <-"); Serial.println (předpověď); displayForecast = předpověď; // následující řetězce ukládají různá slova o počasí IFTTT, která jsem zatím objevil String task1 = String ("Úkol 1"); String rain = String („Déšť“); String lightrain = String ("Lehký déšť"); String rainshower = String („Rain Shower“); String AMshowers = String ("AM sprchy"); String rainandsnow = String („Déšť a sníh“); String snow = String ("Sníh"); String snowshower = String ("Snow Shower"); String cloudy = String ("Cloudy"); String většinoucloudy = String ("Skoro zataženo"); String částečně zataženo = Řetězec ("Částečně zataženo"); String clearsky = String ("Vymazat"); String fair = String („Fair“); String Sunny = String ("Sunny");

// Tyto příkazy porovnávají příchozí proměnnou počasí s uloženými podmínkami a podle toho řídí NeoPixels.

// pokud je v předpovědi déšť if (prognóza.equalsIgnoreCase (déšť) || prognóza.equalsIgnoreCase (lightrain) || prognóza.equalsIgnoreCase (dešťová sprcha) || prognóza.equalsIgnoreCase (AMshowers)) {Serial.println ( srážky v předpověď dnes “);

}

// pokud je v předpovědi sníh if (forecast.equalsIgnoreCase (sníh) || prognóza.equalsIgnoreCase (rainandsnow) || prognóza.equalsIgnoreCase (snowshower)) {Serial.println ("srážky v předpovědi dnes");

}

// pokud je v předpovědi slunce if (forecast.equalsIgnoreCase (clearsky) || prognóza.equalsIgnoreCase (spravedlivá) || prognóza.equalsIgnoreCase (slunečno)) {Serial.println ("nějaký druh slunce v předpovědi dnes");

}

// pokud jsou v předpovědi mraky if (prognóza.equalsIgnoreCase (zataženo) || prognóza.equalsIgnoreCase (většinou zataženo) || prognóza.equalsIgnoreCase (částečně zataženo)) {Serial.println ("zatažená obloha v předpovědi dnes");

}

}

Krok 3: Vytvořte kontejner / skořápku

Vytvořte kontejner / skořápku
Vytvořte kontejner / skořápku
Vytvořte kontejner / skořápku
Vytvořte kontejner / skořápku
Vytvořte kontejner / skořápku
Vytvořte kontejner / skořápku
Vytvořte kontejner / skořápku
Vytvořte kontejner / skořápku

U shellu začněte určením velikosti, kterou chcete, aby měl váš rámeček, nebo si můžete stáhnout můj soubor. Jakmile určíte velikost, můžete použít MakerCase k vytvoření rozložení pro vektorový soubor.

Spusťte soubor laserovou řezačkou - mělo by to trvat asi 5 minut. Poté skořápku dejte dohromady.

Nezohledňoval jsem šířku materiálu, kvůli kterému je moje tlačítka obtížně dosažitelná. Stále musím najít způsob, jak je připojit. Jsou také velmi malé, což ztěžuje práci s nimi.

Doporučuje: