Spisu treści:

TOYL Task Tracker: 3 kroki (ze zdjęciami)
TOYL Task Tracker: 3 kroki (ze zdjęciami)

Wideo: TOYL Task Tracker: 3 kroki (ze zdjęciami)

Wideo: TOYL Task Tracker: 3 kroki (ze zdjęciami)
Wideo: Blanka - Boys Like Toys [Official Music Video] 2024, Lipiec
Anonim
Image
Image
ZABAWKA Śledzenie zadań
ZABAWKA Śledzenie zadań
ZABAWKA Śledzenie zadań
ZABAWKA Śledzenie zadań

Czy nie nienawidzisz tego po prostu, gdy planujesz pracę lub gorzej, jesteś w trakcie sesji roboczej, a na Twój telefon przychodzi powiadomienie – „szybkie sprawdzenie” staje się kilka godzin później. Ponadto, czy wiesz, ile czasu pracujesz nad określonymi zadaniami w stosunku do czasu, który przeznaczyłeś na pracę w tygodniu?

Wejdź do TOYL Task Tracker. Umożliwia wyłączenie telefonu i skupienie się na pracy, jednocześnie umożliwiając ustawienie czasu pracy w tygodniu – powiedzmy 60 godzin – oraz zadań, które chcesz wykonać. Kiedy siadasz do sesji, masz wyobrażenie, ile czasu zostało Ci na ogólną pracę. Tracker ma dwa tryby: Timer, w którym ustawiasz, ile czasu chcesz poświęcić na zadanie w tygodniu, oraz Stoper, w którym możesz po prostu uruchomić i zatrzymać stoper po wybraniu zadania.

Kieszonkowe dzieci

Okrążenie

  • Pióro Adafruit Huzzah
  • Pióro AdafruitSkrzydło
  • Męskie szpilki nagłówka
  • Żeńskie szpilki nagłówka
  • Bateria 500 mAh;
  • Rezystory 100 kΩ x2
  • Taśma izolacyjna
  • Linka
  • Narzędzia do ściągania izolacji
  • Wentylator lutowniczy

Obudowa

  • Nieprzezroczysty arkusz akrylowy 24”x18”
  • Taśma dwustronna
  • Dostęp do wycinarki laserowej
  • Oprogramowanie wektorowe

Krok 1: Przylutuj swój obwód

Przylutuj swój obwód
Przylutuj swój obwód
Przylutuj swój obwód
Przylutuj swój obwód
Przylutuj swój obwód
Przylutuj swój obwód

Przylutuj żeńskie szpilki nagłówka do Feather Huzzah. Ten samouczek jest przydatny podczas konfiguracji sprzętu Feather Huzzah. Następnie przylutuj męskie styki nagłówka do FeatherWing. Lutowanie ich w ten sposób pozwala na połączenie i oddzielenie Skrzydła Piór od Piórkowej Huzzah, gdy jest to wymagane. Jest to szczególnie przydatne, gdy musisz dodać rezystory do swojego FeatherWing, co jest następnym krokiem. Podłącz rezystory 100K omów z każdego pinu 0 i 2, podłączone do 3V.

Skonfiguruj swój sprzęt Feather Huzzah

Skonfiguruj sprzęt Skrzydła Piór

Krok 2: Dodaj swój kod

Dodaj swój kod
Dodaj swój kod
Dodaj swój kod
Dodaj swój kod

Ten kod jest adaptacją kodu Lekcji 5 Internet of Things, jeśli czas pozwoli, chciałbym zastąpić usługę Preceptitaton taką, która śledzi zadania dodawane za pomocą apletu ToDosit IFTTT. W tej chwili musiałbyś ręcznie wprowadzić zestaw zadań i użyć przycisku A, aby je przełączać. Ponadto chciałbym mieć zakodowany timer, który odlicza w minutach i zatrzymuje się przy przejściu do następnego zadania. Ogromne podziękowania dla Becky Stern za stworzenie podstawowego kodu dla timera i przechodzenie przez zadania. Jeśli jesteś zainteresowany podłączeniem projektu do internetu, gorąco polecam przejrzenie tego zestawu zajęć.

// Przykładowy kod klasy Instructables Internet of Things // Circuit wyświetla dane internetowe // Dane pogodowe są gromadzone w kanale // Wiele NeoPixels wizualizuje warunki pogodowe // // Zmodyfikowane przez Becky Stern 2017 // na podstawie przykładu subskrypcji Adafruit IO

// Adafruit inwestuje czas i zasoby, dostarczając ten otwarty kod źródłowy.

// Proszę wesprzyj Adafruit i sprzęt open source kupując // produkty od Adafruit! // // Autor Todd Treece dla Adafruit Industries // Copyright (c) 2016 Adafruit Industries // Licencjonowane na licencji MIT. // // Cały powyższy tekst musi być uwzględniony w każdej redystrybucji.

/************************* Konfiguracja IO Adafruit ********************** **********

/ wejdź na io.adafruit.com jeśli potrzebujesz założyć konto, // lub jeśli potrzebujesz klucza Adafruit IO. #define IO_USERNAME "TwojaNazwaUżytkownikaTutaj" #define IO_KEY "TwójIOKluczTutaj"

/****************************** Konfiguracja WIFI *************** **********************/

#define WIFI_SSID "Nazwa Wifi"

#define WIFI_PASS "WifiPassword"

#include "AdafruitIO_WiFi.h"

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

/************************* Główny program zaczyna się tutaj ********************* **********/

#include #include #include #include

#włączać

#include #include #include

#define OLED_RESET 3

Wyświetlacz Adafruit_SSD1306 (128, 32, &Wire, OLED_RESET);

// ta stała się nie zmieni:

const int przyciskPinA = 0; // piny, do których są dołączone przyciski const int buttonPinB = 16; // ten ma już rezystor pullup, pozostałe dwa potrzebują jednego const int buttonPinC = 2;

// Zmienne się zmienią:

int przyciskAPushCounter = 0; // licznik liczby naciśnięć przycisków int buttonAState = 0; // aktualny stan przycisku int lastButtonAState = 0; // poprzedni stan przycisku

// Zmienne się zmienią:

int przyciskBPushCounter = 0; // licznik liczby naciśnięć przycisków int buttonBState = 0; // aktualny stan przycisku int lastButtonBState = 0; // poprzedni stan przycisku

// Zmienne się zmienią:

int przyciskCPushCounter = 0; // licznik liczby naciśnięć przycisków int buttonCstate = 0; // aktualny stan przycisku int lastButtonCState = 0; // poprzedni stan przycisku

String displayForecast = "nieznane";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerWłączony = 0;

AdafruitIO_Feed *opad = io.feed("opad"); // skonfiguruj kanał „opady”

//AdafruitIO_Feed *manager zadań = io.feed("manager zadań"); // skonfiguruj kanał „menedżera zadań”

pusta konfiguracja () {

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

// SSD1306_SWITCHCAPVCC = generuj napięcie wyświetlacza z 3,3 V wewnętrznie

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Adres 0x3C dla 128x32

// Pokaż na ekranie zawartość początkowego bufora wyświetlania --

// biblioteka inicjuje to za pomocą ekranu powitalnego Adafruit. display.display(); opóźnienie (2000); // Pauza na 2 sekundy

// Wyczyść bufor.

display.clearDisplay();

// uruchom połączenie szeregowe

Serial.początek(115200);

// połącz się z io.adafruit.com

Serial.print("Podłączanie do Adafruit IO"); io.connect(); // skonfiguruj moduł obsługi wiadomości dla kanału „precipitation”. // funkcja handleMessage (zdefiniowana poniżej) // będzie wywoływana za każdym razem, // odebrana wiadomość z adafruit io. opady->onMessage(handleMessage);

// czekaj na połączenie

while(io.status() < AIO_CONNECTED) { Serial.print("."); opóźnienie (500); }

// jesteśmy połączeni

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

}

pusta pętla () {

// io.run(); jest wymagany dla wszystkich szkiców.

// powinien zawsze znajdować się na górze // funkcji pętli. utrzymuje klienta połączonego z // io.adafruit.com i przetwarza wszelkie przychodzące dane. io.uruchom();

// odczytaj pin wejściowy przycisku:

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

// porównaj stan przycisku z jego poprzednim stanem

if (buttonAState != lastButtonAState || buttonBState != lastButtonBState || buttonCState != lastButtonCState) { // jeśli stan się zmienił, zwiększ licznik if (buttonAState == LOW) { // jeśli aktualny stan jest LOW to przycisk został naciśnięty przyciskAPushCounter++; Serial.print("ilość naciśnięć przycisku A: "); Serial.println(przyciskAPushCounter); } if (buttonBState == LOW) { // jeśli obecny stan jest LOW to przycisk został naciśnięty buttonBPushCounter++; Serial.print("ilość naciśnięć przycisku B: "); Serial.println(buttonBPushCounter); Serial.println("Zegar startowy"); timerWłączony = 1; lastStartTime = millis(); } if (buttonCState == LOW) { // jeśli obecny stan jest LOW to przycisk został naciśnięty buttonCPushCounter++; Serial.print("ilość naciśnięć przycisku C: "); Serial.println(buttonCPushCounter); Serial.println("Zatrzymywanie zegara"); timerWłączony = 0; } } if (timerEnabled == 1){ // inkrementuj licznik tylko wtedy, gdy został uruchomiony timerVal = (millis() - lastStartTime)/1000; }

//wyświetlanie pozycji 1 - prognoza

// if (buttonAPushCounter % 3 == 0) { // display.clearDisplay(); // wyświetl.setTextSize(1); // wyświetl.setTextColor(BIAŁY); // wyświetl.setCursor(0, 0); // display.print("Prognoza: "); // display.println(displayForecast); // wyświetl.setCursor(0, 16); // display.println("druga linia"); // display.println("przykładowa zawartość"); // wyświetl.wyświetlacz(); // //opóźnienie(2000); // }

//wyświetlanie pozycji 1 - Zadanie 1

if (buttonAPushCounter % 3 == 0) { display.setTextSize(1); display.setTextColor (BIAŁY); display.clearDisplay(); display.setCursor(0, 0); display.println("Badania - wywiady"); display.println(); display.print("Zegar: "); display.println(WartCzasu); display.display(); }

//wyświetlanie pozycji 2 - Zadanie 2

if (buttonAPushCounter % 3 == 1) { display.clearDisplay(); display.setCursor(0, 0); display.println("Tworzenie studia - kod"); display.println(); display.print("Zegar: "); display.println(WartCzasu); display.display(); }

//wyświetlacz pozycja 3 - Zadanie 3

if (buttonAPushCounter % 3 == 2) { display.clearDisplay(); display.setCursor(0, 0); display.println("DSV - szkicowanie"); display.println(); display.print("Zegar: "); display.println(WartCzasu); display.display(); }

//zapisz aktualny stan jako ostatni, //do następnego razu przez pętlę lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// ta funkcja jest wywoływana przy każdej wiadomości

// otrzymany od Adafruit IO. został dołączony // do kanału w funkcji setup() powyżej. void handleMessage(AdafruitIO_Data *dane) {

Prognoza ciągu = dane->toString(); // przechowuj przychodzące dane pogodowe w ciągu

Serial.print("otrzymano <-"); Serial.println(prognoza); displayForecast = prognoza; //następujące ciągi przechowują różne słowa z raportu pogodowego IFTTT, które do tej pory odkryłem String task1 = String("Zadanie 1"); String deszcz = String("Deszcz"); String lightrain = String("Lekki deszcz"); String deszcz = String ("Deszcz"); String AMshowers = String („Prysznice AM”); String rainandsnow = String("Deszcz i śnieg"); Śnieg sznurkowy = String("Śnieg"); String śnieżyca = String("Deszcz śnieżny"); String pochmurno = String("Pochmurno"); String głównie zachmurzenie = String("Większe zachmurzenie"); String partlycloudy = String("Częściowe zachmurzenie"); String clearsky = String("Wyczyść"); String fair = String("Fair"); String słoneczny = String("Słoneczny");

// Te instrukcje if porównują przychodzącą zmienną pogodową z przechowywanymi warunkami i odpowiednio kontrolują NeoPixels.

// jeśli w prognozie będzie deszcz if (forecast.equalsIgnoreCase(rain) || forecast.equalsIgnoreCase(lightrain) || forecast.equalsIgnoreCase(rainshower) || forecast.equalsIgnoreCase(AMshowers)){ Serial.println("opad w prognoza na dziś");

}

// jeśli w prognozie jest śnieg if (forecast.equalsIgnoreCase(snow) || forecast.equalsIgnoreCase(rainandsnow) || forecast.equalsIgnoreCase(opad śniegu)){ Serial.println("opad w dzisiejszej prognozie");

}

// jeśli w prognozie jest słońce if (forecast.equalsIgnoreCase(clearsky) || forecast.equalsIgnoreCase(fair) || forecast.equalsIgnoreCase(sunny)){ Serial.println("jakiś rodzaj słońca w dzisiejszej prognozie");

}

// jeśli w prognozie są chmury if (forecast.equalsIgnoreCase(cloudy) || forecast.equalsIgnoreCase(mostlycloudy) || forecast.equalsIgnoreCase(partlycloudy)){ Serial.println("pochmurne niebo w dzisiejszej prognozie");

}

}

Krok 3: Utwórz kontener / powłokę

Utwórz kontener / powłokę
Utwórz kontener / powłokę
Utwórz kontener / powłokę
Utwórz kontener / powłokę
Utwórz kontener / powłokę
Utwórz kontener / powłokę
Utwórz kontener / powłokę
Utwórz kontener / powłokę

W przypadku powłoki zacznij od określenia rozmiaru ramki, lub możesz pobrać mój plik. Po ustaleniu rozmiaru możesz użyć MakerCase, aby utworzyć układ pliku wektorowego.

Przepuść plik przez wycinarkę laserową - powinno to zająć około 5 minut. Następnie złóż muszlę razem.

Nie brałem pod uwagę szerokości materiału, przez co trudno jest dosięgnąć moich guzików. Nadal muszę znaleźć sposób, aby je dołączyć. Są też bardzo małe, co utrudnia pracę z nimi.

Zalecana: