Taula de continguts:

Seguiment de tasques TOYL: 3 passos (amb imatges)
Seguiment de tasques TOYL: 3 passos (amb imatges)

Vídeo: Seguiment de tasques TOYL: 3 passos (amb imatges)

Vídeo: Seguiment de tasques TOYL: 3 passos (amb imatges)
Vídeo: Йога для начинающих дома с Алиной Anandee #3. Здоровое гибкое тело за 40 минут. Продвинутый уровень. 2024, Juliol
Anonim
Image
Image
Seguiment de tasques TOYL
Seguiment de tasques TOYL
Seguiment de tasques TOYL
Seguiment de tasques TOYL

No ho odieu quan teniu previst treballar o, pitjor, si esteu enmig d’una sessió de treball i apareix una notificació al vostre telèfon: un “control ràpid” es converteix en hores més tard. A més, sabeu quant de temps treballeu en determinades tasques en relació amb el temps assignat a la feina per setmana?

Introduïu el rastrejador de tasques TOYL. Us permet apagar el telèfon i concentrar-vos en la feina, alhora que us permet configurar el temps que voleu treballar a la setmana (per exemple, 60 hores) i les tasques que voleu fer. Quan us asseieu a una sessió, teniu una idea del temps que us queda per al vostre treball general. El rastrejador té dos modes: Temporitzador, on heu predeterminat el temps que voleu passar per tasca a la setmana i Cronòmetre, on podeu simplement iniciar-parar el temporitzador després de seleccionar una tasca.

Subministraments

Circuit

  • Ploma d'Adafruit Huzzah
  • Adafruit FeatherWing
  • Clavilles masculines
  • Clavilles femenines
  • Bateria de 500 mAh
  • Resistències de 100K ohmis x2
  • Cinta aïllant
  • Filferro encallat
  • Decapants de filferro
  • Ventilador de soldadura

Carcassa

  • Full acrílic opac de 24 "x18"
  • Cinta de doble cara
  • Accés a un tallador làser
  • Programari vectorial

Pas 1: soldeu el vostre circuit

Soldeu el vostre circuit
Soldeu el vostre circuit
Soldeu el vostre circuit
Soldeu el vostre circuit
Soldeu el vostre circuit
Soldeu el vostre circuit

Soldeu els passadors de capçal femení a la Ploma Huzzah. Aquest tutorial és útil per a la configuració del maquinari de Feather Huzzah. A continuació, soldeu els passadors de capçalera masculins al FeatherWing. Soldar-los d’aquesta manera us permet unir-vos i separar l’ala de plomes de la ploma Huzzah quan sigui necessari. Això és especialment útil quan cal afegir resistències al FeatherWing, que és el següent pas. Connecteu resistències de 100K ohmis de cada pin 0 i 2, connectades a 3V.

Configureu el maquinari Feather Huzzah

Configureu el maquinari de Feather Wing

Pas 2: afegiu el vostre codi

Afegiu el vostre codi
Afegiu el vostre codi
Afegiu el vostre codi
Afegiu el vostre codi

Aquest codi és una adaptació del codi d'Internet de les coses de la lliçó 5, si el temps ho permet, voldria substituir el servei Preceptitaton per un que fa un seguiment de les tasques que s'afegeixen a través de la miniaplicació ToDosit IFTTT. De moment hauríeu d’introduir manualment un conjunt de tasques i utilitzar el botó A per recórrer-les. A més, m'hauria agradat haver codificat el temporitzador per comptar en minuts i aturar-se en canviar a la següent tasca. Un enorme agraïment a Becky Stern per la creació del codi base per al temporitzador i per realitzar tasques. Si esteu interessats en connectar el projecte a Internet, us recomanaria que passeu per aquest conjunt de classes.

// Codi de mostra de classe d’Internet de les coses instructables // Circuit Mostra dades d’Internet // Les dades meteorològiques es recopilen en un feed // NeoPixels múltiples visualitzen les condicions meteorològiques // // Modificat per Becky Stern 2017 // basat en l’exemple de subscripció Adafruit IO

// Adafruit inverteix temps i recursos proporcionant aquest codi de codi obert.

// Suporteu Adafruit i el maquinari de codi obert comprant // productes d'Adafruit. // // Escrit per Todd Treece per a Adafruit Industries // Copyright (c) 2016 Adafruit Industries // Llicenciat sota la llicència MIT. // // Tot el text anterior s’ha d’incloure a qualsevol redistribució.

/ ************************ Configuració d'Adafruit IO ********************** *********

/ visiteu io.adafruit.com si necessiteu crear un compte, // o si necessiteu la vostra clau d'Adafruit IO. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/ ******************************** Configuració WIFI *************** *********************** /

#define WIFI_SSID "WifiName"

#define WIFI_PASS "Contrasenya Wifi"

#include "AdafruitIO_WiFi.h"

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

/ ************************ El programa principal comença aquí ********************* ********** /

#include #include #include #include

#incloure

#include #include #include

#define OLED_RESET 3

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

// aquesta constant no canviarà:

const int buttonPinA = 0; // els pins als quals estan connectats els botons de pulsació const int ButtonPinB = 16; // aquest ja té una resistència pullup, els altres dos necessiten un const int buttonPinC = 2;

// Les variables canviaran:

int buttonAPushCounter = 0; // comptador del nombre de pulsacions de botó int buttonAState = 0; // estat actual del botó int lastButtonAState = 0; // estat anterior del botó

// Les variables canviaran:

int buttonBPushCounter = 0; // comptador del nombre de botons que es pressiona int buttonBState = 0; // estat actual del botó int lastButtonBState = 0; // estat anterior del botó

// Les variables canviaran:

int buttonCPushCounter = 0; // comptador del nombre de botons que es premen int buttonCState = 0; // estat actual del botó int lastButtonCState = 0; // estat anterior del botó

String displayForecast = "desconegut";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed * precipitation = io.feed ("precipitació"); // configureu el feed de "precipitació"

// AdafruitIO_Feed * taskmanager = io.feed ("taskmanager"); // configureu el feed 'taskmanager'

configuració nul·la () {

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

// SSD1306_SWITCHCAPVCC = genera una tensió de visualització des de 3,3V internament

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Adreça 0x3C per a 128x32

// Mostra el contingut inicial del búfer de visualització a la pantalla -

// la biblioteca inicialitza això amb una pantalla de presentació d'Adafruit. display.display (); endarreriment (2000); // Pausa durant 2 segons

// Esborreu la memòria intermèdia.

display.clearDisplay ();

// iniciar la connexió en sèrie

Serial.begin (115200);

// connecteu-vos a io.adafruit.com

Serial.print ("Connexió a Adafruit IO"); io.connect (); // configureu un gestor de missatges per al feed de "precipitacions". // la funció handleMessage (definida a continuació) // es cridarà sempre que // es rebi un missatge de adafruit io. precipitació-> onMessage (handleMessage);

// espera una connexió

while (io.status () <AIO_CONNECTED) {Serial.print ("."); retard (500); }

// estem connectats

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

}

bucle buit () {

// io.run (); és obligatori per a tots els esbossos.

// sempre ha d'estar present a la part superior del vostre bucle // funció. manté el client connectat a // io.adafruit.com i processa les dades entrants. io.run ();

// llegiu el pin d'entrada del botó:

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

// compareu el botóEstat amb el seu estat anterior

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// si l'estat ha canviat, incrementeu el comptador si (buttonAState == BAIX) {// si l'estat actual és BAIX, llavors el botó s'ha premut el botóAPushCounter ++; Serial.print ("nombre de botons A premuts:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// si l'estat actual és BAIX, es va prémer el botó buttonBPushCounter ++; Serial.print ("nombre de pulsacions del botó B:"); Serial.println (buttonBPushCounter); Serial.println ("Temporitzador d'inici"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// si l'estat actual és BAIX, es va prémer el botó buttonCPushCounter ++; Serial.print ("nombre de pulsacions del botó C:"); Serial.println (buttonCPushCounter); Serial.println ("Temporitzador d'aturada"); timerEnabled = 0; }} if (timerEnabled == 1) {// incrementeu el temporitzador només quan s'hagi iniciat timerVal = (millis () - lastStartTime) / 1000; }

// mostra la posició 1 - predicció

// if (buttonAPushCounter% 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (BLANC); // display.setCursor (0, 0); // display.print ("Previsió:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("segona línia"); // display.println ("contingut d'exemple"); // display.display (); // // demora (2000); //}

// mostra la posició 1 - Tasca 1

if (buttonAPushCounter% 3 == 0) {display.setTextSize (1); display.setTextColor (BLANC); display.clearDisplay (); display.setCursor (0, 0); display.println ("Recerca - Entrevistes"); display.println (); display.print ("Temporitzador:"); display.println (timerVal); display.display (); }

// mostra la posició 2 - Tasca 2

if (buttonAPushCounter% 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Making Studio - Code"); display.println (); display.print ("Temporitzador:"); display.println (timerVal); display.display (); }

// mostra la posició 3 - Tasca 3

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

// deseu l'estat actual com a últim estat, // per a la propera vegada a través del bucle lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = botóCState;

}

// aquesta funció es diu sempre que es fa un missatge

// es rep d'Adafruit IO. es va adjuntar a // el feed de la funció setup () anterior. void handleMessage (dades AdafruitIO_Data *) {

Previsió de cadena = data-> toString (); // emmagatzema les dades meteorològiques entrants en una cadena

Serial.print ("rebut <-"); Serial.println (previsió); displayForecast = previsió; // les següents cadenes emmagatzemen les diverses paraules de l'informe meteorològic IFTTT que he descobert fins ara String task1 = String ("Tasca 1"); String rain = String ("Pluja"); String lightrain = String ("Pluja lleugera"); String rainshower = String ("Dutxa de pluja"); String AMshowers = String ("Dutxes AM"); String rainandsnow = String ("Pluja i neu"); String snow = String ("Neu"); String snowshower = String ("Dutxa de neu"); String cloudy = Cadena ("Ennuvolat"); String mostlycloudy = String ("Majoritàriament ennuvolat"); String partialcloudy = Cadena ("Parcialment ennuvolat"); String clearsky = String ("Esborra"); String fair = String ("Just"); String sunny = String ("Assolellat");

// Aquestes declaracions if comparen la variable meteorològica entrant amb les condicions emmagatzemades i controlen els NeoPixels en conseqüència.

// si hi ha pluja a la previsió if (forecast.equalsIgnoreCase (pluja) || forecast.equalsIgnoreCase (lightrain) || forecast.equalsIgnoreCase (rainshower) || forecast.equalsIgnoreCase (AMshowers)) {Serial.println ("precipitació a la previsió d'avui ");

}

// si hi ha neu a la previsió if (forecast.equalsIgnoreCase (neu) || forecast.equalsIgnoreCase (rainandsnow) || forecast.equalsIgnoreCase (nevada)) {Serial.println ("precipitació a la previsió d'avui");

}

// si hi ha sol a la previsió if (forecast.equalsIgnoreCase (clearsky) || forecast.equalsIgnoreCase (just) || forecast.equalsIgnoreCase (assolellat)) {Serial.println ("algun tipus de sol a la previsió d'avui");

}

// si hi ha núvols a la previsió if (forecast.equalsIgnoreCase (ennuvolat) || forecast.equalsIgnoreCase (majoritàriament nuvolós) || forecast.equalsIgnoreCase (partialcloudy)) {Serial.println ("cel ennuvolat a la previsió d'avui");

}

}

Pas 3: creeu el contenidor / shell

Creeu el contenidor / intèrpret d'ordres
Creeu el contenidor / intèrpret d'ordres
Creeu el contenidor / intèrpret d'ordres
Creeu el contenidor / intèrpret d'ordres
Creeu el contenidor / intèrpret d'ordres
Creeu el contenidor / intèrpret d'ordres
Creeu el contenidor / intèrpret d'ordres
Creeu el contenidor / intèrpret d'ordres

Per a l'intèrpret d'ordres, comenceu per determinar quina mida voleu que tingui el vostre marc, o bé podeu descarregar el meu fitxer. Un cop hàgiu determinat la mida, podeu utilitzar MakerCase per crear el disseny del fitxer vectorial.

Executeu el fitxer a través del tallador làser: haurien de trigar uns 5 minuts. A continuació, ajunteu la closca.

No vaig tenir en compte l’amplada del material, cosa que fa que sigui difícil arribar als meus botons. Encara he de trobar la manera d’adjuntar-los. També són molt petites, cosa que els fa difícil treballar.

Recomanat: