Perpustakaan Arduino untuk memeriksa tanggal dan suhu DS3231 terintegrasi melalui I2C

Perpustakaan Arduino untuk memeriksa tanggal dan suhu DS3231 terintegrasi melalui I2C

Perpustakaan Arduino untuk memeriksa tanggal dan suhu DS3231 terintegrasi melalui I2C

DIPERBARUI: Kunjungi juga yang baru perpustakaan untuk mengatur tanggal dan waktu dengan modul DS3231 RTC dan Arduino dengan perbaikan seperti waktu musiman.

Pengoperasian IC de jam waktu nyata (RTC) paling populer yang dikontrol menggunakan bus I2C Biasanya sangat mirip. Disamping Perpustakaan kawat de Arduino sangat menyederhanakan komunikasi dengan perangkat Antarmuka Serial dua kabel (TWI), I2C, spesifik.

Daftar Isi

    Secara garis besar prosesnya terdiri dari

    1. Memulai komunikasi sebagai budak atau master (diatur secara default) dengan fungsi tersebut Wire.begin(alamat). Jika "alamat" dihilangkan, komunikasi dimulai dengan C guru dari bus I2C.

    2. Aktifkan komunikasi I2C dengan perangkat melalui alamat memori tempatnya berada, menggunakan perintah Wire.beginTransmission(alamat).

    3. Tulis pesanan di bus I2C untuk memberi tahu perangkat operasi yang ingin Anda lakukan, menggunakan Wire.write(perintah), di mana "order" adalah kode operasinya.

    4. Nonaktifkan komunikasi untuk melepaskan bus I2C dengan fungsi Wire.endTransmission ().

    5. Meminta perangkat untuk mengirimkan sejumlah data tertentu yang sesuai dengan operasi yang diminta (dalam hal ini, tanggal dan waktu) dengan fungsi tersebut Wire.requestFrom(alamat,jumlah).

    6. Tunggu hingga data yang diminta dengan fungsi tersebut tersedia untuk dibaca Wire.available (), yang mengembalikan jumlah data yang telah diterima dan dapat dibaca.

    7. Membaca data yang dikirim oleh perangkat ( jam waktu nyata, dalam hal ini) menggunakan fungsi tersebut Kawat.baca() sebanyak byte yang ditunjukkan Wire.available () yang tersedia.

    8. Biasanya data dikirim dalam format yang sangat kompak sehingga kemungkinan besar data yang diterima perlu diinterpretasikan sedemikian rupa sehingga sesuai dengan representasi data yang dibuat dalam program yang menggunakan perangkat tersebut.

    Mengenai DS3231 (dan yang kompatibel dalam seri yang sama, seperti DS3232) dan interpretasi datanya, sesuai dengan spesifikasi yang terintegrasi, misalnya nilai berbagai digit yang mewakili waktu direpresentasikan dalam desimal berkode biner (BCD) yang akan lebih mudah dinyatakan sebagai nilai desimal (a byte) untuk digunakan di Arduino

    Pada baris yang sama, suhu dinyatakan sebagai byte in pelengkap dua untuk bagian bilangan bulat dan dua bit untuk langkah, dengan resolusi seperempat derajat, bagian desimal. Aspek ini dan aspek lain dari representasi data pada jam telah dibahas secara mendalam dalam kode perpustakaan di bawah. DS3231

    Untuk mengecek suhu dengan perpustakaan ini, cukup gunakan metode tersebut baca_suhu() Obyek DS3231 dipakai di awal. Untuk membaca tanggal dan waktu, pertama-tama mereka dimuat dan kemudian diminta dalam salah satu format (kompak, manusia...) yang tersedia untuk kegunaan berbeda, didokumentasikan dalam dokumen header pustaka kode di bawah.

    Berikut ini adalah contoh kode untuk menunjukkan cara menggunakan perpustakaan. Seperti disebutkan di atas, suhu hanya dibaca dengan fungsinya baca_suhu() dari objek kelas DS3231 tetapi, untuk mengabaikan kesalahan dalam pembacaan, digunakan dua konstanta yang masing-masing menyimpan suhu maksimum dan minimum perangkat menurut lembar data dan dibaca dengan fungsi yang sesuai.

    Pembacaan suhu dilakukan dalam dua tahap: pertama nilai dimuat, sehingga penggunaan tanggal atau waktu yang berbeda akan konsisten (tidak akan menunjukkan nilai yang lebih tinggi dalam kasus yang tidak menguntungkan) dan kedua digunakan sesuai dengan format yang diperlukan. Program contoh (yang tidak terlalu praktis, meskipun menjelaskan semua kemungkinan) menunjukkan semua format yang tersedia

    • Fungsi itu tanggal_waktu_nilai() yang mengembalikan pointer ke array tangki (byte) berisi tujuh nilai numerik yang mewakili tanggal dan waktu pada jam DS3231 dikonversi ke desimal (mereka masuk BCD di perangkat)

    • Menggunakan fungsi nomor_hari kerja() Diperoleh nilai yang sesuai dengan jumlah hari dalam seminggu yang dimulai pada hari Minggu. Untuk menampilkannya sebagai teks, digunakan array dan dikurangi satu mulai dari indeks nol, Minggu.

    • Untuk melihat tanggal dalam format "lokal" (Spanyol), gunakan fungsi tersebut tanggal_manusia(), yang mengembalikan pointer ke string yang tanggalnya diwakili dalam format DD/MM/YYYY, dengan DD adalah hari yang diwakili dengan 2 digit, MM adalah bulan dengan 2 digit dan YYYY adalah tahun dengan 4 digit.

    • Fungsi itu jam_manusia() mengembalikan waktu dalam format jj:mm:ss, dengan hh sebagai jam (dalam format 24) diwakili dengan 2 digit, mm sebagai menit dengan 2 digit dan ss sebagai detik dengan 2 digit.

    • Untuk dengan mudah menggunakan tanggal dan waktu file log fungsinya telah diprogram kompak_tanggal_waktu(), yang memberikan nilai tanggal dan waktu dalam format YYMMDDhhmmss dengan AA sebagai tahun yang diwakili dengan 2 digit terakhir, MM bulan dengan 2 digit, DD hari dengan 2 digit, hh jam (dalam format 24) dengan 2 digit, mm menit dengan 2 digit dan ss detik dengan 2 digit. Format ini, meskipun berbentuk teks, hanya memakan sedikit ruang dan memungkinkan pengurutan berdasarkan abjad dengan sangat sederhana.

    • Fungsi itu tanggal_waktu_MySQL() berfungsi untuk menyajikan tanggal dan waktu dalam format yang digunakan oleh pengelola database MySQL (atau yang baru dan lebih bebas MariaDB) YYYY-MM-DD jj:mm:ss, dimana YYYY adalah tahun yang diwakili dengan 4 digit, MM adalah bulan dengan 2 digit, DD adalah hari dengan 2 digit, hh adalah jam (dalam format 24) dengan 2 digit , mm adalah menit dengan 2 digit dan detik dengan 2 digit.

    Meskipun ada banyak format untuk merepresentasikan tanggal dan waktu, format yang Anda perlukan mungkin tidak ada, namun tentunya berdasarkan salah satu format yang sudah ada dan menggunakannya sebagai contoh, akan mudah untuk menambahkan metode baru sesuai dengan spesifikasi lainnya. Tolong, jika Anda menambahkan fungsi baru, bagikan kodenya (lepaskan!) dan jelaskan kepada kami cara kerjanya, sehingga kami dapat membuat perpustakaan menjadi lebih baik sedikit demi sedikit. Terima kasih!

    Output dari contoh program di atas bisa seperti yang ditunjukkan pada gambar berikut: daftar 7 nilai (detik, menit, jam, hari dalam seminggu, hari dalam bulan, bulan dan tahun) tanggal dan waktu yang dinyatakan dalam cara "manusia" (menurut gaya Spanyol) waktu sebagai bilangan bulat dalam format jam empat digit, tanggal dan waktu dalam format database MySQL, tanggal dan waktu dalam format ringkas (untuk log) dan suhu internal DS3231.

    Pustaka keluaran konsol Arduino jam waktu nyata (RTC) dan suhu DS3231 melalui bus I2C

    Anda mungkin melewatkannya