Isi kandungan:

Pendekatan Yang Berbeza Dengan Nextion: 3 Langkah
Pendekatan Yang Berbeza Dengan Nextion: 3 Langkah

Video: Pendekatan Yang Berbeza Dengan Nextion: 3 Langkah

Video: Pendekatan Yang Berbeza Dengan Nextion: 3 Langkah
Video: #170 Enhanced Nextion HMI Tutorial incl. ESP32, ESP8266 and Arduino support 2024, Julai
Anonim
Pendekatan Yang Berbeza Dengan Nextion
Pendekatan Yang Berbeza Dengan Nextion

Dalam projek pertama saya dengan Arduino Nano yang disambungkan ke paparan sentuhan Nextion, saya telah menulis satu siri arahan yang panjang untuk disampaikan kepada Nextion melalui port bersiri dan ini tidak dapat dielakkan jika kita perlu menghantar arahan yang benar-benar bebas, pada saat-saat rawak.

Saya juga harus mengakui bahawa saya menghabiskan lebih banyak masa dalam 'berperang' dengan Perpustakaan daripada perkara lain. Oleh itu, saya secara beransur-ansur bekerja sepenuhnya tanpa perpustakaan ITEAD yang berat.

Saya segera menyedari bahawa saya tidak perlu mendesak untuk menyampaikan kepada Nextion perubahan pada sifat objek visual, tetapi saya lebih suka menunggu sehingga saya mengumpulkannya dan menghantarnya ke Nextion secara keseluruhan, apabila saya mendapat kumpulan yang lengkap.

Saya akan cuba menjelaskan diri saya dengan lebih baik.

Apabila dalam projek saya terdiri daripada 16 petunjuk teks, saya mahu menghidupkan atau mematikan beberapa daripadanya, saya melakukannya dengan memanfaatkan atribut 'bco' yang untuk menghidupkan, melewati (misalnya) dari kelabu gelap ke putih (jika di segi empat hitam), dan sebaliknya untuk mematikan.

Dalam aplikasi saya, saya merasa tidak berguna untuk menghantar 16 arahan ke port bersiri dalam 16 momen yang berbeza, satu untuk setiap 'bco' dari 16 isyarat.

Saya lebih suka Arduino mengumpulkan isyarat mana yang mesti dihidupkan (TINGGI) dan mana yang mesti 'mati' (RENDAH) dalam daftar 16-bit, di mana setiap bit sesuai dengan salah satu daripada 16 isyarat Nextion.

Setelah mengemas kini setiap bit daftar, saya mengirimkan nilainya ke Nextion, satu mesej yang mengandungi maklumat kolektif mengenai 16 elemen.

Dengan cara ini komunikasi dari Arduino dan Nextion sangat berkurang kerana dalam satu pesan yang dihantar pada siri ke Nextion, maklumat dikumpulkan yang sebaliknya memerlukan penghantaran 16 mesej.

Benar, tidak selalu diperlukan untuk mengemas kini semua laporan, tetapi saya yakin bahawa jika tidak, akan membuang lebih banyak masa.

Secara semula jadi setiap bit yang terdapat dalam bilangan bulat yang diterima oleh Arduino, paparan Nextion harus mengaitkannya dengan atribut yang diinginkan.

Ini bermaksud bahawa kod mesti ditulis dalam paparan Nextion, tetapi tidak perlu takut: jika saya berjaya…

Kemudian ada kelebihan berganda: Arduino akan mempunyai kod yang lebih ringan dan akan kurang terlibat dalam komunikasi bersiri dengan Nextion.

Nextion setelah menerima data dalam satu mesej, akan menggunakannya lebih cepat daripada jika menunggu 16 mesej. Oleh itu, menghidupkan atau mematikan 16 isyarat akan hampir seiring dengan mod yang paling biasa, di mana masa untuk sebilangan mesej yang tidak diketahui berlalu antara pelaksanaan perintah untuk isyarat pertama dan perintah untuk isyarat terakhir.

Dalam paparan Nextion saya membuat sistem ini dengan cara klasik, iaitu memutar daftar 'topeng' setiap kali membolehkan anda memeriksa setiap 16 bit. Apabila bit yang diperiksa adalah TINGGI, isyarat yang berkaitan dengan bit itu menyala pada paparan dan mati apabila bitnya RENDAH.

Aspek 'negatif' dari sistem ini adalah bahawa kod yang ditulis dalam paparan Nextion kurang senang didokumentasikan daripada kod Arduino. Selanjutnya, kod Nextion berisiko tersebar di pelbagai objek. Berhati-hati mesti mendokumentasikan apa yang anda lakukan dengan segera.

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

Sintaks bahasa Nextion mempunyai banyak batasan, tetapi ia berjaya mengatasinya atau mengatasinya dengan sedikit usaha dan berusaha melihat masalah dari sudut pandang yang juga tidak biasa.

Sebagai contoh, saya melaporkan cara Arduino menulis daftar yang akan dihantar, ditulis oleh saya dengan cara paling asas yang mungkin.

Langkah 1: Bagaimana Daftar Dihantar

Dalam fail ArduinoCode. PDF saya menunjukkan semua lakaran saya. (Membaca kod di sini tidak begitu jelas)

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

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

batal NexUpd ()

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

{

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

SRSerial.print (InpReg); // hantarkan 16 bit yang dikumpulkan ke Paparan Nextion

SRSerial.print (InpReg); // hantarkan 16 bit yang dikumpulkan ke Paparan Nextion

SRSerial.write (terminal); // 255

SRSerial.write (terminal); // 255

SRSerial.write (terminal); // 255

}

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

Langkah 2:.. Tetapi Sebelum…

.. Tetapi sebelum …
.. Tetapi sebelum …

Sudah tentu kodnya bermula dengan semua pernyataan dan penyediaan ().

Input INPUT_PULLUP, jadi suis input biasanya terbuka dan ketika ditutup, mereka menerapkan GND ke input koresponden.

(Ini adalah Instructable pertama saya dan saya minta maaf untuk menunjukkan kod saya dengan cara yang tidak baik ini. Sila muat turun fail ArduinoCode. PDF bahawa sangat jelas.

Izinkan saya membincangkannya lebih lanjut

Saya telah mengembangkan cara saya sendiri untuk 'memberitahu' kepada paparan Nextion apa yang mesti dilakukannya. Biasanya MCU (Arduino dalam kes saya) menghantar mesej untuk setiap variasi untuk diterapkan pada atribut mana-mana objek tunggal. Kaedah ini membuang banyak masa untuk melakukan perkara yang tidak selalu mendesak untuk memuat terus Jalur Bersiri. Saya merasa lebih senang bahawa Arduino mengumpulkan menjadi 16 bit mendaftarkan maklumat mengenai atribut yang berbeza-beza di Nextion. Kira-kira setiap 500 mS, Arduino saya menghantar kepada Nextion satu mesej yang mengandungi 16 bit yang terdapat dalam setiap daftar pada masa itu. Jelas di Nextion kita memerlukan kod yang mengendalikan apa yang mesti dilaksanakan. Pengagihan tugas ini (dan kodnya) memungkinkan mendapat banyak kelebihan lain. Contohnya, fikirkan bagaimana menjadikan cahaya berkedip! Dengan pendekatan saya mudah: masukkan sedikit ke dalam daftar Arduino dan hantarkan ke Nextion. Daftar berkembar Nextion dapat dikemas kini dari Arduino sangat jarang, kerana frekuensi berkedip itu tidak bergantung pada komunikasi; kekerapan berkelip bergantung dari objek Pemasa ke Nextion dan dapat berjalan dengan pangkalan waktu minimum hampir 50 mS. Oleh itu, dengan kaedah saya, kita dapat mengedipkan cahaya di Nextion pada frekuensi yang agak tinggi (misalkan 2 Hz), walaupun Arduino saya menghantar mesej setiap 10 saat, hanya untuk contoh yang ekstrem. Ini dapat menunjukkan masalah yang berlawanan: bagaimana melakukan jika Komunikasi gagal? Ini bukan objektif perbincangan ini, tetapi saya telah menyelesaikan masalah ini dengan sejenis Watch Dog: satu di dalam Kod Arduino, yang lain ke dalam kod Nextion.

Berkedip diatur oleh kod Nextion, di mana setiap cahaya mengikuti peraturannya yang betul: ON / OFF atau HIJAU / MERAH atau juga mengubah yang tertulis di dalamnya (atau lain-lain lagi). Saya dapat memberitahu beberapa perkara lain mengenai projek saya tetapi saya lebih suka menunggu soalan anda, sebelum menambahkan terlalu banyak perkataan yang tidak begitu mudah untuk saya terjemahkan seperti yang saya mahukan.

Langkah 3: Mengedit Objek Nextion

Mengedit Objek Nextion
Mengedit Objek Nextion

Berikut adalah bahagian kod yang saya tulis dengan Nextion Editor pada objek tm0.

Kita tidak dapat mengetahui bahawa dengan 16 bit yang diterima dari Arduino, paparan Nextion tidak hanya menghidupkan dan mematikan isyarat. Buat masa ini saya menghilangkan penjelasan agar tidak menyukarkan pemahaman.

Saya seorang pemula dan jadi lebih baik memuat turun kod Nextion. PDF daripada membaca kod yang keliru di sini. (Maaf, ini adalah arahan pertama saya)

Sekiranya anda mahu, anda boleh memuat turun kod lengkap "HMI" untuk ini aplikasi saya. Nama fail kod ini ialah POW1225. HMI. Ia boleh masuk ke paparan Nextion NX4024T032 anda tetapi untuk memahaminya anda harus memasukkan banyak objek dan melihat kod di dalam tetingkap kecil editor. Jadi saya rasa itu akan lebih senang untuk melihat kod utama, yang ditulis dalam fail Nextion code. PDF

// Projek POW1225. HMI 15 Mei 2019

// akumulator vACC (va0)

// vINP (va1) Daftar Input xxxx xxxx xxxx xxxx

tm0.en = 1 // tm0 Mula

tm0.tim = 50 // tm0 Pangkalan masa 50 mS

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

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

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

{

tRDY.pco = BIRU // MERAH

} lain

{

tRDY.pco = GREY // kelabu gelap

}

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

vACC.val = vINP.val & 0x0002

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

{

tPWR.pco = HIJAU // cahaya HIJAU

tPON.txt = "ON" // AKTIF

tPON.pco = HIJAU // terang HIJAU

} lain

{

tPWR.pco = GRAY // gelap GREY 33808

tPON.txt = "OFF" // MATI

tPON.pco = GRAY // gelap GREY 33808

}

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

vACC.val = vINP.val & 0x0004

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

{

tDRV.pco = BIRU // BIRU

tDRY.pco = BIRU // BIRU

} lain

{

tDRV.pco = GRAY // gelap GREY 33808

tDRY.pco = GRAY // gelap GREY 33808

}

// JALANKAN ***************

vACC.val = vINP.val & 0x0018

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

{

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

tRUN.pco = HITAM // pada HITAM

tDIR.bco = MERAH // DIR MERAH

tDIR.pco = HITAM // pada HITAM

} lain

{

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

tRUN.pco = GRAY // pada GREY

tDIR.bco = 32768 // DIR gelap HIJAU 1024

tDIR.pco = GREY // DIR GREY

tDIR.txt = "---" // HENTI

}

// MENINGGALKAN **************

vACC.val = vINP.val & 0x0008

if (vACC.val! = 0) // Uji Jalankan Kanan

{

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

}

// KANAN *************

vACC.val = vINP.val & 0x0010

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

{

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

}

// KEDUA **************

vACC.val = vINP.val & 0x0018

if (vACC.val == 24) // Uji RUN kedua-duanya

{

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

}

// UJIAN **************

vACC.val = vINP.val & 0x0020

jika (vACC.val! = 0) // UJIAN UJIAN

{

tTEST.pco = PUTIH // PUTIH

tsw tTEST, 1 // Dayakan peristiwa Sentuhan

} lain

{

tTEST.pco = GRAY // gelap GREY 33808

tsw tTEST, 0 // Lumpuhkan acara Sentuhan

}

// FAULT *************

vACC.val = vINP.val & 0x0040

jika (vACC.val == 0) // UJIAN KESALAHAN

{

tFLT.pco = GREY // FAULT tidak hadir

}

jika (vACC.val! = 0)

{

tFLT.pco = KUNING // FAULT hadir

}

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

vACC.val = vINP.val & 0x0080

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

{

tEME.pco = GREY // EME tidak hadir

}

jika (vACC.val! = 0)

{

tEME.pco = MERAH // EME hadir

}

}

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

vACC.val = vINP.val & 0x0100

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

{

tFER.pco = HITAM // HITAM

tFER.bco = HIJAU // HIJAU

} lain

{

tFER.pco = GREY // GREY

tFER.bco = 672 // gelap HIJAU

}

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

Ucapan terima kasih

Saya ingin memberikan penghargaan kepada Gideon Rossouwv kerana dengan membaca Instruksinya, saya telah memperoleh sebahagian daripada objektif saya dengan cepat. Terima kasih puan. Gideon Rossouwv

Disyorkan: