Daftar Isi:

Kirim Data Numerik Dari Satu Arduino ke Arduino Lain: 16 Langkah
Kirim Data Numerik Dari Satu Arduino ke Arduino Lain: 16 Langkah

Video: Kirim Data Numerik Dari Satu Arduino ke Arduino Lain: 16 Langkah

Video: Kirim Data Numerik Dari Satu Arduino ke Arduino Lain: 16 Langkah
Video: đź”´Tutorial I2C Arduino Master dan Arduino Slave - Bahasa Indonesia 2024, Juli
Anonim
Kirim Data Numerik Dari Satu Arduino ke Yang Lain
Kirim Data Numerik Dari Satu Arduino ke Yang Lain

pengantar

oleh David Palmer, CDIO Tech. di Universitas Aston.

Apakah Anda pernah perlu mengirim beberapa nomor dari satu Arduino ke yang lain? Instruksi ini menunjukkan caranya.

Anda dapat dengan mudah mengujinya bekerja hanya dengan mengetikkan serangkaian angka untuk dikirim di terminal Serial Monitor, dan melihat nomor tersebut keluar kembali di monitor Serial kedua yang terhubung ke Arduino kedua. Anda bahkan dapat menggunakan tautan Bluetooth.

Apa fungsinya?

Dua program Arduino (sketsa dalam bahasa Arduino) perlu dikembangkan, satu program Master untuk terhubung ke komputer host yang menjalankan Arduino Serial Monitor, satu lagi untuk bertindak sebagai Slave untuk menerima pesan serial dari Master, memecahkan kodenya dan mengirimkannya kembali. Slave secara opsional mampu menampilkan nomor yang ditanganinya ke Serial Monitor IDE kedua - untuk berjaga-jaga jika Anda ingin menggunakan ini. Ini dapat membantu agar segala sesuatunya berjalan sejak awal, dan membantu Anda jika Anda memutuskan untuk membuat perubahan apa pun pada program agar sesuai dengan kebutuhan Anda sendiri.

Peralatan

  • 2 Arduino
  • 2 kabel USB
  • kabel patch (sesuai kebutuhan)
  • 1 PC/laptop yang dilengkapi dengan Arduino IDE (tersedia sebagai unduhan gratis dari situs web Arduino.cc)

Langkah 1: Menyiapkan - Siapkan Perangkat Keras Anda Terlebih Dahulu

Menyiapkan - Siapkan Perangkat Keras Anda Terlebih Dahulu
Menyiapkan - Siapkan Perangkat Keras Anda Terlebih Dahulu
Menyiapkan - Siapkan Perangkat Keras Anda Terlebih Dahulu
Menyiapkan - Siapkan Perangkat Keras Anda Terlebih Dahulu

Colokkan 2 Arduino ke 2 port USB di komputer Anda.

Tip, sebaiknya beri label sebagai M dan S (master dan slave) sehingga Anda tidak terlibat dalam kekacauan nanti (seperti yang ditunjukkan pada 2 foto di sini.)

Langkah 2: Menyiapkan - Atur Layar Anda

Menyiapkan - Mengatur Layar Anda
Menyiapkan - Mengatur Layar Anda

Hal terbaik adalah mengatur layar Anda sehingga Anda memiliki

  • IDE dimuat dengan program Master di sebelah kiri dan
  • bahwa dengan Budak di sebelah kanan.

Simpan Serial Monitor untuk Maser dan Slave di kiri dan kanan juga seperti yang ditunjukkan pada tangkapan layar di sini.

Langkah 3: Siapkan Akhir Master, Lalu Hubungkan Bersama - Bagian 1

Siapkan Akhir Master, Lalu Hubungkan Bersama - Bagian 1
Siapkan Akhir Master, Lalu Hubungkan Bersama - Bagian 1

Saat Anda mengatur Monitor Serial Akhir Master Anda untuk mengirim dua nomor, Anda harus selalu menggunakan awal, dan akhir, karakter pembatas, dan karakter pemisah koma seperti yang Anda lihat di sini.

Anda sekarang perlu menghubungkan 2 Arduino bersama-sama melalui serial. Ini dilakukan dengan dua kabel patch.

Saya menggunakan hijau dan kuning

  • Ambil yang kuning dulu, ini harus dicolokkan ke D6 di satu Arduino dan D7 di yang kedua
  • Kemudian sebaliknya untuk kabel hijau, D7 pada Arduino pertama dan D6 pada Arduino kedua.

Atau, jika Anda memiliki sesuatu yang tersedia seperti sepasang modul Bluetooth - seperti HC-05 - ini juga akan berfungsi untuk memberi Anda efek yang sama persis seperti kabel di atas.

Langkah 4: Atur Akhir Master, Kemudian Hubungkan Bersama - Bagian 2

Siapkan Akhir Master, Kemudian Hubungkan Bersama - Bagian 2
Siapkan Akhir Master, Kemudian Hubungkan Bersama - Bagian 2
Siapkan Akhir Master, Kemudian Hubungkan Bersama - Bagian 2
Siapkan Akhir Master, Kemudian Hubungkan Bersama - Bagian 2

Kami menggunakan perpustakaan Software Serial. Informasi lebih lanjut tersedia dengan tautan ini

Anda dapat melihatnya dipanggil pada baris 7 dari salah satu program. Ini mengkonfigurasi pin digital 7 dan 6 sebagai TX dan RX (mengirim dan menerima). Ini adalah bagaimana data akan keluar dari Master Arduino melalui kabel hijau ke Slave, dan, ketika program Slave di Arduino kedua telah selesai bekerja, kembali melalui kabel kuning. Di bagian bawah ilustrasi yang sama (di jendela Serial Monitor) Anda dapat melihat data yang kami kirimkan sekarang telah berhasil melewati loop yang dijelaskan di sini, dan kembali ke PC saat pasangan bilangan bulat dipisahkan dengan baik.

Langkah 5: Gambaran Umum Sketsa / Program - Struktur Program

Gambaran Umum Sketsa / Program - Struktur Program
Gambaran Umum Sketsa / Program - Struktur Program
Gambaran Umum Sketsa / Program - Struktur Program
Gambaran Umum Sketsa / Program - Struktur Program

Tata Letak Seperti di semua sketsa Arduino ada 3 bagian dasar:

  • Deklarasi
  • Pengaturan
  • Lingkaran utama

Seperti yang sering terjadi, di sini kami menggunakan bagian ke-4 yang merupakan tambahan dari 'Fungsi'. Jika Anda tidak terbiasa menggunakan Fungsi, Anda dapat mencari "Fungsi Arduino" di Google dan Anda akan menemukan situs penjelasan seperti contoh di tautan ini: www.tutorialspoint.com/arduino/arduino_functions…..

Kami juga telah menggunakan tab untuk memisahkan program menjadi blok yang lebih mudah dikelola.

Tiga blok yang telah kami gunakan dapat dilihat di bagian atas setiap ilustrasi jendela IDE di atas:

  • simpleRxTx0330Master
  • umum
  • catatan

Ini sebenarnya adalah file terpisah di dalam folder program, seperti yang Anda lihat di tampilan Windows Explorer dari file program Slave ini.

Ada alasan yang sangat bagus mengapa kami melakukan ini.

  • Saat kami membangun program, kami menyadari bahwa sebagian besar program untuk Guru sama dengan untuk Budak.
  • Kami akhirnya menarik semua bagian umum ke dalam tab, yang oleh karena itu kami beri nama "umum", dan kemudian setiap kali kami men-debug bagian (mengujinya, dan puas itu berfungsi dengan baik) kami hanya menyalin dan menempelkan seluruh tab itu seberang Master ke Slave, atau sebaliknya.
  • Tab catatan juga identik, karena desainnya generik.

Tak satu pun dari fungsi dipanggil dari setup, mereka semua dipanggil dari loop, jadi kami telah membuatnya setelah setup tetapi sebelum loop.

Langkah 6: Desain Top Down

Sebaiknya desain sketsa Anda dimulai dengan definisi tentang apa yang ingin Anda lakukan.

Setelah Anda memiliki ini, Anda dapat mulai membuat sketsa melakukan hal-hal itu. Umumnya jika ada detail yang belum Anda ketahui caranya, buat saja fungsinya, dan biarkan pembuatan fungsi tersebut sampai nanti.

Ini mengikuti filosofi desain yang baik, diajarkan di banyak Universitas, yang disebut CDIO (Jika Anda belum tahu yang ini, Anda dapat mencarinya di Google, dan menemukan situs untuk menjelaskannya seperti: https://www.cdio.org/s.) Ini pada dasarnya mengatakan: Jangan memulai Desain sebelum Anda mendapatkan Konsep yang jelas. Jangan memulai Implementasi sampai Anda mendapatkan Desain yang jelas. Jangan berharap untuk Beroperasi sebelum Anda mendapatkan Implementasi yang jelas. C terlebih dahulu, lalu D, I, dan O. Pada setiap tahap berikutnya Anda mengulangi (kembali ke loop, jadi setelah Anda puas dengan loop Desain awal Anda kembali dan periksa apakah masih memenuhi Konsep, dan perbarui C jika Anda perlu. Dan seterusnya, jadi bahkan ketika Anda harus Mengoperasikan, kembali ke atas, dan lihat lagi bagaimana tampilan C sekarang, lalu D dan I, dan buat dan periksa semua perubahan seperlunya. Dengan sketsa pemrograman, ini berfungsi sama jika Anda mendesain Top-Down.

Langkah 7: Konsep dan Desain - Bagian 1

Konsep dan Desain - Bagian 1
Konsep dan Desain - Bagian 1
Konsep dan Desain - Bagian 1
Konsep dan Desain - Bagian 1

Konsep di sini terlihat seperti persyaratan garis besar yang dinyatakan dalam tab 'catatan'.

Desainnya bisa terlihat seperti versi awal loop, yang cocok dengan tab catatan dan bisa terlihat seperti yang Anda lihat di gambar ini

Lihat bagaimana saya ingin memulai dengan benar-benar CTRL-C menyalin komentar ke kepala loop terlebih dahulu, dan kemudian mulai mengisi bagian yang kosong dengan perintah yang akan melakukan hal-hal itu.

Ini sebenarnya mengkompilasi OK seperti yang Anda lihat di bagian bawah layar pada gambar. Itu mencapai dari CDIO tahap D ke I, dan saat kami mengembangkan kode, ada baiknya untuk terus memutar loop D-I ini.

Sekarang saatnya untuk turun ke tahap berikutnya, ada komentar di sana yang mengatakan bahwa kita akan: //menerima sesuatu dari perangkat keras USB, kemudian kita akan mengirimkannya ke saluran serial perangkat lunak. Kami menulis kode ini untuk mewujudkannya - baris 133 hingga 138 ditampilkan di sini dengan stabilo kuning

Langkah 8: Konsep dan Desain - Bagian 2

Konsep dan Desain - Bagian 2
Konsep dan Desain - Bagian 2
Konsep dan Desain - Bagian 2
Konsep dan Desain - Bagian 2

Dua fungsi pertama yang kami perkenalkan di sini adalah (recv() dan tran() untuk melakukan penerimaan dari port perangkat keras dan transmisi ke port perangkat lunak - karenanya memanggil mereka dengan parameter ' hw ' atau ' sw ' yang ditampilkan.

Selain itu, kami telah menambahkan tes pada variabel global yang disebut newData. Ini adalah flag yang akan kita atur di dalam fungsi " void recv(); ". Ketika sebuah pesan telah diterima, variabel ini ditandai dari false menjadi true. Kami melakukan ini sehingga kami hanya mengirimkan pesan jika ada yang diterima (flag ==true) di baris 134. Dan setelah kami mengirimkan pesan kami, itu 'pekerjaan selesai' jadi kami menghapus flag kembali ke false lagi di baris 137.

Sekali lagi kita dapat memeriksa kompilasi (D ke I), dan kali ini kita memiliki pesan kesalahan 'tidak dideklarasikan' (ditampilkan). Ini memberitahu kita bahwa kita belum mendeklarasikan recv(); fungsi. Kami berencana untuk melakukan ini nanti, jadi sekarang untuk memungkinkan kami mendapatkan kompilasi yang bersih, kami perlu membuat fungsi dummy atau placeholder, seperti yang ditunjukkan berikutnya.

Sekali lagi kita dapat memeriksa kompilasi (D ke I), dan kali ini kita memiliki pesan kesalahan 'tidak dideklarasikan' lainnya untuk tran(); fungsi. Ini membutuhkan pembuatan rintisan serupa. Sekali lagi kita dapat memeriksa kompilasi (D ke I), dan kali ini kita akan menemukan ini bekerja dengan sempurna; sejauh ini baik.

Langkah 9: Selesaikan Loop Utama: A) Menerima Dari USB, B) Menerima Dari Arduino Budak

Selesaikan Loop Utama: A) Menerima Dari USB, B) Menerima Dari Arduino Budak
Selesaikan Loop Utama: A) Menerima Dari USB, B) Menerima Dari Arduino Budak
Selesaikan Loop Utama: A) Menerima Dari USB, B) Menerima Dari Arduino Budak
Selesaikan Loop Utama: A) Menerima Dari USB, B) Menerima Dari Arduino Budak

Ada satu bagian terakhir yang telah kami tambahkan untuk menyelesaikan bagian ini yaitu menambahkan beberapa kode debug.

Ada Instruksi lain tentang sketsa debug yang dapat dirujuk untuk memahami apa yang telah kita lakukan di sini dan mengapa. Lihat Instruksi "Cara membuat dan menguji sketsa Arduino hingga berfungsi"

Jadi baris debug ini [136-139 diperlihatkan] ditambahkan berikutnya di loop utama dan, lihatlah, Anda dapat mengujinya di akhir Master dengan membuat variabel debug true, dan Compiling (I), maka jika Anda menghubungkan Arduino Anda dapat Upload, buka Serial Monitor dan lihat apakah yang kembali ke Serial Monitor adalah seperti yang ditunjukkan di sini (apakah Anda melihat pesan "DEBUG MODE" ditambahkan?)

Langkah 10: Menerima dan Menangani Data di Slave Arduino

Menerima dan Menangani Data di Arduino Budak
Menerima dan Menangani Data di Arduino Budak
Menerima dan Menangani Data di Arduino Budak
Menerima dan Menangani Data di Arduino Budak

Menerima dari Budak Arduino

Tambahkan kode yang diperlukan untuk saluran kedua ke loop utama, penerima serial perangkat lunak seperti yang ditunjukkan - baris 149 hingga 155.

Dapatkah Anda melihat bahwa strukturnya secara longgar didasarkan pada apa yang kami tulis di atas untuk kasus Master?

Anda juga akan melihat bahwa kami mendapatkan kesalahan kompiler, fungsi lain yang tidak dideklarasikan - kali ini parseData(); - jadi kita perlu membuat rintisan untuk ini juga, sebelum kita dapat menjalankan kompilasi tes bebas kesalahan.

Menangani data di Slave Arduino

Tambahkan kode loop utama yang diperlukan untuk Arduino jika dikonfigurasi sebagai perangkat Slave seperti yang ditunjukkan - baris 163 hingga 174. Dapatkah Anda melihat bahwa strukturnya sangat mirip dengan saluran pertama?

Dan Anda harus menemukan waktu ini dikompilasi dengan baik.

Langkah 11: Tulis Fungsi Terima

Tulis Fungsi Terima
Tulis Fungsi Terima

Fungsi Terima - void recv(char from){} - memiliki dua tugas utama.

1 untuk menerima serangkaian karakter dari saluran USB, dan

2 untuk menerima satu dari saluran Arduino ke Arduino.

Untuk yang pertama kita perlu menggunakan karena menggunakan UART perangkat keras bawaan Arduino, dan yang kedua menggunakan Perpustakaan Arduino standar: perangkat lunak UART.

Ketika kita mulai menambahkan kode ke suatu fungsi - untuk membuat fungsi yang melakukan sesuatu, bukan hanya rintisan - kita perlu ingat untuk menghapus atau mengomentari rintisan yang diganti. Kalau tidak, kita mendapatkan kesalahan kompilasi: refefintion dari 'void lrec(char)'.

Coba dan dapatkan kesalahannya, lalu coba salah satu cara yang disarankan di atas untuk menghilangkannya.

Mulailah dengan fungsi yang terlihat seperti yang kami tunjukkan di sini dari baris 75 hingga 88 dengan warna kuning.

Sekarang Anda tahu bahwa memiliki kode Anda perlu mencoba operasi Kompilasi. Ini memberi Anda kesalahan, seperti yang kami miliki sebelumnya, dari jenis: nama fungsi tidak dideklarasikan dalam cakupan ini. Pada awalnya kita akan membutuhkan rintisan lain untuk membiarkan kita mengkompilasi melewati kesalahan ini, jadi tambahkan satu seperti sebelumnya, dan pastikan Anda sekarang bisa mendapatkan kompilasi tanpa kesalahan.

Sekarang mari kita lihat kode yang telah kita tulis untuk fungsi recv().

Cukup bersih, Anda dapat melihat penggunaan kondisi 'jika' untuk menghasilkan dua bagian dari fungsi tersebut di atas.

Kode di dalam bagian 'sw' dan bagian 'hw' memiliki bentuk yang sama, dan saya akan menjelaskannya di sini.

Yang pertama dari pasangan garis dalam setiap kasus adalah awal dari perulangan while. Jika Anda tidak terbiasa dengan while, Anda dapat mencarinya di situs Arduino.cc/Reference untuk penjelasan dan contohnya. Di sini kita menunggu 'sementara' fungsi 'Serial' inbuilt belum menerima karakter apa pun dan karena variabel newData telah dimatikan (yaitu kondisi newData == false benar). Segera setelah karakter - atau lebih dari satu karakter - diterima while akan 'drop through' ke baris kedua dalam pasangan ini. Itu kemudian akan memanggil recAstringChar(char); berfungsi untuk menangani karakter saat ini. Sepasang garis ini kemudian akan bergantian selama (atau selama) masih ada karakter yang harus diterima. Setelah semuanya selesai, status while berakhir, memungkinkan level if atau else berikutnya ke atas, dan pada gilirannya memungkinkan rec(char); berfungsi untuk mengakhiri. Jadi pesan lengkap sekarang telah diterima.

Langkah 12: Tulis Sub-fungsi Terima - Bagian 1

Tulis Sub-fungsi Terima - Bagian 1
Tulis Sub-fungsi Terima - Bagian 1
Tulis Sub-fungsi Terima - Bagian 1
Tulis Sub-fungsi Terima - Bagian 1

Kita sekarang perlu menulis fungsi yang disebut recAstringChar(char);. Anda melihat dari komentar ke baris 50 di sini di atasnya, bahwa tugasnya adalah memperbarui dua buffer dengan salinan pesan serial yang masuk. [Ternyata ketika saya mencoba untuk menyelesaikan semua ini, satu hal yang saya pelajari adalah bahwa saya membutuhkan dua buffer yang berbeda - atau setidaknya itu adalah cara termudah untuk mengatasi beberapa masalah, maka itu agak berkembang menjadi membutuhkan 2 buffer, jadi Saya baru saja membuatnya.] Saya telah memanggil satu buffer: acceptData, dan yang lainnya: acceptChars.

Buffer adalah variabel global, sehingga dideklarasikan pada level modul, lihat baris 9 dan 10 dari tab umum. Ada variabel lain yang dideklarasikan di dalam fungsi ini yang oleh karena itu memiliki cakupan lokal- yang ditunjukkan pada baris 51-54 di sini. Ini bukan tempat untuk menjelaskan perbedaan antara global dan lokal, tetapi ada info lebih lanjut tentang ini di https://www.arduino.cc/glossary/en/ di bawah Lokal dan Global.

Anda juga dapat mengetahui semua tentang tipe data dan pengubah tipe: static, boolean, byte, const, char di https://www.arduino.cc/reference/en/#variables, ditampilkan di sini.

Alur program utama dalam fungsi ini dikendalikan oleh if pada baris 56 di sini, dan else yang bersesuaian pada baris 74. Ini berhubungan dengan dua skenario

a) [dari baris 74 ke atas] saat pesan yang diterima dimulai. Ini terjadi ketika startMarker terlihat - ini telah didefinisikan sebagai karakter ' < ', itulah sebabnya setiap kali kami menguji sketsa, kami selalu memulai string kami dengan karakter itu. Jika tidak maka tidak ada yang akan diproses sebagai diterima, semuanya akan diabaikan seolah-olah kita mengetik omong kosong pada prompt keyboard ' Serial Monitor '.

b) [baris 56 hingga 73] yang menerima semua karakter lain, apa pun itu, tetapi mereka hanya menangani karakter setelah awal yang valid terjadi (a '>' telah diterima seperti pada a) di atas.)

Di baris ini (dari 74 hingga 78) kami menempatkan yang diterima < ke salah satu buffer (receivedData[0]) tetapi tidak di yang lain. Kami menyesuaikan pointer buffer (variabel: char ndx) untuk menunjuk ke posisi buffer cadangan berikutnya (receivedData[1]) menggunakan perintah post-increment (++) di baris ndx++;, dan kami menyetel flag yang sedang berlangsung ke true.

Alur program di bagian fungsi ini dikendalikan oleh if pada baris 57 di sini, dan else yang bersesuaian pada baris 65. Ini berhubungan dengan dua skenario

a) [dari baris 65 ke atas] saat pesan yang diterima berakhir. Ini terjadi ketika endMarker terlihat - didefinisikan sebagai >, itulah sebabnya setiap kali kami menguji sketsa kami, kami selalu mengakhiri string kami dengan karakter itu. Salah satu hal yang terjadi ketika karakter akhir diterima adalah bahwa flag global (variabel teknis) newData disetel true tepat saat fungsi berakhir, sehingga fungsi yang memanggil sub-fungsi kita (fungsi pemanggilan: recv(char);) dapat 'mengetahui' bahwa data baru yang valid telah diterima lengkap.

b) [baris 57 hingga 64] yang menerima semua karakter lain, apa pun itu. Itu hanya sibuk memarkir mereka dengan rapi di baris di kedua buffer.

Langkah 13: Tulis Sub-fungsi Terima - Bagian 2

Tulis Sub-fungsi Terima - Bagian 2
Tulis Sub-fungsi Terima - Bagian 2
Tulis Sub-fungsi Terima - Bagian 2
Tulis Sub-fungsi Terima - Bagian 2

Mungkin membantu untuk memberikan contoh seperti apa 2 buffer ketika telah diisi. Jika kita memasukkan enter, buffer akan memiliki karakter yang ditampilkan di dalamnya:

Jadi sekarang Anda dapat melihat bahwa kami memiliki satu buffer yang semuanya memiliki karakter yang sama persis seperti yang pertama kali kami ketik, dan satu buffer yang hanya memiliki dua nilai dan koma pemisah. Sekarang kita memiliki beberapa kode yang dapat menerima karakter yang kita ketik di keyboard Serial Monitor, kita dapat berpindah dari CDIO fase I ke O, mengetik beberapa string dan melihat apa yang terjadi. Unggah kode ke Master Arduino, buka Serial Monitor dan coba ketikkan sesuatu yang valid, seperti enter. Apakah Anda menerima gema di layar Serial Monitor seperti yang ditunjukkan di sini?

Langkah 14: Tulis Fungsi Transmit dan Parse

Tulis Fungsi Transmit dan Parse
Tulis Fungsi Transmit dan Parse
Tulis Fungsi Transmit dan Parse
Tulis Fungsi Transmit dan Parse

Pertama untuk Transmisi

Jadi sekarang kita telah menerima sebuah string, kita dapat menulis fungsi transmit: tran(char); untuk mengganti rintisannya. Ini akan memungkinkan kita untuk mengirim string dari Master ke Slave Arduino, jadi pastikan kedua perangkat dicolokkan dan dihubungkan bersama untuk menguji fungsi baru ini.

Masukkan fungsi ini seperti yang ditunjukkan di sini pada baris 117 hingga 133. Seperti yang akan Anda kenali, ia memiliki dua bagian, satu untuk mengirim ke saluran USB (UART perangkat keras) dan satu untuk mengirimkan ke Arduino lain (UART perangkat lunak.) Ini harus mengkompilasi kesalahan -gratis, dan Anda dapat segera mengunggah sketsa dan melihat apa yang terjadi. Kali ini saya akan mengirimkan. Apakah Anda mendapatkan hasil yang ditunjukkan?

Tangkapan layar menarik karena string yang Diterima… akan terlihat benar seperti sebelumnya, dan string yang Ditransmisikan… sekarang akan terlihat benar. Namun perhatikan bahwa konversi Integer belum berfungsi. Masih ada sedikit lagi kode yang harus ditambahkan untuk membuatnya berfungsi.

Langkah 15: Tulis Fungsi Transmit dan Parse

Tulis Fungsi Transmit dan Parse
Tulis Fungsi Transmit dan Parse
Tulis Fungsi Transmit dan Parse
Tulis Fungsi Transmit dan Parse

Kemudian untuk Parse

Ini adalah bagian dari kode yang mem-parsing string yang diterima untuk mengambil string parsial numerik dan mengubahnya menjadi nilai integer. Ini adalah kekosongan parseData(); fungsi loop utama

Ganti rintisan parse dengan kode yang ditunjukkan pada baris 98 - 113. Unggah, dan mari kita lihat apakah masalah yang kita hadapi dengan 2 nilai integer sekarang telah diperbaiki. Mari mencoba.

Ya, itu berhasil, seperti yang ditunjukkan, bilangan bulat yang ditemukan adalah 49 dan 98.

Langkah 16: Akhir

Akhir!
Akhir!

Data ini telah melewati putaran loop dari PC melalui Master melalui slave dan kembali melalui Master lagi ke PC lagi. Dengan versi selesai dari common yang diunggah ke kedua ujung Master dan slave, dan dengan mode debug dimatikan sekarang, kita dapat melihat data yang diterima dengan benar di kedua ujungnya seperti yang ditunjukkan di sini.

Direkomendasikan: