Sadržaj:

TOYL Track Task Tracker: 3 koraka (sa slikama)
TOYL Track Task Tracker: 3 koraka (sa slikama)

Video: TOYL Track Task Tracker: 3 koraka (sa slikama)

Video: TOYL Track Task Tracker: 3 koraka (sa slikama)
Video: КОНЕЦ МУЧЕНИЯМ. Трава больше не проблема! 2024, Novembar
Anonim
Image
Image
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker

Ne mrzite li samo kad planirate raditi ili još gore, usred ste radnog vremena i na telefon vam stiže obavijest-"brza provjera" postaje nekoliko sati kasnije. Također, znate li koliko vremena radite na određenim poslovima u odnosu na vrijeme koje ste izdvojili za rad sedmično?

Unesite TOYL Task Tracker. Omogućava vam da isključite telefon i fokusirate se na posao, dok vam istovremeno omogućava postavljanje vremena koje želite raditi tjedno-recimo 60 sati-i zadataka koje želite obaviti. Kad sjednete za sesiju, imate ideju o tome koliko vam je vremena ostalo za cjelokupni rad. Tracker ima dva načina rada: Tajmer, gdje ste unaprijed odredili koliko vremena želite potrošiti po zadatku sedmično, i Štoperica, gdje možete jednostavno pokrenuti-zaustaviti mjerač vremena nakon odabira zadatka.

Supplies

Krug

  • Adafruit Feather Huzzah
  • Adafruit FeatherWing
  • Muški pinovi zaglavlja
  • Ženske igle zaglavlja
  • Baterija 500mAh
  • 100K ohmski otpornici x2
  • Izolacijska traka
  • Nasukana žica
  • Strojevi za skidanje žice
  • Solder Fan

Kućište

  • Neprozirni akrilni lim 24”x18”
  • Dvostrana traka
  • Pristup laserskom rezaču
  • Vektorski softver

Korak 1: Lemite svoj krug

Lemite svoj krug
Lemite svoj krug
Lemite svoj krug
Lemite svoj krug
Lemite svoj krug
Lemite svoj krug

Lemite igle ženskog zaglavlja na pero Huzzah. Ovaj vodič je koristan za postavljanje hardvera Feather Huzzah. Zatim lemite muške iglice zaglavlja na FeatherWing. Lemljenje na ovaj način omogućuje vam da spojite i odvojite krilo od perja od perje po potrebi. Ovo je posebno zgodno kada trebate dodati otpornike u FeatherWing, što je sljedeći korak. Spojite 100K ohmske otpornike sa svakog pina 0 i 2, spojeni na 3V.

Postavite svoj Feather Huzzah hardver

Postavite hardver za Feather Wing

Korak 2: Dodajte svoj kôd

Dodajte svoj kôd
Dodajte svoj kôd
Dodajte svoj kôd
Dodajte svoj kôd

Ovaj kôd je adaptacija koda Interneta lekcija 5, ako vrijeme dopušta, želio bih zamijeniti uslugu Preceptitaton s onom koja prati zadatke koji se dodaju putem ToDosit IFTTT apleta. Trenutno biste morali ručno unijeti skup zadataka i koristiti tipku A za njihovo kretanje. Osim toga, volio bih da sam kodirao tajmer za brojanje u minutama i zaustavljanje pri prelasku na sljedeći zadatak. Veliko hvala Becky Stern za stvaranje osnovnog koda za tajmer i kretanje kroz zadatke. Ako ste zainteresirani za povezivanje projekta na internet, toplo preporučujem da prođete kroz ovaj skup časova.

// Uzorak koda klase Internet stvari koje se mogu uputiti // Krug prikazuje internetske podatke // Podaci o vremenu prikupljaju se u feedu // Više neo -piksela vizualizira vremenske prilike // // izmijenilo Becky Stern 2017 // na osnovu primjera pretplate na Adafruit IO

// Adafruit ulaže vrijeme i resurse pružajući ovaj otvoreni kod.

// Molimo vas da podržite Adafruit i hardver otvorenog koda kupovinom // proizvoda od Adafruit! // // Napisao Todd Treece za Adafruit Industries // Autorska prava (c) 2016 Adafruit Industries // Licencirano pod MIT licencom. // // Sav gornji tekst mora biti uključen u bilo koju preraspodjelu.

/************************ Adafruit IO konfiguracija ********************** *********

/ posjetite io.adafruit.com ako trebate stvoriti račun, // ili ako vam je potreban vaš Adafruit IO ključ. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/******************************* WIFI konfiguracija **************** **********************/

#define WIFI_SSID "WifiName"

#define WIFI_PASS "WifiPassword"

#include "AdafruitIO_WiFi.h"

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

/************************ Glavni program počinje ovdje ********************* **********/

#include #include #include #include

#include

#include #include #include

#define OLED_RESET 3

Adafruit_SSD1306 ekran (128, 32 i žica, OLED_RESET);

// ova konstanta se neće promijeniti:

const int buttonPinA = 0; // pinovi na koje su tasteri pričvršćeni const int buttonPinB = 16; // ovaj već ima pullup otpornik, druga dva trebaju jedan const int buttonPinC = 2;

// Promjenljive će se promijeniti:

int buttonAPushCounter = 0; // brojač broja pritisaka tastera int buttonAState = 0; // trenutno stanje dugmeta int lastButtonAState = 0; // prethodno stanje dugmeta

// Promjenljive će se promijeniti:

int buttonBPushCounter = 0; // brojač broja pritisaka tastera int buttonBState = 0; // trenutno stanje dugmeta int lastButtonBState = 0; // prethodno stanje dugmeta

// Promjenljive će se promijeniti:

int buttonCPushCounter = 0; // brojač broja pritisaka tastera int buttonCState = 0; // trenutno stanje dugmeta int lastButtonCState = 0; // prethodno stanje dugmeta

String displayForecast = "nepoznato";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed *padavine = io.feed ("padavine"); // postavljanje feeda 'padavina'

// AdafruitIO_Feed *taskmanager = io.feed ("taskmanager"); // postavljanje feeda 'taskmanager'

void setup () {

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

// SSD1306_SWITCHCAPVCC = interno generirati napon prikaza od 3.3V

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

// Prikaz početnog sadržaja međuspremnika za prikaz na ekranu -

// biblioteka inicijalizira ovo s Adafruit prskanjem. display.display (); kašnjenje (2000); // Pauza 2 sekunde

// Brisanje međuspremnika.

display.clearDisplay ();

// započinjemo serijsku vezu

Serial.begin (115200);

// povežite se na io.adafruit.com

Serial.print ("Povezivanje sa Adafruit IO"); io.connect (); // postavljanje rukovatelja porukama za 'padavine'. // funkcija handleMessage (definirana dolje) // bit će pozvana kad god se poruka // primi od adafruit io. padavine-> onMessage (handleMessage);

// čekamo vezu

while (io.status () <AIO_CONNECTED) {Serial.print ("."); kašnjenje (500); }

// povezani smo

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

}

void loop () {{100} {101}

// io.run (); je potrebno za sve skice.

// uvijek bi trebalo biti prisutno na vrhu vaše petlje // funkcije. održava klijenta povezanim sa // io.adafruit.com i obrađuje sve dolazne podatke. io.run ();

// čita ulazni pin tastera:

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

// uporedimo buttonState sa prethodnim stanjem

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// ako se stanje promijenilo, povećajte brojač if (buttonAState == LOW) {// ako je trenutno stanje LOW tada dugme pritisnuto dugmeAPushCounter ++; Serial.print ("broj A tastera pritiska:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// ako je trenutno stanje LOW tada je dugme pritisnuto buttonBPushCounter ++; Serial.print ("broj B tastera pritiska:"); Serial.println (buttonBPushCounter); Serial.println ("Tajmer za pokretanje"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// ako je trenutno stanje LOW tada je dugme pritisnuto buttonCPushCounter ++; Serial.print ("broj C tastera pritisnut:"); Serial.println (buttonCPushCounter); Serial.println ("Tajmer za zaustavljanje"); timerEnabled = 0; }} if (timerEnabled == 1) {// povećava tajmer samo kada je pokrenut timerVal = (millis () - lastStartTime)/1000; }

// prikaz pozicije 1 - prognoza

// if (buttonAPushCounter % 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (BIJELO); // display.setCursor (0, 0); // display.print ("Predviđanje:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("drugi red"); // display.println ("primjer sadržaja"); // display.display (); // // kašnjenje (2000); //}

// prikaz pozicije 1 - Zadatak 1

if (buttonAPushCounter % 3 == 0) {display.setTextSize (1); display.setTextColor (BIJELO); display.clearDisplay (); display.setCursor (0, 0); display.println ("Istraživanje - intervjui"); display.println (); display.print ("Tajmer:"); display.println (timerVal); display.display (); }

// prikaz položaja 2 - Zadatak 2

if (buttonAPushCounter % 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Izrada studija - kôd"); display.println (); display.print ("Tajmer:"); display.println (timerVal); display.display (); }

// prikaz položaja 3 - Zadatak 3

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

// sprema trenutno stanje kao posljednje stanje, // sljedeći put kroz petlju lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// ova funkcija se poziva kad god se pojavi poruka

// je primljeno od Adafruit IO. bio je priključen na // feed u gornjoj funkciji setup (). void handleMessage (AdafruitIO_Data *podaci) {

Predviđanje niza = data-> toString (); // sprema podatke o dolaznom vremenu u niz

Serial.print ("primljeno <-"); Serial.println (prognoza); displayForecast = prognoza; // sljedeći nizovi pohranjuju različite riječi izvještaja o vremenu IFTTT koje sam do sada otkrio String task1 = String ("Task 1"); String rain = String ("Kiša"); String lightrain = String ("Light Rain"); String rainshower = String ("Rain Shower"); Niz AMshowers = String ("AM tuševi"); String rainandsnow = String ("Kiša i sneg"); String snow = String ("Snow"); String snowshower = String ("Snježni pljusak"); String cloudy = String ("Cloudy"); Niz uglavnom oblačno = String ("Pretežno oblačno"); String nisko oblačno = String ("Partly Cloudy"); String clearsky = String ("Obriši"); String fair = String ("Fair"); String sunny = String ("Sunčano");

// Ove if naredbe uspoređuju dolaznu vremensku varijablu sa pohranjenim uvjetima i u skladu s tim kontroliraju NeoPixele.

// ako je u prognozi kiše if (prognoza.equalsIgnoreCase (kiša) || prognoza.equalsIgnoreCase (svjetlosna kiša) || prognoza.equalsIgnoreCase (kišni pljusak) || prognoza.equalsIgnoreCase (AMshowers)) {Serial.println ("padavine u prognoza za danas ");

}

// ako ima snijega u prognozi if (weather.equalsIgnoreCase (snow) || weather.equalsIgnoreCase (rainandsnow) || weather.equalsIgnoreCase (snowshower)) {Serial.println ("padavine u prognozi za danas");

}

// ako ima sunca u prognozi if (weather.equalsIgnoreCase (clearsky) || weather.equalsIgnoreCase (fair) || weather.equalsIgnoreCase (sunny)) {Serial.println ("neka vrsta sunca u prognozi za danas");

}

// ako ima oblaka u prognozi if (weather.equalsIgnoreCase (oblačno) || weather.equalsIgnoreCase (pretežno oblačno) || prognoza.equalsIgnoreCase (djelimično oblačno)) {Serial.println ("oblačno nebo u prognozi za danas");

}

}

Korak 3: Kreirajte spremnik / ljusku

Kreirajte spremnik / ljusku
Kreirajte spremnik / ljusku
Kreirajte spremnik / ljusku
Kreirajte spremnik / ljusku
Kreirajte spremnik / ljusku
Kreirajte spremnik / ljusku
Kreirajte spremnik / ljusku
Kreirajte spremnik / ljusku

Što se ljuske tiče, počnite tako što ćete odrediti veličinu vašeg okvira ili biste mogli preuzeti moju datoteku. Nakon što odredite veličinu, možete koristiti MakerCase za kreiranje izgleda za vektorsku datoteku.

Pokrenite datoteku kroz laserski rezač - to bi trebalo potrajati oko 5 minuta. Nakon toga spojite ljusku.

Nisam uzeo u obzir širinu materijala što otežava pristup mojim gumbima. Još uvijek moram pronaći način da ih pričvrstim. Također su vrlo mali što otežava rad s njima.

Preporučuje se: