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, Srpanj
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 zadacima u odnosu na vrijeme koje ste tjedno odvojili za posao?

Unesite TOYL Task Tracker. Omogućuje vam isključivanje telefona i fokusiranje na posao, a istovremeno vam omogućuje postavljanje vremena koje želite raditi tjedno-recimo 60 sati-i zadataka koje želite obaviti. Kad sjednete na sjednicu, steknete predodžbu o tome koliko vam je vremena ostalo za cjelokupni rad. Tracker ima dva načina rada: Mjerač vremena, gdje ste unaprijed postavili koliko vremena želite tjedno potrošiti po zadatku, i Štoperica, gdje možete jednostavno pokrenuti-zaustaviti mjerač vremena nakon odabira zadatka.

Pribor

Krug

  • Adafruit pero Huzzah
  • Adafruit FeatherWing
  • Muške igle zaglavlja
  • Ženske igle zaglavlja
  • Baterija 500mAh
  • 100K ohmski otpornici x2
  • Izolacijska traka
  • Nasukana žica
  • Skidači žica
  • Ventilator za lemljenje

Kućište

  • Neprozirni akrilni list 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 je vodič koristan za postavljanje hardvera Feather Huzzah. Zatim lemite muške igle zaglavlja na FeatherWing. Lemljenje na ovaj način omogućuje vam spajanje i odvajanje krila od perja od perje po potrebi. Ovo je posebno zgodno kada trebate dodati otpornike u FeatherWing, što je sljedeći korak. Spojite otpornike od 100K ohma sa svakog pina 0 i 2, spojenih na 3V.

Postavite svoj Feather Huzzah hardver

Postavite svoj 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 prilagodba koda Internet stvari Lekcije 5, dopušta li vrijeme, htio 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 gumb A za njihovo kretanje. Osim toga, želio bih kodirati mjerač vremena za brojanje u minutama i zaustaviti se pri prelasku na sljedeći zadatak. Veliko hvala Becky Stern za stvaranje osnovnog koda za mjerač vremena i kretanje kroz zadatke. Ako ste zainteresirani za povezivanje projekta na internet, toplo preporučujem da prođete kroz ovaj skup klasa.

// Uzorci koda klase Interneta instrukcija koje se mogu uputiti // Krug prikazuje internetske podatke // Podaci o vremenu prikupljaju se u feedu // Više neo -piksela vizualizira vremenske uvjete // // izmijenilo Becky Stern 2017 // na temelju 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 kupnjom // proizvoda od Adafruit! // // Napisao Todd Treece za Adafruit Industries // Autorska prava (c) 2016 Adafruit Industries // Licencirano pod licencom MIT -a. // // Sav gornji tekst mora biti uključen u bilo kakvu 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

#uključi

#include #include #include

#define OLED_RESET 3

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

// ova konstanta se neće promijeniti:

const int buttonPinA = 0; // pinovi koje su tipke spojene na const int buttonPinB = 16; // ovaj već ima pullup otpornik, druga dva trebaju jedan const int buttonPinC = 2;

// Promjenjive će se promijeniti:

int buttonAPushCounter = 0; // brojač broja pritisaka tipki int buttonAState = 0; // trenutno stanje gumba int lastButtonAState = 0; // prethodno stanje gumba

// Promjenjive će se promijeniti:

int buttonBPushCounter = 0; // brojač broja pritisaka tipki int buttonBState = 0; // trenutno stanje gumba int lastButtonBState = 0; // prethodno stanje gumba

// Promjenjive će se promijeniti:

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

String displayForecast = "nepoznato";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

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

// 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,3 V

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

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

// knjižnica ovo inicijalizira Adapruit prskanjem. display.display (); odgoda (2000); // Pauza 2 sekunde

// Brisanje međuspremnika.

display.clearDisplay ();

// pokretanje serijske veze

Serial.begin (115200);

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

Serial.print ("Spajanje na Adafruit IO"); io.connect (); // postavljanje rukovatelja porukama za feed 'oborina'. // funkcija handleMessage (definirana u nastavku) // bit će pozvana kad god se poruka // primi od adafruit io. oborine-> onMessage (handleMessage);

// čekati 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 trebao biti na vrhu vaše petlje // funkcije. održava klijenta spojenim na // io.adafruit.com i obrađuje sve dolazne podatke. io.run ();

// pročitajte ulazni pin tipke:

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

// usporedimo buttonState s prijašnjim stanjem

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// ako se stanje promijenilo, povećajte brojač if (buttonAState == LOW) {// ako je trenutno stanje LOW tada gumb pritisnuta je tipka APushCounter ++; Serial.print ("broj tipki A pritisnut:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// ako je trenutno stanje LOW tada je pritisnuta tipka buttonBPushCounter ++; Serial.print ("broj pritiska tipke B:"); Serial.println (buttonBPushCounter); Serial.println ("Tajmer za pokretanje"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// ako je trenutno stanje LOW tada je pritisnuta tipka buttonCPushCounter ++; Serial.print ("broj pritisnutih tipki C:"); Serial.println (buttonCPushCounter); Serial.println ("Mjerač zaustavljanja"); timerEnabled = 0; }} if (timerEnabled == 1) {// povećajte mjerač vremena samo kad 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 redak"); // display.println ("primjer sadržaja"); // display.display (); // // kašnjenje (2000); //}

// prikaz položaja 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 - 2. zadatak

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 (); }

// spremanje trenutnog stanja kao posljednjeg stanja, // sljedeći put kroz petlju lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// ova se funkcija poziva kad god se pojavi poruka

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

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

Serial.print ("primljeno <-"); Serial.println (prognoza); displayForecast = prognoza; // sljedeći nizovi spremaju različite riječi o izvješću o vremenskim izvještajima IFTTT koje sam dosad otkrio String task1 = String ("Task 1"); String rain = String ("Kiša"); String lightrain = String ("Svjetlosna kiša"); String rainshower = String ("Rain Shower"); Niz AMshowers = String ("AM tuševi"); String rainandsnow = String ("Kiša i snijeg"); String snow = String ("Snijeg"); String snowshower = String ("Snježni pljusak"); String cloudy = String ("Cloudy"); Niz uglavnom oblačno = String ("Pretežno oblačno"); Niz djelomično oblačno = String ("Djelomično oblačno"); String clearsky = String ("Clear"); 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 (lightrain) || prognoza.equalsIgnoreCase (kišni pljusak) || prognoza.equalsIgnoreCase (AMshowers)) {Serial.println ("oborine u prognoza za danas ");

}

// ako ima snijega u prognozi if (prognoza.equalsIgnoreCase (snijeg) || prognoza.equalsIgnoreCase (rainandsnow) || prognoza.equalsIgnoreCase (snježni pljusak)) {Serial.println ("oborine u prognozi za danas");

}

// ako ima sunca u prognozi if (prognoza.equalsIgnoreCase (jasan)) || prognoza.equalsIgnoreCase (poštena) || prognoza.equalsIgnoreCase (sunčano)) {Serial.println ("neka vrsta sunca u prognozi za danas");

}

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

}

}

Korak 3: Izradite spremnik / ljusku

Izradite spremnik / ljusku
Izradite spremnik / ljusku
Izradite spremnik / ljusku
Izradite spremnik / ljusku
Izradite spremnik / ljusku
Izradite spremnik / ljusku
Izradite spremnik / ljusku
Izradite 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 upotrijebiti MakerCase za izradu izgleda vektorske datoteke.

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

Nisam uzeo u obzir širinu materijala zbog čega su mi gumbi teško dostupni. Još moram pronaći način da ih pričvrstim. Također su vrlo male što otežava rad s njima.

Preporučeni: