Daftar Isi:

Pendekatan Berbeda Dengan Nextion: 3 Langkah
Pendekatan Berbeda Dengan Nextion: 3 Langkah

Video: Pendekatan Berbeda Dengan Nextion: 3 Langkah

Video: Pendekatan Berbeda Dengan Nextion: 3 Langkah
Video: [CILUKBA #75] TUTORIAL MENGIRIM DATA DAN ANGKA DARI MICROCONTROLLER STM32F4 KE NEXTION (HMI) 2024, November
Anonim
Pendekatan Berbeda Dengan Nextion
Pendekatan Berbeda Dengan Nextion

Dalam proyek pertama saya dengan Arduino Nano yang terhubung ke layar sentuh Nextion, saya telah menulis serangkaian perintah yang panjang untuk dikomunikasikan ke Nextion melalui port serial dan ini tidak dapat dihindari jika kita perlu mengirim perintah yang benar-benar independen, pada saat-saat acak.

Saya juga harus mengakui bahwa saya menghabiskan lebih banyak waktu untuk 'bertarung' dengan Perpustakaan daripada yang lainnya. Jadi saya secara bertahap mulai bekerja sepenuhnya tanpa perpustakaan ITEAD yang berat.

Saya segera menyadari bahwa saya tidak memiliki urgensi untuk mengomunikasikan kepada Nextion perubahan atribut objek visual, tetapi saya lebih suka menunggu sampai saya mengumpulkannya dan mengirimkannya ke Nextion secara keseluruhan, ketika saya mendapatkan grup yang lengkap.

Saya akan mencoba menjelaskan diri saya lebih baik.

Ketika dalam proyek saya yang terdiri dari 16 indikasi tekstual, saya ingin mengaktifkan atau menonaktifkan beberapa di antaranya, saya melakukannya dengan memanfaatkan atribut 'bco' yang untuk dinyalakan, melewati (misalnya) dari abu-abu gelap ke putih (jika di persegi panjang hitam), dan sebaliknya untuk mematikan.

Dalam aplikasi saya, saya merasa tidak berguna untuk mengirim 16 perintah ke port serial dalam 16 momen berbeda, satu untuk setiap 'bco' dari 16 sinyal.

Saya lebih suka Arduino mengumpulkan sinyal mana yang harus 'aktif' (TINGGI) dan mana yang harus 'mati' (RENDAH) dalam register 16-bit, di mana setiap bit sesuai dengan salah satu dari 16 pensinyalan Nextion.

Setelah memperbarui setiap bit register, saya mengirimkan nilainya ke Nextion, satu pesan yang berisi informasi kolektif mengenai 16 elemen.

Dengan cara ini komunikasi dari Arduino dan Nextion sangat berkurang karena dalam satu pesan yang ditransmisikan secara serial ke Nextion, informasi dikumpulkan yang jika tidak akan memerlukan transmisi 16 pesan.

Benar, tidak selalu perlu memperbarui semua laporan, tetapi saya yakin bahwa melakukan sebaliknya akan membuang lebih banyak waktu.

Secara alami setiap bit yang terkandung dalam bilangan bulat yang diterima oleh Arduino, tampilan Nextion harus mengaitkannya dengan atribut yang diinginkan.

Ini berarti kode harus ditulis di tampilan Nextion, tetapi tidak perlu takut: jika saya berhasil …

Lalu ada keuntungan ganda: Arduino akan memiliki kode yang lebih ringan dan akan kurang terlibat dalam komunikasi serial dengan Nextion.

Selanjutnya setelah menerima data dalam satu pesan, akan menggunakannya jauh lebih cepat daripada jika harus menunggu 16 pesan. Oleh karena itu, pengaktifan atau penonaktifan 16 sinyal akan hampir bersamaan sehubungan dengan mode yang paling biasa, di mana waktu untuk sejumlah pesan yang tidak diketahui berlalu antara eksekusi perintah untuk pensinyalan pertama dan perintah untuk pensinyalan terakhir.

Pada tampilan Nextion, saya membuat sistem ini dengan cara klasik, yaitu, memutar register 'topeng' setiap kali memungkinkan Anda untuk memeriksa masing-masing dari 16 bit. Ketika bit yang diperiksa TINGGI, sinyal yang terkait dengan bit itu menyala di layar dan mati ketika sedikit LOW.

Aspek 'negatif' dari sistem ini adalah bahwa kode yang ditulis dalam tampilan Nextion kurang nyaman untuk didokumentasikan daripada kode Arduino. Selanjutnya, kode Nextion berisiko tersebar di berbagai objek. Perawatan harus diambil untuk mendokumentasikan apa yang Anda lakukan segera.

Saya menggunakan Notepad ++ untuk menulis kode yang kemudian saya salin ke objek Nextion yang hampir secara eksklusif di tm0 halaman 0.

Sintaks bahasa Nextion memiliki banyak keterbatasan, tetapi ia berhasil mengatasinya atau menyiasatinya dengan sedikit usaha dan mencoba melihat masalah dari sudut pandang yang juga tidak biasa.

Sebagai contoh, saya melaporkan cara Arduino menulis register untuk ditransmisikan, ditulis oleh saya dengan cara yang paling dasar.

Langkah 1: Bagaimana Register Ditransmisikan

Dalam file ArduinoCode. PDF saya menunjukkan semua sketsa saya. (Membaca kode di bawah ini tidak begitu jelas)

Di sini, saya hanya ingin menunjukkan cara Arduino mengirim Register 16 bit ke Nextion, tanpa bantuan perpustakaan, tetapi hanya menghormati sintaks yang dijelaskan oleh ITEAD.

//***************************************************************************************

batal NexUpd()

//***************************************************************************************

{

SRSerial.print("vINP.val=");

SRSerial.print(InpReg); // mengirimkan 16 bit yang dikumpulkan ke Tampilan Berikutnya

SRSerial.print(InpReg); // mengirimkan 16 bit yang dikumpulkan ke Tampilan Berikutnya

SRSerial.write(termin); // 255

SRSerial.write(termin); // 255

SRSerial.write(termin); // 255

}

//***************************************************************************************

Langkah 2:.. Tapi Sebelumnya …

.. Tapi sebelum …
.. Tapi sebelum …

Tentu saja kode dimulai dengan semua deklarasi dan setup().

Inputnya adalah INPUT_PULLUP, jadi sakelar input biasanya terbuka dan ketika ditutup, mereka menerapkan GND ke input koresponden.

(Ini adalah Instruksi pertama saya dan saya minta maaf untuk menunjukkan kepada Anda kode saya dengan cara yang buruk ini. Silakan unduh file ArduinoCode. PDF yang sangat jelas.

Biarkan saya membicarakannya lebih lanjut

Saya telah mengembangkan cara saya sendiri untuk 'memberi tahu' ke tampilan Nextion apa yang harus dilakukan. Biasanya MCU (Arduino dalam kasus saya) mengirim pesan untuk setiap variasi tunggal untuk diterapkan ke atribut objek tunggal. Metode ini membuang banyak waktu untuk melakukan hal-hal yang tidak selalu begitu mendesak untuk memuat terus-menerus Serial Line. Saya merasa lebih nyaman bahwa Arduino mengumpulkan ke dalam register 16 bit informasi tentang atribut yang bervariasi di Nextion. Kira-kira setiap 500 mS, Arduino saya mengirim ke Nextion satu pesan yang berisi 16 bit yang terkandung dalam setiap register sekaligus. Jelas di Nextion kita membutuhkan kode yang menangani apa yang harus dijalankan. Distribusi tugas (dan kode) ini memungkinkan Anda mendapatkan banyak keuntungan lainnya. Misalnya, pikirkan bagaimana membuat kedipan lampu! Dengan pendekatan saya itu mudah: atur sedikit ke register Arduino dan kirimkan ke Nextion. Register kembar Nextion dapat diperbarui dari Arduino sangat jarang, karena frekuensi kedipnya tidak tergantung pada komunikasi; frekuensi kedip tergantung dari objek Timer ke Nextion dan dapat berjalan dengan basis waktu minimum mendekati 50 mS. Jadi dengan metode saya, kita dapat mengedipkan lampu di Nextion pada frekuensi yang relatif tinggi (misalkan 2 Hz), bahkan jika Arduino saya mengirim pesan setiap 10 detik, hanya untuk contoh ekstrem. Ini dapat menyarankan masalah yang berlawanan: bagaimana melakukannya jika Komunikasi gagal? Ini bukan objek diskusi ini, tetapi saya telah menyelesaikan masalah ini dengan semacam Watch Dog: satu di dalam Kode Arduino, yang lain ke dalam kode Nextion.

Kedipan diatur oleh kode Nextion, di mana setiap lampu mengikuti aturannya yang tepat: ON/OFF atau GREEN/RED atau juga mengubah tulisan di dalamnya (atau lainnya). Saya dapat memberi tahu beberapa hal lain tentang proyek saya, tetapi saya lebih suka menunggu pertanyaan Anda, sebelum menambahkan terlalu banyak kata, tidak begitu mudah untuk saya terjemahkan sebaik yang saya inginkan.

Langkah 3: Mengedit Objek Nextion

Mengedit Objek Berikutnya
Mengedit Objek Berikutnya

Berikut adalah bagian dari kode yang saya tulis dengan Nextion Editor pada objek tm0.

Tidak luput dari perhatian kami bahwa dengan 16 bit yang diterima dari Arduino, tampilan Nextion tidak hanya menghidupkan dan mematikan sinyal. Untuk sementara saya hilangkan penjelasannya agar tidak memperumit pemahaman.

Saya seorang pemula dan jadi lebih baik mengunduh halaman kode Nextion. PDF daripada membaca kode yang membingungkan di sini. (Maaf ini adalah instruksi pertama saya)

Jika mau, Anda dapat mengunduh kode lengkap "HMI" untuk aplikasi saya ini. Nama file dari kode ini adalah POW1225. HMI. Itu bisa masuk ke tampilan Nextion Anda NX4024T032 tetapi untuk memahaminya Anda harus berenang ke banyak objek dan melihat kode di dalam jendela kecil editor. Jadi saya pikir akan lebih mudah untuk melihat kode utama, yang ditulis dalam file Nextion code. PDF

// Proyek POW1225. HMI 15 Mei 2019

// vACC (va0) Akumulator

// vINP (va1) Masukan Daftar xxxx xxxx xxxx xxxx

tm0.en=1 // tm0 Mulai

tm0.tim=50 // tm0 Basis waktu 50 mS

// RDY ***************

vACC.val=vINP.val&0x0001 // Topeng

if(vACC.val!=0) // Uji RDY

{

tRDY.pco=BIRU // MERAH

}lain

{

tRDY.pco=ABU-ABU // ABU-ABU Gelap

}

// PWR ***************

vACC.val=vINP.val&0x0002

if(vACC.val!=0) // Uji PWR

{

tPWR.pco=HIJAU // HIJAU muda

tPON.txt="ON" // AKTIF

tPON.pco=HIJAU // HIJAU muda

}lain

{

tPWR.pco=ABU-ABU // ABU-ABU gelap 33808

tPON.txt="MATI" // MATI

tPON.pco=ABU-ABU // ABU-ABU Gelap 33808

}

// KERING ***************

vACC.val=vINP.val&0x0004

if(vACC.val!=0) // Uji KERING

{

tDRV.pco=BIRU // BIRU

tDRY.pco=BIRU // BIRU

}lain

{

tDRV.pco=ABU-ABU // ABU-ABU gelap 33808

tDRY.pco=ABU-ABU // ABU-ABU Gelap 33808

}

// LARI ***************

vACC.val=vINP.val&0x0018

if(vACC.val!=0) // Uji RUN

{

tRUN.bco=MERAH // MARCIA MERAH (aktif)

tRUN.pco=HITAM // di HITAM

tDIR.bco=MERAH // DIR MERAH

tDIR.pco=HITAM // di HITAM

}lain

{

tRUN.bco=32768 // MARCIA GREY (mati)

tRUN.pco=GREY // di GREY

tDIR.bco=32768 // DIR HIJAU gelap 1024

tDIR.pco=GREY // DIR GREY

tDIR.txt="---" // BERHENTI

}

// KIRI **************

vACC.val=vINP.val&0x0008

if(vACC.val!=0) // Uji RUN Right

{

tDIR.txt="<<< " // DIR KIRI

}

// BAIK *************

vACC.val=vINP.val&0x0010

if(vACC.val!=0) // Uji RUN Kiri

{

tDIR.txt=" >>>" // DIR KANAN

}

// KEDUANYA **************

vACC.val=vINP.val&0x0018

if(vACC.val==24) // Uji RUN keduanya

{

tDIR.txt=">>!<<" // DIR KEDUA

}

// TES **************

vACC.val=vINP.val&0x0020

if(vACC.val!=0) // Uji TEST

{

tTEST.pco=PUTIH // PUTIH

tsw tTEST, 1 // Aktifkan acara Sentuh

}lain

{

tTEST.pco=ABU-ABU // ABU-ABU Gelap 33808

tsw tTEST, 0 // Nonaktifkan acara Sentuh

}

// KESALAHAN *************

vACC.val=vINP.val&0x0040

if(vACC.val==0) // Uji KESALAHAN

{

tFLT.pco=ABU-ABU // GAGAL tidak ada

}

jika(vACC.val!=0)

{

tFLT.pco=KUNING // KESALAHAN hadir

}

// EME ***************

vACC.val=vINP.val&0x0080

if(vACC.val==0) // Uji EME

{

tEME.pco=ABU-ABU // EME tidak ada

}

jika(vACC.val!=0)

{

tEME.pco=MERAH // EME hadir

}

}

// FERMO *************

vACC.val=vINP.val&0x0100

if(vACC.val!=0) // Uji FERMO

{

tFER.pco=HITAM // HITAM

tFER.bco=HIJAU // HIJAU

}lain

{

tFER.pco=ABU-ABU // ABU-ABU

tFER.bco=672 // HIJAU gelap

}

// *******************

Pengakuan

Saya ingin memberikan ucapan terima kasih saya kepada Gideon Rossouwv karena membaca Instructables-nya, saya telah memperoleh sebagian dari tujuan saya dengan cepat. Terima kasih tuan. Gideon Rossouwv

Direkomendasikan: