Съдържание:

TOYL Task Tracker: 3 стъпки (със снимки)
TOYL Task Tracker: 3 стъпки (със снимки)

Видео: TOYL Task Tracker: 3 стъпки (със снимки)

Видео: TOYL Task Tracker: 3 стъпки (със снимки)
Видео: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Юли
Anonim
Image
Image
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker
TOYL Task Tracker

Не мразите ли просто, когато планирате да работите или по-лошо, в средата на работна сесия и на телефона ви идва известие-„бърза проверка“става часове по-късно. Освен това знаете ли колко време работите по определени задачи във връзка с времето, което сте отделили за работа седмично?

Въведете TOYL Task Tracker. Той ви позволява да изключите телефона си и да се съсредоточите върху работата, като същевременно ви позволява да настроите времето, което искате да работите седмично-да речем 60 часа-и задачите, които искате да свършите. Когато седнете за сесия, получавате представа колко време ви е останало за цялостната ви работа. Проследяващият има два режима: Таймер, където сте задали предварително колко време бихте искали да отделите за задача на седмица, и Хронометър, където можете просто да стартирате-спрете таймера, след като изберете задача.

Консумативи

Верига

  • Адафрутово перо Huzzah
  • Adafruit FeatherWing
  • Мъжки щифтове за заглавки
  • Женски щифтове за заглавки
  • 500mAh батерия
  • 100K ома резистори x2
  • Изолационна лента
  • Многожилен проводник
  • Машини за сваляне на тел
  • Вентилатор за запояване

Корпус

  • Непрозрачен акрилен лист 24 "x18"
  • Двустранна касета
  • Достъп до лазерен нож
  • Вектор софтуер

Стъпка 1: Запоявайте веригата си

Запоявайте веригата си
Запоявайте веригата си
Запоявайте веригата си
Запоявайте веригата си
Запоявайте веригата си
Запоявайте веригата си

Запоявайте щифтовете за женски заглавки към перото Huzzah. Този урок е полезен за хардуерна настройка на Feather Huzzah. След това запоявайте щифтовете на мъжкия хедър към FeatherWing. Запояването им по този начин ви позволява да се присъедините и отделите перата от крилото на перата, когато е необходимо. Това е особено удобно, когато трябва да добавите резистори към вашето FeatherWing, което е следващата стъпка. Свържете 100K ома резистори от всеки пин 0 и 2, свързани към 3V.

Настройте хардуера на Feather Huzzah

Настройте хардуера на Feather Wing

Стъпка 2: Добавете вашия код

Добавете вашия код
Добавете вашия код
Добавете вашия код
Добавете вашия код

Този код е адаптация на кода на Интернет на нещата от Урок 5, позволяващ времето, бих искал да заменя услугата Preceptitaton с такава, която проследява задачите, добавени чрез аплета ToDosit IFTTT. В момента ще трябва да въведете ръчно набор от задачи и да използвате бутон А, за да ги преминете през цикъл. Освен това бих искал да кодирам таймера за броене в минути и спиране при преминаване към следващата задача. Огромно благодаря на Беки Стърн за създаването на основен код за таймера и преминаването през задачи. Ако се интересувате от свързването на проекта с интернет, горещо бих препоръчал да преминете през този набор от класове.

// Инструктируем Internet of Things Примерен код на класа // Верига показва интернет данни // Данни за времето се събират в емисия // Множество NeoPixels визуализират метеорологичните условия // // Променено от Беки Стърн 2017 // въз основа на Примера за абонамент за IO Adafruit

// Adafruit инвестира време и ресурси, предоставяйки този код с отворен код.

// Моля, подкрепете Adafruit и хардуер с отворен код, като закупите // продукти от Adafruit! // // Написано от Todd Treece за Adafruit Industries // Авторско право (c) 2016 Adafruit Industries // Лицензирано под лиценза на MIT. // // Целият текст по -горе трябва да бъде включен във всяко преразпределение.

/************************ Adafruit IO конфигурация ********************** *********

/ посетете io.adafruit.com, ако трябва да създадете акаунт, // или ако имате нужда от вашия IO ключ Adafruit. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/******************************* WIFI конфигурация **************** **********************/

#define WIFI_SSID "WifiName"

#define WIFI_PASS "WifiPassword"

#include "AdafruitIO_WiFi.h"

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

/************************ Основната програма започва тук ********************* **********/

#включи #включи #включи #включи

#включва

#включи #включи #включи

#дефинирайте OLED_RESET 3

Adafruit_SSD1306 дисплей (128, 32, & Wire, OLED_RESET);

// тази константа няма да се промени:

const int buttonPinA = 0; // щифтовете, които бутоните са прикрепени към const int buttonPinB = 16; // този вече има издърпващ резистор, другите два се нуждаят от един const int buttonPinC = 2;

// Променливите ще се променят:

бутон intAPushCounter = 0; // брояч за броя натискания на бутони int buttonAState = 0; // текущо състояние на бутона int lastButtonAState = 0; // предишно състояние на бутона

// Променливите ще се променят:

бутон intBPushCounter = 0; // брояч за броя натискания на бутони int buttonBState = 0; // текущото състояние на бутона int lastButtonBState = 0; // предишно състояние на бутона

// Променливите ще се променят:

int бутон CPushCounter = 0; // брояч за броя натискания на бутони int buttonCState = 0; // текущото състояние на бутона int lastButtonCState = 0; // предишно състояние на бутона

Низ displayForecast = "неизвестен";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed *валежи = io.feed ("валежи"); // настройте емисията „утаяване“

// AdafruitIO_Feed *taskmanager = io.feed ("taskmanager"); // настройваме емисията „taskmanager“

void setup () {

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

// SSD1306_SWITCHCAPVCC = генериране на напрежение на дисплея от 3.3V вътрешно

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Адрес 0x3C за 128x32

// Показва първоначалното съдържание на буфера за показване на екрана -

// библиотеката инициализира това с начален екран Adafruit. display.display (); забавяне (2000); // Пауза за 2 секунди

// Изчистване на буфера.

display.clearDisplay ();

// стартиране на серийна връзка

Serial.begin (115200);

// свързване към io.adafruit.com

Serial.print ("Свързване към Adafruit IO"); io.connect (); // настройваме манипулатор на съобщения за емисията „утаяване“. // функцията handleMessage (дефинирана по -долу) // ще се извиква винаги, когато се получи съобщение // от adafruit io. валежи-> onMessage (handleMessage);

// изчакайте връзка

while (io.status () <AIO_CONNECTED) {Serial.print ("."); забавяне (500); }

// ние сме свързани

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

}

void loop () {

// io.run (); е необходимо за всички скици.

// винаги трябва да присъства в горната част на вашата // функция. той поддържа клиента свързан към // io.adafruit.com и обработва всички входящи данни. io.run ();

// прочетете входния щифт на бутона:

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

// сравнява buttonState с предишното му състояние

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// ако състоянието се е променило, увеличете брояча if (buttonAState == LOW) {// ако текущото състояние е LOW тогава бутонът беше натиснат бутон APushCounter ++; Serial.print ("номер на бутон А натиска:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// ако текущото състояние е LOW тогава бутонът е натиснат buttonBPushCounter ++; Serial.print ("брой бутони В натиска:"); Serial.println (buttonBPushCounter); Serial.println ("Таймер за стартиране"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// ако текущото състояние е LOW тогава бутонът е натиснат buttonCPushCounter ++; Serial.print ("брой натискания на бутон C:"); Serial.println (buttonCPushCounter); Serial.println ("Таймер за спиране"); timerEnabled = 0; }} if (timerEnabled == 1) {// увеличава таймера само когато е стартиран timerVal = (millis () - lastStartTime)/1000; }

// показване на позиция 1 - прогноза

// if (buttonAPushCounter % 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (БЯЛ); // display.setCursor (0, 0); // display.print ("Прогноза:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("втори ред"); // display.println ("примерно съдържание"); // display.display (); // // забавяне (2000); //}

// показва позиция 1 - Задача 1

if (buttonAPushCounter % 3 == 0) {display.setTextSize (1); display.setTextColor (БЯЛ); display.clearDisplay (); display.setCursor (0, 0); display.println ("Изследване - интервюта"); display.println (); display.print ("Таймер:"); display.println (timerVal); display.display (); }

// показва позиция 2 - Задача 2

if (buttonAPushCounter % 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Създаване на студио - код"); display.println (); display.print ("Таймер:"); display.println (timerVal); display.display (); }

// показва позиция 3 - Задача 3

if (buttonAPushCounter % 3 == 2) {display.clearDisplay (); display.setCursor (0, 0); display.println ("DSV - Скициране"); display.println (); display.print ("Таймер:"); display.println (timerVal); display.display (); }

// запазваме текущото състояние като последно състояние, // за следващия път през цикъла lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// тази функция се извиква при всяко съобщение

// се получава от Adafruit IO. той беше прикрепен към // емисията във функцията setup () по -горе. void handleMessage (AdafruitIO_Data *данни) {

Прогноза за низ = данни-> toString (); // съхранява входящите метеорологични данни в низ

Serial.print ("получено <-"); Serial.println (прогноза); displayForecast = прогноза; // следните низове съхраняват разнообразните думи за метеорологичния отчет на IFTTT, които открих досега String task1 = String ("Task 1"); String rain = String ("Rain"); String lightrain = String ("Лек дъжд"); String rainshower = String ("Rain Shower"); String AMshowers = String ("AM Showers"); String rainandsnow = String ("Дъжд и сняг"); String snow = String ("Snow"); String snowshower = String ("Снежен душ"); Низ облачно = String ("Облачно"); Низ предимно облачен = Низ ("Предимно облачно"); Низ частично облачен = Низ ("частично облачен"); String clearsky = String ("Clear"); String fair = String ("Fair"); String sunny = String ("Sunny");

// Тези оператори if сравняват входящата метеорологична променлива със съхранените условия и съответно контролират NeoPixels.

// ако има дъжд в прогнозата if (weather.equalsIgnoreCase (дъжд) || прогноза.equalsIgnoreCase (светъл дъжд) || прогноза.equalsIgnoreCase (дъждовен душ) || прогноза.equalsIgnoreCase (AMshowers)) {Serial.println ("валежи в прогноза днес ");

}

// ако има сняг в прогнозата if (прогноза.equalsIgnoreCase (сняг) || прогноза.equalsIgnoreCase (rainandsnow) || прогноза.equalsIgnoreCase (snowshower)) {Serial.println ("валежи в прогнозата днес");

}

// ако има слънце в прогнозата if (прогноза.equalsIgnoreCase (clearsky) || прогноза.equalsIgnoreCase (честно) || прогноза.equalsIgnoreCase (слънчево)) {Serial.println ("някакъв вид слънце в прогнозата днес");

}

// ако има облаци в прогнозата if (прогноза.equalsIgnoreCase (облачно) || прогноза.equalsIgnoreCase (предимно облачно) || прогноза.equalsIgnoreCase (частично облачно)) {Serial.println ("облачно небе в прогнозата днес");

}

}

Стъпка 3: Създайте контейнер / черупка

Създайте контейнер / черупка
Създайте контейнер / черупка
Създайте контейнер / черупка
Създайте контейнер / черупка
Създайте контейнер / черупка
Създайте контейнер / черупка
Създайте контейнер / черупка
Създайте контейнер / черупка

За черупката започнете, като определите какъв размер бихте искали да бъде вашата рамка, или можете да изтеглите моя файл. След като определите размера, можете да използвате MakerCase, за да създадете оформлението за векторния файл.

Прокарайте файла през лазерния нож - това трябва да отнеме около 5 минути. След това поставете черупката заедно.

Не взех предвид ширината на материала, което прави бутоните ми труднодостъпни. Все още трябва да намеря начин да ги прикрепя. Те също са много малки, което затруднява работата с тях.

Препоръчано: