İçindekiler:

TOYL Task Tracker: 3 Adım (Resimlerle)
TOYL Task Tracker: 3 Adım (Resimlerle)

Video: TOYL Task Tracker: 3 Adım (Resimlerle)

Video: TOYL Task Tracker: 3 Adım (Resimlerle)
Video: KEREM KOMİSER VS FAKİR 😱 - Minecraft Parodileri 2024, Kasım
Anonim
Image
Image
TOYL Görev İzleyici
TOYL Görev İzleyici
TOYL Görev İzleyici
TOYL Görev İzleyici

Çalışmayı veya daha kötüsünü planlarken, bir çalışma oturumunun ortasındayken ve telefonunuza bir bildirim geldiğinde, saatler sonra "hızlı kontrol" geldiğinden nefret etmiyor musunuz? Ayrıca, haftalık iş için ayırdığınız zamanla ilgili olarak belirli görevler üzerinde ne kadar zaman çalıştığınızı biliyor musunuz?

TOYL Görev İzleyici'ye girin. Telefonunuzu kapatıp işinize odaklanmanızı sağlarken, aynı anda haftada çalışmak istediğiniz süreyi (örneğin 60 saat) ve yapmak istediğiniz görevleri ayarlamanıza olanak tanır. Bir seans için oturduğunuzda, genel işiniz için ne kadar zamanınız kaldığına dair bir fikir edinirsiniz. İzleyicinin iki modu vardır: Görev başına haftada ne kadar zaman harcamak istediğinizi önceden ayarladığınız Zamanlayıcı ve bir görevi seçtikten sonra zamanlayıcıyı başlatıp durdurabileceğiniz Kronometre.

Gereçler

Devre

  • Adafruit Tüy Huzzah
  • Adafruit TüyKanat
  • Erkek başlık pimleri
  • Dişi başlık pimleri
  • 500mAh pil
  • 100K ohm dirençler x2
  • Yalıtım bandı
  • Burgulu tel
  • Tel striptizci
  • Lehim Fanı

kasa

  • Opak akrilik levha 24”x18”
  • Çift taraflı bant
  • Lazer kesiciye erişim
  • vektör yazılımı

Adım 1: Devrenizi Lehimleyin

Devrenizi Lehimleyin
Devrenizi Lehimleyin
Devrenizi Lehimleyin
Devrenizi Lehimleyin
Devrenizi Lehimleyin
Devrenizi Lehimleyin

Dişi başlık pimlerini Feather Huzzah'a lehimleyin. Bu eğitim, Feather Huzzah donanım kurulumu için kullanışlıdır. Ardından, erkek başlık pimlerini FeatherWing'e lehimleyin. Bunları bu şekilde lehimlemek, gerektiğinde Feather Wing'i Feather Huzzah'tan birleştirmenizi ve ayırmanızı sağlar. Bu, özellikle bir sonraki adım olan FeatherWing'inize direnç eklemeniz gerektiğinde kullanışlıdır. 3V'a bağlı her 0 ve 2 pininden 100K ohm dirençleri bağlayın.

Feather Huzzah donanımınızı kurun

Feather Wing donanımınızı kurun

2. Adım: Kodunuzu Ekleyin

Kodunuzu Ekleyin
Kodunuzu Ekleyin
Kodunuzu Ekleyin
Kodunuzu Ekleyin

Bu kod, Ders 5 Nesnelerin İnterneti kodunun bir uyarlamasıdır, Zaman izin verirse, Preceptitaton hizmetini ToDosit IFTTT uygulaması aracılığıyla eklenen görevleri izleyen bir hizmetle değiştirmek istiyorum. Şu anda bir dizi görevi manuel olarak girmeniz ve bunlar arasında geçiş yapmak için A Düğmesini kullanmanız gerekir. Ek olarak, zamanlayıcıyı dakika cinsinden sayacak ve bir sonraki göreve geçerken duracak şekilde kodlamak isterdim. Zamanlayıcı için temel kod oluşturduğu ve görevler arasında geçiş yaptığı için Becky Stern'e çok teşekkür ederiz. Projeyi internete bağlamakla ilgileniyorsanız, bu sınıflardan geçmenizi şiddetle tavsiye ederim.

// Instructables Nesnelerin İnterneti Sınıfı örnek kodu// Devre İnternet Verilerini Gösterir // Hava durumu verileri bir beslemede toplanır // Birden fazla NeoPiksel hava durumunu görselleştirir // // Becky Stern tarafından değiştirildi // Adafruit IO Abonelik Örneğine göre

// Adafruit, bu açık kaynak kodunu sağlayarak zaman ve kaynaklara yatırım yapar.

// Lütfen Adafruit'ten // ürünleri satın alarak Adafruit ve açık kaynaklı donanımları destekleyin! // // Todd Treece tarafından Adafruit Industries için yazılmıştır // Telif hakkı (c) 2016 Adafruit Industries // MIT lisansı altında lisanslanmıştır. // // Yukarıdaki tüm metinler herhangi bir yeniden dağıtıma dahil edilmelidir.

/**************************** Adafruit IO Konfigürasyonu ************************* *********

/ hesap oluşturmanız gerekiyorsa io.adafruit.com adresini ziyaret edin, // veya Adafruit IO anahtarınıza ihtiyacınız varsa. #define IO_USERNAME "Kullanıcı Adınız Burada" #define IO_KEY "IOKeyBurda"

/******************************* WIFI Yapılandırması **************** *************************/

#define WIFI_SSID "WifiName"

#define WIFI_PASS "WifiPassword"

#include "AdafruitIO_WiFi.h"

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

/**************************** Ana Program Buradan Başlıyor ********************* **********/

#include #include #include #include

#Dahil etmek

#include #include #include

#define OLED_RESET 3

Adafruit_SSD1306 ekranı(128, 32, &Wire, OLED_RESET);

// bu sabit değişmeyecek:

const int buttonPinA = 0; // butonların bağlı olduğu pinler const int buttonPinB = 16; // bunun zaten bir çekme direnci var, diğer ikisi için bir const int buttonPinC = 2;

// Değişkenler değişecek:

int buttonAPushCounter = 0; // düğmeye basma sayısı için sayaç int buttonAState = 0; // butonun mevcut durumu int lastButtonAState = 0; // butonun önceki durumu

// Değişkenler değişecek:

int buttonBPushCounter = 0; // düğmeye basma sayısı için sayaç int buttonBState = 0; // butonun mevcut durumu int lastButtonBState = 0; // butonun önceki durumu

// Değişkenler değişecek:

int buttonCPushCounter = 0; // düğmeye basma sayısı için sayaç int buttonCState = 0; // butonun mevcut durumu int lastButtonCState = 0; // butonun önceki durumu

String displayForecast = "bilinmeyen";

int timerVal = 0;

imzasız uzun lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed *yağış = io.feed("yağış"); // 'yağış' beslemesini ayarla

//AdafruitIO_Feed *görev yöneticisi = io.feed("görev yöneticisi"); // 'görev yöneticisi' beslemesini ayarla

geçersiz kurulum() {

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

// SSD1306_SWITCHCAPVCC = dahili olarak 3,3V'den ekran voltajı üret

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 128x32 için 0x3C adresi

// Ekranda ilk görüntüleme arabelleği içeriğini göster --

// kitaplık bunu bir Adafruit açılış ekranı ile başlatır. display.display(); gecikme(2000); // 2 saniye duraklat

// Arabelleği temizle.

display.clearDisplay();

// seri bağlantıyı başlat

Seri.başla(115200);

// io.adafruit.com'a bağlan

Serial.print("Adafruit IO'ya Bağlanmak"); io.connect(); // 'yağış' beslemesi için bir mesaj işleyici ayarlayın. // handleMessage işlevi (aşağıda tanımlanmıştır) // adafruit io'dan bir mesaj alındığında // çağrılacak. yağış->onMessage(handleMessage);

// bağlantı için bekleyin

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

// bağlandık

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

}

boşluk döngüsü () {

// io.run(); tüm eskizler için gereklidir.

// her zaman döngünüzün en üstünde bulunmalıdır // işlevi. istemciyi // io.adafruit.com'a bağlı tutar ve gelen verileri işler. io.run();

// buton giriş pinini okuyun:

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

// buttonState'i önceki durumuyla karşılaştır

if (buttonAState != lastButtonAState || buttonBState != lastButtonBState || buttonCState != lastButtonCState) { // durum değiştiyse sayacı artırın if (buttonAState == LOW) { // mevcut durum DÜŞÜK ise, buton buttonAPushCounter++ basıldı; Serial.print("A düğmesine basma sayısı: "); Serial.println(buttonAPushCounter); } if (buttonBState == LOW) { // eğer mevcut durum LOW ise butona basılmıştır buttonBPushCounter++; Serial.print("B düğmesine basma sayısı: "); Serial.println(buttonBPushCounter); Serial.println("Zamanlayıcıyı başlatma"); timerEnabled = 1; lastStartTime = millis(); } if (buttonCState == LOW) { // eğer mevcut durum LOW ise butona basılmıştır buttonCPushCounter++; Serial.print("C düğmesine basma sayısı: "); Serial.println(buttonCPushCounter); Serial.println("Zamanlayıcıyı durdurma"); timerEnabled = 0; } } if (timerEnabled == 1){ // zamanlayıcıyı yalnızca başlatıldığında artır timerVal = (millis() - lastStartTime)/1000; }

// konum 1'i görüntüle - tahmin

// if (buttonAPushCounter % 3 == 0) { // display.clearDisplay(); // display.setTextSize(1); // display.setTextColor(BEYAZ); // display.setCursor(0, 0); // display.print("Tahmin: "); // display.println(displayForecast); // display.setCursor(0, 16); // display.println("ikinci satır"); // display.println("örnek içerik"); // display.display(); // //gecikme(2000); // }

//konum 1'i göster - Görev 1

if (buttonAPushCounter % 3 == 0) { display.setTextSize(1); display.setTextColor(BEYAZ); display.clearDisplay(); display.setCursor(0, 0); display.println("Araştırma - Röportajlar"); display.println(); display.print("Zamanlayıcı: "); display.println(timerVal); display.display(); }

//konum 2'yi göster - Görev 2

if (buttonAPushCounter % 3 == 1) { display.clearDisplay(); display.setCursor(0, 0); display.println("Stüdyo - Kod Oluşturma"); display.println(); display.print("Zamanlayıcı: "); display.println(timerVal); display.display(); }

//konum 3'ü göster - Görev 3

if (buttonAPushCounter % 3 == 2) { display.clearDisplay(); display.setCursor(0, 0); display.println("DSV - Çizim"); display.println(); display.print("Zamanlayıcı: "); display.println(timerVal); display.display(); }

// mevcut durumu son durum olarak kaydet, // bir dahaki sefer için döngü boyunca lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// bu fonksiyon bir mesaj geldiğinde çağrılır

// Adafruit IO'dan alındı. // yukarıdaki setup() işlevindeki feed'e eklendi. void handleMessage(AdafruitIO_Data *veri) {

Dizi tahmini = data->toString(); // gelen hava durumu verilerini bir dizgede sakla

Serial.print("alınan <-"); Serial.println(tahmin); displayForecast = tahmin; //aşağıdaki dizeler şimdiye kadar keşfettiğim çeşitli IFTTT hava durumu raporu sözcüklerini saklar String task1 = String("Task 1"); String yağmur = String("Yağmur"); String lightrain = String("Hafif Yağmur"); String rainshower = String ("Rain Shower"); String AMshowers = String ("AM Showers"); String rainandsnow = String("Yağmur ve Kar"); String kar = String("Kar"); String snowshower = String("Kar Yağmuru"); String cloudy = String("Bulutlu"); String çoğunluklacloudy = String("Çoğunlukla Bulutlu"); String partlycloudy = String("Parça Bulutlu"); String clearsky = String("Temizle"); String adil = String("Orta"); String güneşli = String("Güneşli");

// Bu if ifadeleri, gelen hava durumu değişkenini depolanan koşullarla karşılaştırır ve NeoPixels'i buna göre kontrol eder.

// eğer tahminde yağmur varsa if (forecast.equalsIgnoreCase(rain) || tahmin.equalsIgnoreCase(lightrain) || tahmin.equalsIgnoreCase(rainshower) || tahmin.equalsIgnoreCase(AMshowers)){ Serial.println("yağış bugün tahmin");

}

// tahminde kar varsa if (forecast.equalsIgnoreCase(snow) || tahmin.equalsIgnoreCase(rainandsnow) || tahmin.equalsIgnoreCase(snowshower)){ Serial.println("bugünkü hava tahmini");

}

// eğer tahminde güneş varsa if (forecast.equalsIgnoreCase(clearsky) || tahmin.equalsIgnoreCase(fair) || tahmin.equalsIgnoreCase(güneşli)){ Serial.println("bugün hava tahmininde bir çeşit güneş");

}

// tahminde bulut varsa if (forecast.equalsIgnoreCase(bulutlu) || tahmin.equalsIgnoreCase(mostlycloudy) || tahmin.equalsIgnoreCase(partlycloudy)){ Serial.println("bugünkü tahminde bulutlu gökyüzü");

}

}

3. Adım: Konteyneri / Kabuğu Oluşturun

Konteyneri / Kabuğu Oluşturun
Konteyneri / Kabuğu Oluşturun
Konteyneri / Kabuğu Oluşturun
Konteyneri / Kabuğu Oluşturun
Konteyneri / Kabuğu Oluşturun
Konteyneri / Kabuğu Oluşturun
Konteyneri / Kabuğu Oluşturun
Konteyneri / Kabuğu Oluşturun

Kabuk için çerçevenizin hangi boyutta olmasını istediğinizi belirleyerek başlayın veya dosyamı indirebilirsiniz. Boyutu belirledikten sonra, vektör dosyasının düzenini oluşturmak için MakerCase'i kullanabilirsiniz.

Dosyayı lazer kesiciden geçirin - yaklaşık 5 dakika sürmelidir. Daha sonra kabuğu bir araya getirin.

Düğmelerime ulaşmayı zorlaştıran malzemenin genişliğini hesaba katmadım. Hala onları bağlamanın bir yolunu bulmam gerekiyor. Ayrıca çok küçüktürler ve bu da onlarla çalışmayı zorlaştırır.

Önerilen: