Proses manufaktur
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 12 | ||||
| × | 4 | ||||
| × | 1 |
| ||||
|
| ||||
| ||||
|
Deskripsi
Meskipun ada banyak sekali web dan aplikasi seluler untuk melacak tanggal rilis acara favorit, saya ingin membuat perangkat yang memberi tahu saya saat episode baru dari serial atau anime dalam daftar saya dirilis dari awal - perangkat keras dan perangkat lunak - dengan berbagai fitur.
Pertama-tama, saya membuat aplikasi web - Pelacak Tanggal Rilis Serial TV / Anime - di PHP untuk membuat daftar serial/anime dan mengumpulkan informasi tentang tanggal rilisnya. Dalam hal ini, saya menggunakan TVMAZE REST API yang memungkinkan aplikasi untuk mendapatkan informasi episode berdasarkan tanggal rilis secara tepat, meskipun tanpa langkah-langkah coding yang berbeda dan membingungkan. Kemudian, saya menyiapkan server LAMP (w/ MariaDB) di Raspberry Pi untuk menjalankan aplikasi. Tetapi, bagi mereka yang tidak memiliki Raspberry Pi atau ingin menggunakannya sebagai host, saya menerbitkan aplikasi versi gratis dengan antarmuka yang ramah pengguna di situs web saya. Anda juga dapat menemukan kode sumber aplikasi di bawah ini.
Setelah memenuhi transfer informasi dengan aplikasi web, jika ada episode baru yang dirilis, saya memutuskan untuk menggunakan Arduino Nano 33 IoT sebagai papan pengembangan untuk menyusun data yang dihasilkan oleh aplikasi. Anda dapat menemukan informasi lebih lanjut di bawah tentang bagaimana saya menyortir respons yang ditransfer oleh aplikasi dengan menggunakan pembatas. Dan, untuk mengelola fitur dan mode yang saya terapkan pada Nano 33 IoT, saya merancang antarmuka pengguna (menu) dengan Layar Nokia 5110 dan tombol.
Terakhir, untuk mendapatkan informasi ketika episode baru dari acara di daftar saya dirilis dengan lagu pembukanya, saya menggunakan Modul Pemutar MP3 Serial (OPEN-SMART) karena daftar perintah UART yang mudah digunakan. Selain itu, saya dapat menambahkan mode MP3 Player untuk memutar semua lagu pembuka, yang mengubah perangkat menjadi aksesori yang menarik untuk kamar saya :)
Setelah menyelesaikan desain saya di papan tempat memotong roti dan menguji kode, saya merancang PCB (Serial TV / Anime Release Date Notifier) dengan bentuk telepon retro yang unik untuk menciptakan perangkat yang tampak baru dan mudah digunakan.
Terima kasih sebesar-besarnya kepada JLCPCB yang telah mensponsori proyek ini.
Langkah 1:Merancang dan Menyolder PCB Pemberitahu Tanggal Rilis Serial TV / Anime
Saya merancang PCB Notifier Tanggal Rilis Serial TV / Anime dengan menggunakan KiCad. Saya melampirkan file Gerber dari PCB di bawah ini, jadi jika Anda mau, Anda dapat memesan PCB ini dari JLCPCB untuk mereplikasi proyek ini untuk mendapatkan pemberitahuan ketika ada episode baru dari acara favorit Anda yang dirilis :)
Pertama-tama, dengan menggunakan besi solder, saya memasang header, tombol tekan, resistor 220Ω, colokan listrik, LED RGB Anoda 5mm.
Daftar komponen pada PCB:
A1 (Header untuk Arduino Nano 33 IoT)
J1 (Header untuk Serial MP3 Player)
J2 (Header untuk DS3231 - Tidak Diperlukan)
J3 (Header untuk Layar Nokia 5110)
J4 (colokan listrik)
D1 (LED RGB Anoda 5mm)
K1, K2, K3, K4 (Tombol Tekan)
R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12 (resistor 220Ω)
Langkah 2:Menyiapkan server web LAMP dengan MariaDB di Raspberry Pi
Jika Anda seorang pemula dalam pemrograman dengan Raspberry Pi, Anda dapat memeriksa instruksi dan tutorial yang dijelaskan dengan baik di situs web resmi Raspberry Pi.
Untuk membuka tutorial pengaturan Raspberry Pi resmi, klik di sini.
sudo apt-get install apache2 -y
nama host -saya
sudo apt-get update
sudo apt-get install php -y
sudo apt-get install mariadb-server php-mysql -y
sudo mysql_secure_installation
sudo mysql -uroot -p
membuat database tvseries;
BERIKAN SEMUA HAK ISTIMEWA DI tvseries.* UNTUK 'root'@'localhost' DIIDENTIFIKASI OLEH 'bot';
Hak Istimewa Siram;
sudo apt-get install php-curl
sudo service apache2 restart
Langkah 3:Mendapatkan informasi dari TVMAZE REST API di serial/anime favorit Anda
TVMAZE menyediakan REST API gratis dan mudah digunakan, yang memungkinkan pengguna mencari acara berdasarkan nama, tanggal, nomor episode, dll. Anda dapat memeriksa titik akhir dan kueri yang tersedia:
Buka TVMAZE REST API.
Saya menggunakan Episode berdasarkan Tanggal opsi untuk mengambil semua episode dari acara tertentu yang telah ditayangkan pada tanggal tertentu.
Untuk dapat memperoleh informasi berdasarkan tanggal rilis, Anda perlu mencari acara favorit Anda di TVMAZE dan menggunakan ID TV yang ditunjukkan di tautannya.
Jika ada episode yang ditayangkan pada tanggal tertentu, API akan menampilkan serangkaian info episode lengkap.
Jika tidak, API akan mengembalikan HTTP 404.
Di bawah ini, Anda dapat memeriksa daftar serial/anime favorit saya yang saya buat untuk melacak apakah ada episode baru dari salah satunya yang dirilis dengan proyek saya.
Saya menambahkan The Late Late Show untuk menguji kode saya karena ini adalah acara harian.
1) One Piece
ID TV:1505
https://www.tvmaze.com/shows/1505/one-piece
2) Akademisi Pahlawan Saya
ID TV:13615
https://www.tvmaze.com/shows/13615/boku-no-hero-academia
3) Dunia Barat
ID TV:1371
https://www.tvmaze.com/shows/1371/westworld
4) The Simpsons
ID TV:83
https://www.tvmaze.com/shows/83/the-simpsons
5) Pertunjukan Terlambat dengan James Corden
ID TV:2831
https://www.tvmaze.com/shows/2831/the-late-late-show-with-james-corden
Langkah 4:Mengembangkan Serial TV / Anime Release Date Tracker (aplikasi) yang berjalan di Raspberry Pi di PHP dan membuat tabel serial untuk memasukkan data
Saya mengembangkan Pelacak Tanggal Rilis Serial TV / Anime di PHP dan menjelaskan kode sumber aplikasi di bagian Penjelasan Kode di bawah ini bagi yang berminat.
Namun, jika Anda tidak menyukai pengembangan web dengan PHP, Anda dapat mengunduh aplikasi di Unduhan - bernama TV-Series-Anime-Episode-Tracker.zip - dan mengunggahnya ke Raspberry Pi tanpa menyelami koding PHP.
Unggah
:
Dengan langkah-langkah berikut, instal Pelacak Tanggal Rilis Serial TV / Anime di localhost:
sudo mv /home/pi/Downloads/TV-Series-Anime-Episode-Tracker/ /var/www/html/
http://localhost/TV-Series-Anime-Episode-Tracker/
Fitur
:
1) Setelah instalasi, buka aplikasi untuk membuat tabel bernama seri di database (tvseries). Saat Anda pertama kali membuka file index.php, aplikasi membuat tabel bernama seri secara otomatis dan memberi tahu pengguna - Tabel Database Dibuat!
2) Jika tabel database (seri) berhasil dibuat dalam database, aplikasi menginformasikan pengguna - Tabel Database Ditemukan!
3) Setelah membuat tabel database (seri), untuk menyisipkan variabel yang diperlukan untuk TVMAZE REST API untuk setiap acara dalam daftar Anda, lakukan langkah-langkah berikut:
sudo mysql -uroot -p
GUNAKAN serial tv;
INSERT INTO `series` (`series_name`, `tv_id`, `status`) NILAI ('One Piece', '1505', 'Pending');
5) Pada query.php, aplikasi membuat permintaan ke TVMAZE REST API untuk mendeteksi apakah episode baru acara dalam database sedang dirilis. Jika TVMAZE REST API mengembalikan serangkaian info episode lengkap dari episode yang dirilis, aplikasi akan mencetak informasi yang dapat dikumpulkan oleh Arduino Nano 33 IoT sekali untuk mencegah pengulangan.
http://localhost/TV-Series-Anime-Episode-Tracker/query.php
%Series_Name%Season%Episode_Number%Episode_Name%
%Pertunjukan Terlambat Terlambat%2020%91%Jason Schwartzman, Alicia Key%
6) Jika tidak, aplikasi akan mencetak Tidak Ditemukan Entri!
Penjelasan Kode
:
1) index.php
2) query.php
Langkah 4.1:Menjalankan aplikasi web tanpa Raspberry Pi
Untuk pelanggan situs web saya (TheAmplituhedron), saya mengembangkan versi gratis dari Pelacak Tanggal Rilis Serial TV / Anime untuk mereka yang tidak memiliki Raspberry Pi atau ingin menggunakannya sebagai host untuk proyek ini.
Ini menyediakan antarmuka yang ramah pengguna untuk mengelola database. Jika Anda ingin menggunakan antarmuka ini dengan proyek Anda daripada menggunakan terminal pada Raspberry Pi untuk memasukkan data, silakan hubungi saya.
Buka aplikasi:
https://www.theamplituhedron.com/dashboard/TV-Series-Anime-Episode-Tracker/
Langkah 5:Menyiapkan Arduino Nano 33 IoT
Jika Anda seorang pemula dalam pemrograman dengan Arduino Nano 33 IoT:jangan khawatir, ini mudah digunakan dengan Arduino IDE. Cukup unduh driver yang diperlukan - Arduino SAMD Core - juga dijelaskan di sini.
Untuk dapat terhubung ke WiFi melalui Arduino Nano 33 IoT, unduh library WiFiNINA dari sini.
Untuk mencetak teks dan menggambar grafik di Layar Nokia 5110, unduh perpustakaan LCD5110_Basic dari sini.
Saya menggunakan port serial kedua (Serial1) pada Arduino Nano 33 IoT untuk berkomunikasi dengan Serial MP3 Player.
Port Serial pada Arduino Nano 33 IoT :
"Konektor USB papan terhubung langsung ke pin host USB SAMD21. Perutean ini memungkinkan Anda untuk menggunakan Arduino NANO 33 IoT sebagai periferal USB klien (bertindak sebagai mouse atau keyboard yang terhubung ke komputer ) atau sebagai perangkat USB host sehingga perangkat seperti mouse, keyboard, atau ponsel Android dapat terhubung ke Arduino NANO 33 IoT. Port ini juga dapat digunakan sebagai port serial virtual menggunakan objek Serial dalam bahasa pemrograman Arduino . Pin RX0 dan TX1 adalah port serial kedua yang tersedia sebagai Serial1."
Kemudian, Arduino Nano 33 IoT siap untuk mengeksekusi kode proyek :)
Langkah 6:Mengirim perintah ke Serial MP3 Player (OPEN-SMART)
Saya membuat playlist yang berisi lagu pembuka dari serial/daftar anime favorit saya dalam proyek ini:
1) One Piece - Pembukaan | Dengarkan
2) Akademi Pahlawan Saya - Pembukaan | Dengarkan
3) Westworld - Pembukaan | Dengarkan
4) The Simpsons - Pembukaan | Dengarkan
5) Pertunjukan Terlambat - Pembukaan | Dengarkan
Jika mau, Anda dapat mengunduh daftar putar saya di folder zip - opening_songs.zip.
Sangat mudah untuk menggunakan Serial MP3 Player dengan Arduino Nano 33 IoT selama Anda mengetahui perintah UART yang diperlukan untuk memicu fungsi yang tepat. Saya menggunakan modul Serial MP3 Player dengan Speaker oleh OPEN-SMART. Jadi, jika Anda memiliki Serial MP3 Player dengan nama merek yang berbeda, perintah di bawah ini tidak akan berfungsi untuk Anda.
Ikuti petunjuk dari panduan:
"Modul ini adalah sejenis perangkat pemutar MP3 sederhana yang didasarkan pada chip audio MP3 berkualitas tinggi. Modul ini dapat mendukung frekuensi pengambilan sampel 8k Hz ~ 48k Hz format file MP3 dan WAV. Ada soket kartu TF di papan , sehingga Anda dapat mencolokkan kartu micro SD yang menyimpan file audio. MCU dapat mengontrol status pemutaran MP3 dengan mengirimkan perintah ke modul melalui port UART, seperti mengganti lagu, mengubah volume dan mode putar, dan sebagainya. Anda juga dapat debug modul melalui USB ke modul UART. Ini kompatibel dengan Arduino / AVR / ARM / PIC."
"Pastikan kartu micro SD Anda diformat sebagai FAT16 atau FAT32 dan ada beberapa lagu di dalamnya. Anda harus membuat folder "01" dan "02", dan meletakkan beberapa lagu dengan nama 001xxx.mp3 / 002xxx.mp3 / 003xxx.mp3 di dalamnya."
Dengan kata lain, untuk dapat menjalankan perintah secara akurat, simpan lagu Anda di folder bernama '01' dan tambahkan nomor berurutan ke nama lagu - 001One Piece-Opening.mp3, 002My Hero Academia-Opening.mp3, dll.
Untuk mengirim perintah UART ke Serial MP3 Player dengan Arduino Nano 33 IoT, saya membuat fungsi bernama send_command_to_MP3_player . Ini mentransfer setiap byte dalam perintah yang diminta ke Serial MP3 Player melalui port serial kedua pada pin RX0 dan TX1 - Serial1 - tergantung pada panjang perintah yang diminta - 4, 5, atau 6.
Seperti yang ditunjukkan di bawah ini, pisahkan perintah yang ingin Anda kirim ke Serial MP3 Player dengan byte - 0x7e. Semua perintah dimulai dengan '7E' dan diakhiri dengan 'EF'. Byte kedua adalah jumlah byte di antara - '02', '03', '04'. Di bawah ini, unduh manual Serial MP3 Player oleh OPEN-SMART untuk memeriksa semua perintah dan mendapatkan instruksi yang lebih detail.
// Tentukan Perintah Pemutar MP3 yang diperlukan.
// Anda dapat memeriksa semua perintah yang diberikan dari halaman proyek:
// Pilih perangkat penyimpanan ke kartu TF
static int8_t pilih_SD_card[] ={0x7e, 0x03, 0X35, 0x01, 0xef}; // 7E 03 35 01 EF
// Putar lagu dengan direktori:/01/001xxx.mp3
static int8_t play_song_1[] ={0x7e, 0x04, 0x41, 0x00, 0x01, 0xef}; // 7E 04 41 00 01 EF
// Putar lagu dengan direktori:/01/002xxx.mp3
static int8_t play_song_2[] ={0x7e, 0x04, 0x41, 0x00, 0x02, 0xef}; // 7E 04 41 00 02 EF
// Putar lagu dengan direktori:/01/003xxx.mp3
static int8_t play_song_3[] ={0x7e, 0x04, 0x41, 0x00, 0x03, 0xef}; // 7E 04 41 00 03 EF
// Putar lagu dengan direktori:/01/004xxx.mp3
static int8_t play_song_4[] ={0x7e, 0x04, 0x41, 0x00, 0x04, 0xef}; // 7E 04 41 00 04 EF
// Putar lagu dengan direktori:/01/005xxx.mp3
static int8_t play_song_5[] ={0x7e, 0x04, 0x41, 0x00, 0x05, 0xef}; // 7E 04 41 00 05 EF
// Putar lagunya.
static int8_t play[] ={0x7e, 0x02, 0x01, 0xef}; // 7E 02 01 EF
// Menjeda lagu.
static int8_t pause[] ={0x7e, 0x02, 0x02, 0xef}; // 7E 02 02 EF
// Lagu berikutnya.
static int8_t next_song[] ={0x7e, 0x02, 0x03, 0xef}; // 7E 02 03 EF
// Lagu sebelumnya.
static int8_t sebelumnya_song[] ={0x7e, 0x02, 0x04, 0xef}; // 7E 02 04 EF
Langkah 7:Memprogram Arduino Nano 33 IoT
Connections and Adjustments
// Connections
// Arduino Nano 33 IoT:
// Nokia 5110 Screen
// D2 -------------------------- SCK (Clk)
// D3 -------------------------- MOSI (Din)
// D4 -------------------------- DC
// D5 -------------------------- RST
// D6 -------------------------- CS (CE)
// RGB
// D9 -------------------------- R
// D10 -------------------------- G
// D11 -------------------------- B
// LEFT_BUTTON
// A0 --------------------------- S
// OK_BUTTON
// A1 --------------------------- S
// RIGHT_BUTTON
// A2 --------------------------- S
// EXIT_BUTTON
// A3 --------------------------- S
// DS3231 (Optional for Nano and Not Required for Nano 33 IoT)
// A4 --------------------------- SDA
// A5 --------------------------- SCL
After finishing and uploading the code to the Arduino Nano 33 IoT, I attached all required components to the board via headers.
I also provided a connection slot for a DS3231 RTC Module for those who want to change the Arduino Nano 33 IoT with the Arduino Nano. But, you need to enter release dates manually for each show to the Arduino Nano without being able to obtain data from the web application to create a countdown timer with the RTC.
Note:You can connect either a speaker or headphones to the Serial MP3 Player to listen to soundtracks in the playlist. I connected the speaker delivered in addition to the Serial MP3 Player (OPEN-SMART).
Modes and Features
1) While the device tries to connect to the WiFi network, it displays Waiting... Attempting to connect to WiFi .
2) After establishing a successful connection, the device informs the user with this message - Connected to WiFi!!!
3) Then, the device prints the interface (menu) presenting available modes - A.Init Tracker, B.MP3 Player , and C.Sleep . To switch among modes, use the Right and Left buttons. Subsequently, press the OK button to select a mode.
A.Init Tracker
A.1) After selecting the A.Init Tracker mode, the device attempts to connect to the localhost hosted by the Raspberry Pi. If successful, it informs the user with this message - Connected to the server!!! Conversely, the device displays this message - Connection Error!!!
A.2) If the application (TV Series / Anime Release Date Tracker) sends a data string that of a released episode of a registered series/anime in the database, then the device:
One Piece, 10x54, Luffy's Determination
For instance, I assigned these colors below for each show in my list:
Unless the Exit button is pressed, the device keeps displaying the episode information and showing the assigned color.
The device notifies the user for once for each released episode to prevent any recurrence.
A.3) After the Exit button is pressed, the device draws the television icon while waiting for the next request to the application.
A.4) If there is no released episode of a registered series/anime in the database, the device displays this message - No Released Episode Detected :( - and then; draws the television icon until the next request to the application.
A.5) The device returns to the interface (menu) if the Exit button is pressed while displaying the television icon.
B. MP3 Player
I implemented this feature as a subsidiary and fun one to turn this device into an intriguing accessory for my room.
B.1) After selecting the B.MP3 Player mode, the device draws the music note icon and lets the user play all opening songs by using the control buttons:
B.2) The device returns to the interface (menu) if the Exit button is pressed.
C.Sleep
C.1) After selecting the C.Sleep mode, the device enables the sleep mode in 10 seconds and prints the remaining seconds on the screen.
C.2) While maintaining the sleep mode, the device applies a given color pattern to the RGB as a nightlight.
C.3) The device returns to the interface (menu) if the Exit button is pressed.
Videos and Conclusion
After completing all steps above, I decided to fasten the device to my bookcase by using a hot glue gun. It works stupendously :)
//////////////////////////////////////////////////// // TV Series / Anime New Episode // // Release Date Notifier // // ------------------------- // // Arduino Nano 33 IoT // // by Kutluhan Aktar // // // ////////////////////////////////////////////////////// Get informed when new episodes of your favorite shows are on release with their opening songs via Nano 33 IoT and Raspberry Pi. //// I developed a corroborating web application in PHP for this project, named TV Series / Anime Release Date Tracker. // You can either use a Raspberry Pi as the server, explained in the project tutorial, or TheAmplituhedron with the real-time database interface if you are a member. //// For more information:// https://www.theamplituhedron.com/projects/TV-Series-Anime-New-Episode-Release-Date-Notifier/// // You can use the mentioned web application in free version on TheAmplituhedron as the host server if you are a subscriber:// https://www.theamplituhedron.com/dashboard/TV-Series-Anime-Episode-Tracker///// Connections// Arduino Nano 33 IoT:// Nokia 5110 Screen// D2 --------------------------- SCK (Clk)// D3 --------------------------- MOSI (Din) // D4 --------------------------- DC // D5 --------------------------- RST// D6 --------------------------- CS (CE)// RGB// D9 --------------------------- R// D10 --------------------------- G// D11 --------------------------- B// LEFT_BUTTON// A0 --------------------------- S// OK_BUTTON// A1 --------------------------- S// RIGHT_BUTTON// A2 --------------------------- S// EXIT_BUTTON// A3 --------------------------- S// DS3231 (Optional for Nano and Not Required for Nano 33 IoT)// A4 --------------------------- SDA // A5 --------------------------- SCL// Include required libraries:#include#include #include char ssid[] ="[_SSID_]"; // your network SSID (name)char pass[] ="[_PASSWORD_]"; // your network password (use for WPA, or use as key for WEP)int keyIndex =0; // your network key Index number (needed only for WEP)int status =WL_IDLE_STATUS;// Note:Uncomment equivalent connection settings provided under related lines for using the web application hosted on TheAmplituhedron if you are a subscriber.// Enter the IPAddress of your Raspberry Pi.IPAddress server(192, 168, 1, 22);/* // name address for TheAmplituhedron. Change it with your server if you are using a different host server than TheAmplituhedron.char server[] ="www.theamplituhedron.com";*/// Define the pathway of the application in Raspberry Pi.String application ="/TV-Series-Anime-Episode-Tracker/query.php";/*// Define your hedron if you are using TheAmplituhedron as the host server for this project:String HEDRON ="[_HEDRON_]";// Define the pathway of the web application. If you are using TheAmplituhedron as the host server for this project as I did, just enter your hedron. Otherwise, enter the pathway on your server.String application ="/dashboard/TV-Series-Anime-Episode-Tracker/" + HEDRON;*/// Initialize the Ethernet client libraryWiFiClient client;/* WiFiSSLClient client; */// Define screen settings.LCD5110 myGLCD(2,3,4,5,6);extern uint8_t SmallFont[];extern uint8_t MediumNumbers[];// Define the graphics for related screen modes.extern uint8_t tv[];extern uint8_t music[];// Define the required MP3 Player Commands.// You can inspect all given commands from the project page:// Select storage device to TF cardstatic int8_t select_SD_card[] ={0x7e, 0x03, 0X35, 0x01, 0xef}; // 7E 03 35 01 EF// Play the song with the directory:/01/001xxx.mp3static int8_t play_song_1[] ={0x7e, 0x04, 0x41, 0x00, 0x01, 0xef}; // 7E 04 41 00 01 EF// Play the song with the directory:/01/002xxx.mp3static int8_t play_song_2[] ={0x7e, 0x04, 0x41, 0x00, 0x02, 0xef}; // 7E 04 41 00 02 EF// Play the song with the directory:/01/003xxx.mp3static int8_t play_song_3[] ={0x7e, 0x04, 0x41, 0x00, 0x03, 0xef}; // 7E 04 41 00 03 EF// Play the song with the directory:/01/004xxx.mp3static int8_t play_song_4[] ={0x7e, 0x04, 0x41, 0x00, 0x04, 0xef}; // 7E 04 41 00 04 EF// Play the song with the directory:/01/005xxx.mp3static int8_t play_song_5[] ={0x7e, 0x04, 0x41, 0x00, 0x05, 0xef}; // 7E 04 41 00 05 EF// Play the song.static int8_t play[] ={0x7e, 0x02, 0x01, 0xef}; // 7E 02 01 EF// Pause the song.static int8_t pause[] ={0x7e, 0x02, 0x02, 0xef}; // 7E 02 02 EF// Next song.static int8_t next_song[] ={0x7e, 0x02, 0x03, 0xef}; // 7E 02 03 EF// Previous song.static int8_t previous_song[] ={0x7e, 0x02, 0x04, 0xef}; // 7E 02 04 EF// Define menu options and modes using volatile booleans.volatile boolean TV =false;volatile boolean Music =false;volatile boolean Sleep =false;volatile boolean Activated =false;// Define the control buttons.#define B_Exit A3#define B_Right A2#define B_OK A1#define B_Left A0// Define RGB LED pins.#define redPin 9#define greenPin 10#define bluePin 11// Define data holders:int Right, OK, Left, Exit;int selected =0;void setup() { // Buttons:pinMode(B_Exit, INPUT); pinMode(B_Right, INPUT); pinMode(B_OK, INPUT); pinMode(B_Left, INPUT); // RGB:pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); adjustColor(0, 0, 0); // Black // Initiate screen. myGLCD.InitLCD(); myGLCD.setFont(SmallFont); Serial.begin(9600); // Initiate serial communication for the Serial MP3 Player Module. Serial1.begin(9600); // Select the SD Card. send_command_to_MP3_player(select_SD_card, 5); // check for the WiFi module:if (WiFi.status() ==WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); myGLCD.print("Connection Failed!", 0, 8); while (true); } // attempt to connect to Wifi network:while (status !=WL_CONNECTED) { Serial.print("Attempting to connect to SSID:"); Serial.println(ssid); myGLCD.print("Waiting...", 0, 8); myGLCD.print("Attempting to", 0, 16); myGLCD.print("connect to", 0, 24); myGLCD.print("WiFi !!!", 0, 32); // Connect to WPA/WPA2 network. Change this line if using open or WEP network:status =WiFi.begin(ssid, pass); // wait 10 seconds for connection:delay(10000); } // Verify connection on both the serial monitor and Nokia 5110 Screen. Serial.println("Connected to wifi"); myGLCD.clrScr(); myGLCD.print("Connected to", 0, 8); myGLCD.print("WiFi!!!", 0, 16); penundaan(2000); myGLCD.clrScr();}void loop() { read_buttons(); change_menu_options(); interface(); if(TV ==true){ do{ myGLCD.invertText(true); myGLCD.print("A.Init Tracker", 0, 16); myGLCD.invertText(false); delay(100); if(OK ==HIGH){ myGLCD.clrScr(); Activated =true; while(Activated ==true){ // Connect to the web application named TV Series / Anime Release Date Tracker. Change '80' with '443' if you are using TheAmplituhedron as the host. if (client.connect(server, 80)) { Serial.println("connected to server"); // if you get a connection, report back via serial:myGLCD.print("Connected to", 0, 8); myGLCD.print("the server!!!", 0, 16); // Make an HTTP request:client.println("GET " + application + " HTTP/1.1"); //client.println("Host:www.theamplituhedron.com"); client.println("Host:192.168.1.22"); client.println("Connection:close"); client.println(); }else{ myGLCD.print("Connection", 0, 8); myGLCD.print("Error!!!", 0, 16); } delay(2000); // Wait 2 seconds after connection... // If there are incoming bytes available, get the response from the web application. String response =""; while (client.available()) { char c =client.read(); response +=c; } if(response !="" &&response.endsWith("%")){ // Split the response string by a pre-defined delimiter in a simple way. '%'(percentage) is defined as the delimiter in this project. int delimiter, delimiter_1, delimiter_2, delimiter_3, delimiter_4; delimiter =response.indexOf("%"); delimiter_1 =response.indexOf("%", delimiter + 1); delimiter_2 =response.indexOf("%", delimiter_1 +1); delimiter_3 =response.indexOf("%", delimiter_2 +1); delimiter_4 =response.indexOf("%", delimiter_3 +1); // Glean information as substrings. String Series_Name =response.substring(delimiter + 1, delimiter_1); String Season =response.substring(delimiter_1 + 1, delimiter_2); String Episode =response.substring(delimiter_2 + 1, delimiter_3); String Episode_Name =response.substring(delimiter_3 + 1, delimiter_4); // Print information. myGLCD.clrScr(); myGLCD.print(Series_Name, 0, 0); myGLCD.print(Season + " x " + Episode, 0, 16); myGLCD.print(Episode_Name, 0, 32); // Play the opening song of the released series / anime until ceased:if(Series_Name =="One Piece") { send_command_to_MP3_player(play_song_1, 6); adjustColor(255,0,0); } if(Series_Name =="My Hero Academia") { send_command_to_MP3_player(play_song_2, 6); adjustColor(0,255,0); } if(Series_Name =="Westworld") { send_command_to_MP3_player(play_song_3, 6); adjustColor(0,0,255); } if(Series_Name =="The Simpsons") { send_command_to_MP3_player(play_song_4, 6); adjustColor(255,255,0); } if(Series_Name =="The Late Late Show") { send_command_to_MP3_player(play_song_5, 6); adjustColor(80,0,80); } // Wait until the Exit button pressed... volatile boolean song =true; while(song ==true){ read_buttons(); if(Exit ==HIGH){ song =false; send_command_to_MP3_player(pause, 4); adjustColor(0,0,0); } } myGLCD.clrScr(); }else{ // Print information. myGLCD.clrScr(); myGLCD.print("No Released", 0, 0); myGLCD.print("Episode", 0, 16); myGLCD.print("Detected :(", 0, 32); delay(5000); // Wait 5 seconds to display information... myGLCD.clrScr(); } // Draw TV icon while counting to the new request... myGLCD.drawBitmap(8, 0, tv, 60, 48); delay(10 * 1000); // Wait until next request... myGLCD.clrScr(); // Exit. read_buttons(); if(Exit ==HIGH){ Activated =false; myGLCD.clrScr(); } } } }while(TV ==false); } if(Music ==true){ do{ myGLCD.invertText(true); myGLCD.print("B.MP3 Player", 0, 24); myGLCD.invertText(false); delay(100); if(OK ==HIGH){ myGLCD.clrScr(); Activated =true; while(Activated ==true){ read_buttons(); // Draw music player icon. myGLCD.drawBitmap(8, 0, music, 60, 48); // MP3 Player:if(Right ==true) send_command_to_MP3_player(next_song, 4); if(Left ==true) send_command_to_MP3_player(previous_song, 4); if(OK ==true) send_command_to_MP3_player(pause, 4); // Exit. if(Exit ==HIGH){ Activated =false; myGLCD.clrScr(); send_command_to_MP3_player(pause, 4); } } } }while(Music ==false); } if(Sleep ==true){ do{ myGLCD.invertText(true); myGLCD.print("C.Sleep", 0, 32); myGLCD.invertText(false); delay(100); if(OK ==HIGH){ // Activate the sleep mode in 10 seconds. myGLCD.clrScr(); myGLCD.print("Entering", CENTER, 0); myGLCD.print("Sleep Mode", CENTER, 8); myGLCD.print("in", CENTER, 16); myGLCD.print("Seconds", CENTER, 40); // Print remaining seconds. myGLCD.setFont(MediumNumbers); for (int s=10; s>=0; s--){ myGLCD.printNumI(s, CENTER, 24, 2, '0'); penundaan (1000); } myGLCD.enableSleep(); Activated =true; while(Activated ==true){ // Color Pattern:adjustColor(255,0,0); penundaan (500); adjustColor(0,255,0); penundaan (500); adjustColor(0,0,255); penundaan (500); adjustColor(255,255,0); penundaan (500); adjustColor(80,0,80); penundaan (500); // Exit. read_buttons(); if(Exit ==HIGH){ Activated =false; myGLCD.clrScr(); myGLCD.disableSleep(); myGLCD.setFont(SmallFont); adjustColor(0,0,0); } } } }while(Sleep ==false); }}void read_buttons(){ // Read the control buttons:Right =digitalRead(B_Right); OK =digitalRead(B_OK); Left =digitalRead(B_Left); Exit =digitalRead(B_Exit);}void send_command_to_MP3_player(int8_t command[], int len){ Serial.print("\nMP3 Command => "); for(int i=0;i 3) selected =1; delay(100); // Depending on the selected option number, change boolean status. switch(selected){ case 1:TV =true; Music =false; Sleep =false; merusak; case 2:TV =false; Music =true; Sleep =false; merusak; case 3:TV =false; Music =false; Sleep =true; merusak; }}void adjustColor(int red, int green, int blue){ red =255 - red; green =255 - green; blue =255 - blue; analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue);}
0) ? true :false;}function createTable($table_name, $conn){ if(!checkDatabase($table_name, $conn)){ $sql ="CREATE TABLE `$table_name`( id int(11) AUTO_INCREMENT PRIMARY KEY NOT NULL, series_name varchar(255) NOT NULL, tv_id varchar(255) NOT NULL, status varchar(255) NOT NULL );"; if(mysqli_query($conn, $sql)){ echo "Database Table Created!"; }else{ echo "Error!"; } }else{ echo "Database Table Found!"; }}createTable("series", $conn_database);?>
conn =$conn; $this->table_name =$table_name; } private function check_ep_release_date($API_ID, $series_name, $status){ $date =date("Y-m-d"); $URL =self::ROOT.$API_ID.self::PATH.$date; if($get_content =json_decode(file_get_contents((String)$URL))){ if($status !="Released"){ echo "%".$series_name."%".$get_content[0]->season."%".$get_content[0]->number."%".$get_content[0]->name."%"; $sql ="UPDATE `$this->table_name` SET `status`='Released' WHERE series_name='$series_name'"; mysqli_query($this->conn, $sql); } }else{ if($status !="Pending"){ $sql ="UPDATE `$this->table_name` SET `status`='Pending' WHERE series_name='$series_name'"; mysqli_query($this->conn, $sql); } } } public function track_db_entries(){ $sql ="SELECT * FROM `$this->table_name` ORDER BY `id` DESC"; if($result =mysqli_query($this->conn, $sql)){ $check =mysqli_num_rows($result); if($check> 0){ while($row =mysqli_fetch_assoc($result)){ $this->check_ep_release_date($row['tv_id'], $row['series_name'], $row['status']); } }else{ echo "No Entry Found!"; } }else{ echo "No Database Found!"; } }}// Define the connection settings and the table name.$conn_database =mysqli_connect("localhost", "root", "bot", "tvseries");$table ="series";// Define the object to check release date for each registered series / anime.$q =new query();$q->define_user($conn_database, $table);$q->track_db_entries();?>
Proses manufaktur
E3.series 2021 sekarang tersedia dan dengan itu kami telah menyiapkan daftar fitur khusus baru untuk pembuatan dan pengembangan proyek panel listrik. Coba SEKARANG alat E-CAE E3.series terkemuka di industri di dunia dengan kursus pelatihan teknis! Klik banner di bawah ini: Ekspor Data 3D dar
Kursus pelatihan teknis E3.series tersedia dalam paket baru dengan harga diskon! Lihat masing-masing di bawah ini: E3.Package #1 Paket Kursus Ini Berisi: E3.schematic L1 - Mengembangkan proyek pertama Anda E3.dataBase Editor L1 - Database yang Dioptimalkan untuk Permintaan Anda Inilah yang a
Komponen dan persediaan Raspberry Pi 2 Model B × 1 PNY 16GB Turbo MicroSDXC CL10 × 1 SparkFun Arduino Pro Mini 328 - 5V/16MHz × 1 Papan Relai Solid State SainSmart 5V 4-Channel × 1 Modul Relay 5v Tolako untuk Arduino × 1 Sensor Suhu Tahan Air DS
Pada 17 Agustus 2021, Siemens mengumumkan ketersediaan sistem penggerak tertutup baru, SINAMICS G120XE. Ini dirancang khusus untuk kebutuhan aplikasi pompa, kipas dan kompresor industri di berbagai pasar. Dibangun di sekitar penggerak infrastruktur SINAMICS G120X yang populer, sistem tertutup baru i