İçindekiler:

Bir Arduino'dan Diğerine Sayısal Veri Gönderme: 16 Adım
Bir Arduino'dan Diğerine Sayısal Veri Gönderme: 16 Adım

Video: Bir Arduino'dan Diğerine Sayısal Veri Gönderme: 16 Adım

Video: Bir Arduino'dan Diğerine Sayısal Veri Gönderme: 16 Adım
Video: arduino, eeprom veri okuma ve yazma işlemleri 2024, Temmuz
Anonim
Bir Arduino'dan Diğerine Sayısal Veri Gönderme
Bir Arduino'dan Diğerine Sayısal Veri Gönderme

Tanıtım

David Palmer, CDIO Tech. Aston Üniversitesi'nde.

Hiç bir Arduino'dan diğerine bazı numaralar göndermeniz gerekti mi? Bu Eğitilebilir Tablo nasıl olduğunu gösterir.

Seri Monitör terminaline göndermek için basitçe bir dizi sayı yazarak çalıştığını kolayca test edebilir ve ikinci Arduino'ya bağlı ikinci bir Seri monitörde sayıların geri geldiğini görebilirsiniz. Bir Bluetooth bağlantısı bile kullanabilirsiniz.

Bu ne yapar

İki Arduino programının (Arduino konuşmasında eskizler) geliştirilmesi gerekiyor, biri Arduino Seri Monitörü çalıştıran ana bilgisayara bağlanmak için bir Master program, biri Master'dan seri mesajı almak, kodunu çözmek ve geri göndermek için Slave olarak hareket etmek için. Köle, isteğe bağlı olarak, ilgilendiği sayıları ikinci bir IDE'nin Seri Monitöründe görüntüleyebilir - bunu kullanmak istemeniz durumunda. İlk etapta işlerin yürümesine yardımcı olabilir ve programlarda kendi gereksinimlerinize uyacak şekilde herhangi bir değişiklik yapmaya karar verirseniz size yardımcı olabilir.

Teçhizat

  • 2 Arduino'nun
  • 2 USB kablosu
  • yama telleri (gerektiği gibi)
  • Arduino IDE yüklü 1 PC/dizüstü bilgisayar (Arduino.cc web sitesinden ücretsiz olarak indirilebilir)

1. Adım: Kurulum - Önce Donanımınızı Kurun

Kurulum - Önce Donanımınızı Kurun
Kurulum - Önce Donanımınızı Kurun
Kurulum - Önce Donanımınızı Kurun
Kurulum - Önce Donanımınızı Kurun

2 Arduino'yu bilgisayarınızdaki 2 USB bağlantı noktasına takın.

İpucu, bunları M ve S (ana ve bağımlı) olarak etiketlemek iyi bir fikirdir, böylece daha sonra bir karmaşaya girmezsiniz (buradaki 2 fotoğrafta gösterildiği gibi).

2. Adım: Kurulum - Ekranınızı Ayarlayın

Kurulum - Ekranınızı Ayarlayın
Kurulum - Ekranınızı Ayarlayın

En iyisi, ekranınızı

  • Soldaki Master programla yüklenen IDE ve
  • Sağdaki Köle ile.

Buradaki ekran görüntüsünde gösterildiği gibi Maser ve Slave için Seri Monitörleri solda ve sağda tutun.

Adım 3: Ana Ucu Ayarlayın, Ardından Birlikte Bağlayın - Bölüm 1

Ana Ucu Ayarlayın, Ardından Birlikte Bağlayın - Bölüm 1
Ana Ucu Ayarlayın, Ardından Birlikte Bağlayın - Bölüm 1

Ana Son Seri Monitörünüzü iki numara gönderecek şekilde ayarladığınızda, burada gördüğünüz gibi her zaman başlangıç ve bitiş, sınırlayıcı karakterleri ve virgül ayırıcı karakteri kullanmalısınız.

Şimdi 2 Arduino'yu seri olarak birbirine bağlamanız gerekiyor. Bu, iki yama teli ile yapılır.

yeşil ve sarı kullandım

  • Önce sarıyı alın, bu bir Arduino'da D6'ya ve ikincisinde D7'ye takılmalıdır.
  • Ardından yeşil kablonun tersi, birincide D7 ve ikinci Arduino'da D6.

Alternatif olarak, bir çift Bluetooth modülü gibi - HC-05'ler gibi - bir şeyiniz varsa, bunlar da size yukarıdaki kablolarla tam olarak aynı etkiyi vermek için çalışacaktır.

Adım 4: Ana Ucu Ayarlayın, Ardından Birlikte Bağlayın - Bölüm 2

Ana Ucu Ayarlayın, Ardından Birlikte Bağlayın - Bölüm 2
Ana Ucu Ayarlayın, Ardından Birlikte Bağlayın - Bölüm 2
Ana Ucu Ayarlayın, Ardından Birlikte Bağlayın - Bölüm 2
Ana Ucu Ayarlayın, Ardından Birlikte Bağlayın - Bölüm 2

Software Serial kitaplığından yararlanıyoruz. Daha fazla bilgiye bu bağlantıdan ulaşabilirsiniz

Programlardan herhangi birinin 7. satırında çağrıldığını görebilirsiniz. Dijital 7 ve 6 pinlerini TX ve RX (gönderme ve alma) olarak yapılandırır. Veriler Master Arduino'dan yeşil kablo üzerinden Slave'e bu şekilde gidecek ve ikinci Arduino'daki Slave programı işini bitirdiğinde sarı kablodan geri dönecek. Aynı resmin altında (Seri Monitör penceresinde) ilettiğimiz verilerin burada açıklanan döngüyü başarıyla geçtiğini ve tamsayı çifti güzelce ayrılmış olarak PC'ye geri döndüğünü görebilirsiniz.

Adım 5: Eskizlere / Programlara Genel Bakış - Programın Yapısı

Eskizlere / Programlara Genel Bakış - Programın Yapısı
Eskizlere / Programlara Genel Bakış - Programın Yapısı
Eskizlere / Programlara Genel Bakış - Programın Yapısı
Eskizlere / Programlara Genel Bakış - Programın Yapısı

Düzen Tüm Arduino eskizlerinde olduğu gibi 3 temel parça vardır:

  • Beyannameler
  • Kurulum
  • ana Döngü

Sık sık olduğu gibi, burada 'Fonksiyonlar'ın eklenmesi olan 4. bölümden faydalandık. İşlevleri kullanmaya aşina değilseniz, "Arduino işlevleri" için Google'a başvurabilirsiniz ve bu bağlantıdaki örnek gibi açıklama sitelerini bulacaksınız: www.tutorialspoint.com/arduino/arduino_functions…..

Programı daha yönetilebilir bloklara ayırmak için sekmeleri de kullandık.

Kullandığımız üç blok, yukarıdaki IDE pencerelerinin her bir resminin üstünde görülebilir:

  • simpleRxTx0330Master
  • yaygın
  • notlar

Bunlar, Slave programının dosyalarının bu Windows Gezgini görünümünde görebileceğiniz gibi, aslında programın klasörü içindeki ayrı dosyalardır.

Bunu yapmamızın çok iyi bir nedeni var.

  • Programı oluştururken, Master programının çoğunun Köle ile aynı olduğunu fark ettik.
  • Tüm ortak parçaları bir sekmeye çektik, bu nedenle "ortak" olarak adlandırdık ve sonra bir parçanın hatalarını her ayıkladığımızda (test ettik ve iyi çalıştığından memnun kaldık) tüm sekmeyi kopyalayıp yapıştırdık. Master'dan Slave'e veya tam tersi.
  • Tasarım genel olduğu için notlar sekmeleri de aynı olur.

Fonksiyonların hiçbiri kurulumdan çağrılmaz, hepsi döngüden çağrılır, bu yüzden onları kurulumdan sonra ama döngüden önce yarattık.

Adım 6: Yukarıdan Aşağıya Tasarım

Yapmak istediğiniz şeyin tanımıyla başlayarak eskizinizi tasarlamak iyi bir fikirdir.

Buna sahip olduğunuzda, taslağı bu şeyleri yapmaya başlayabilirsiniz. Genel olarak, henüz nasıl yapacağınızı bilmediğiniz bir ayrıntı varsa, onu bir işlev yapın ve işlevin oluşturulmasını sonraya bırakın.

Bu, CDIO olarak adlandırılan birçok Üniversitede öğretilen iyi tasarım felsefesini takip eder (Bunu zaten bilmiyorsanız, Google'da bulabilir ve açıklayacak siteler bulabilirsiniz: https://www.cdio.org/s.) Bu temelde şunu söylüyor: Konsepti netleştirmeden Tasarıma başlamayın. Tasarımı netleştirmeden Uygulamaya başlamayın. Uygulamayı netleştirmeden önce Çalışmasını beklemeyin. Önce C, sonra D, I ve O. Sonraki her aşamada yineleme yaparsınız (döngü(ler)de geri dönersiniz), bu nedenle ilk Tasarım döngünüzden memnun kaldığınızda geri dönün ve Konsept ile hala uyuşup uyuşmadığını kontrol edin ve güncelleyin Gerekirse C. Ve böyle devam eder, yani Çalıştırma'ya geldiğinizde bile, en üste geri dönün ve tekrar C'nin şimdi nasıl göründüğüne bakın, sonra D ve I ve hepsini yapın ve kontrol edin. gerektiği gibi değişir. Programlama çizimleri ile bu, Yukarıdan Aşağıya tasarım yaparsanız aynı şekilde çalışır.

Adım 7: Konsept ve Tasarım - Bölüm 1

Konsept ve Tasarım - Bölüm 1
Konsept ve Tasarım - Bölüm 1
Konsept ve Tasarım - Bölüm 1
Konsept ve Tasarım - Bölüm 1

Buradaki Konsept, 'notlar' sekmesinde belirtilen ana hat gereksinimlerine benziyor.

Tasarım, notlar sekmesiyle eşleşen ve bu şekilde gördüğünüz gibi görünen döngünün erken bir sürümü gibi görünebilir.

İlk önce yorumları döngünün başına kopyalayarak CTRL-C ile nasıl başlayacağımı görün ve ardından bu şeyleri yapacak komutlarla boşlukları doldurmaya başlayın.

Bu aslında şekildeki ekranın alt kısmında görebileceğiniz gibi Tamam derler. Bu, CDIO'nun D aşamasından I'e kadar uzanıyor ve biz kodu geliştirirken bu D-I döngüsünde ilerlemeye devam etmek iyi bir fikir.

Şimdi bir sonraki aşamaya geçme zamanı, orada yapacağımızı söyleyen bir yorum var: //donanım USB'sinden bir şey alacağız, sonra bunu yazılım seri kanalına ileteceğiz. Bunu gerçekleştirmek için bu kodu yazıyoruz - 133'den 138'e kadar olan satırlar burada sarı vurgulayıcıyla gösteriliyor

Adım 8: Konsept ve Tasarım - Bölüm 2

Konsept ve Tasarım - Bölüm 2
Konsept ve Tasarım - Bölüm 2
Konsept ve Tasarım - Bölüm 2
Konsept ve Tasarım - Bölüm 2

Burada tanıttığımız ilk iki işlev (recv() ve tran(), donanım bağlantı noktasından alma ve yazılım bağlantı noktasına gönderme - dolayısıyla onları gösterilen ' hw ' veya ' sw ' parametreleriyle çağırmak içindir.

Bunlara ek olarak, newData adlı global bir değişken üzerinde bir test ekledik. Bu, " void recv(); " fonksiyonunun içine koyacağımız bir bayraktır. Bir mesaj alındığında bu değişken false'tan true'ya işaretlenir. Bunu, sadece 134. satırda bir mesaj alınmışsa (flag ==true) iletmek için yapıyoruz. Ve mesajımızı 'iş bitti' ilettiğimizde, 137. satırda bayrağı tekrar false olarak temizliyoruz.

Yine derlemeyi (D'den I'ye) kontrol edebiliriz ve bu sefer bir 'bildirilmemiş' hata mesajımız var (gösterilmiştir). Bu bize recv(); işlev. Bunu daha sonra yapmayı planlıyoruz, bu yüzden şimdilik temiz bir derleme elde etmemize izin vermek için aşağıda gösterildiği gibi kukla veya yer tutucu bir işlev oluşturmamız gerekiyor.

Yine derlemeyi (D'den I'ye) kontrol edebiliriz ve bu sefer tran() için başka bir 'bildirilmemiş' hata mesajımız var; işlev. Bu, benzer bir saplama oluşturmaya ihtiyaç duyar. Yine derlemeyi (D'den I'ye) kontrol edebiliriz ve bu sefer bunun mükemmel çalıştığını bulacağız; Şimdiye kadar, çok iyi.

Adım 9: Ana Döngüyü Bitirin: A) USB'den Alma, B) Slave Arduino'dan Alma

Ana Döngüyü Bitirin: A) USB'den Alma, B) Slave Arduino'dan Alma
Ana Döngüyü Bitirin: A) USB'den Alma, B) Slave Arduino'dan Alma
Ana Döngüyü Bitirin: A) USB'den Alma, B) Slave Arduino'dan Alma
Ana Döngüyü Bitirin: A) USB'den Alma, B) Slave Arduino'dan Alma

Bu bölümü bitirmek için eklediğimiz son bir parça var, o da hata ayıklama kodu eklemek.

Burada ne yaptığımızı ve nedenini anlamak için atıfta bulunulabilecek hata ayıklama eskizleri hakkında başka bir Eğitilebilirlik var. "Arduino eskizleri çalışana kadar nasıl oluşturulur ve test edilir" Talimatına bakın

Bu nedenle, bu hata ayıklama satırları [136-139 gösterilmiştir], ana döngüde bir sonraki eklenir ve bakın, hata ayıklama değişkenini true ve Derleme (I) yaparak Master sonunda test edebilirsiniz. bir Arduino bağlayıp Upload edebilirsiniz, Seri Monitörü açın ve Seri Monitöre geri gelenlerin burada gösterildiği gibi olup olmadığına bakın ("DEBUG MODE" mesajının eklendiğini görüyor musunuz?)

Adım 10: Slave Arduino'daki Verilerin Alınması ve İşlenmesi

Slave Arduino'daki Verileri Alma ve İşleme
Slave Arduino'daki Verileri Alma ve İşleme
Slave Arduino'daki Verileri Alma ve İşleme
Slave Arduino'daki Verileri Alma ve İşleme

Slave Arduino'dan Alma

İkinci kanal için gerekli kodu ana döngüye, yazılım seri alıcısına gösterildiği gibi ekleyin - satırlar 149 ila 155.

Yapının, Master davası için yukarıda yazdıklarımıza gevşek bir şekilde dayandığını görebiliyor musunuz?

Ayrıca bir derleyici hatası aldığımızı göreceksiniz, başka bir bildirilmemiş fonksiyon - bu sefer parseData(); - bu yüzden hatasız bir test derlemesi çalıştırmadan önce bunun için de bir saplama yapmamız gerekiyor.

Slave Arduino'daki verileri işleme

Arduino için gerekli ana döngü kodunu, gösterildiği gibi bir Slave cihazı olarak yapılandırılmışsa ekleyin - satır 163 ila 174. Yapısının ilk kanalınkine çok benzer olduğunu görebiliyor musunuz?

Ve bu sefer kesinlikle iyi derlendiğini bulmalısın.

Adım 11: Alma İşlevini Yazın

Alma İşlevini Yazın
Alma İşlevini Yazın

Alma işlevi - void recv(char from){} - iki ana işe sahiptir.

1 USB kanalından bir dizi karakter almak için ve

2 Arduino'dan Arduino kanalına bir tane almak için.

İlki için Arduino'nun yerleşik donanım UART'ını kullandığı ve ikincisi için standart Arduino Kitaplığı: yazılım UART'ı kullandığı için kullanmamız gerekecek.

Bir işleve kod eklemeye başladığımızda - yalnızca bir saplama yerine bir şeyler yapan bir işlev oluşturmak için - değiştirdiği saplamayı kaldırmayı veya açıklamayı hatırlamamız gerekir. Aksi takdirde bir derleme hatası alırız: 'void lrec(char)'ın yeniden tanımlanması.

Deneyin ve hatayı alın ve ardından ondan kurtulmak için yukarıda önerilen yollardan birini deneyin.

Burada 75 ile 88 arasındaki satırları sarı renkle gösterdiğimize benzeyen bir fonksiyonla başlayın.

Artık koda sahip olmanın Derleme işlemini denemeniz gerekeceğini biliyorsunuz. Size, daha önce sahip olduğumuz gibi, bu kapsamda bildirilmeyen işlev adı türünde bir hata alır. Bu hatayı derlememize izin vermek için başlangıçta başka bir saplamaya ihtiyacımız olacak, bu yüzden önceki gibi bir tane ekleyin ve şimdi hatasız bir derleme alabileceğinizden emin olun.

Şimdi recv() fonksiyonu için yazdığımız koda bir göz atalım.

Oldukça temiz, yukarıda belirtilen fonksiyonun iki parçasını üretmek için 'if' koşulunun kullanımını görebilirsiniz.

'sw' bölümünün içindeki kod ve 'hw' bölümünün içindeki kod aynı formdadır ve onu burada anlatacağım.

Her durumda satır çiftinin ilki bir while döngüsünün başlangıcıdır. while'a aşina değilseniz, açıklama ve örnekler için Arduino.cc/Reference sitesinde bakabilirsiniz. Burada, yerleşik 'Seri' işlevi herhangi bir karakter(ler) almadığı ve newData değişkeni kapatıldığı için (yani, newData == yanlış koşulu doğru olduğu için) 'bekliyoruz'. Bir karakter - veya birden fazla karakter - alınır alınmaz, while bu çiftte ikinci satıra 'düşürecektir'. Bu daha sonra recAstringChar(char) öğesini çağırır; geçerli karakteri işlemek için işlev. Daha sonra bu satır çifti, alınması gereken herhangi bir karakter varken (veya süre boyunca) değişecektir. Bunların hepsi yapıldıktan sonra while durumu sona erer, if veya else sonraki seviyenin bitmesine izin verilir ve sırayla rec(char)'a izin verilir; sona erdirmek için işlev. Böylece arı artık tam bir mesaj almıştır.

Adım 12: Alma Alt işlevini yazın - Bölüm 1

Alma Alt işlevini yazın - Bölüm 1
Alma Alt işlevini yazın - Bölüm 1
Alma Alt işlevini yazın - Bölüm 1
Alma Alt işlevini yazın - Bölüm 1

Şimdi recAstringChar(char) adlı fonksiyonu yazmamız gerekiyor;. Buradaki 50. satıra kadar olan yorumdan, işinin gelen seri mesajın kopyalarıyla iki arabelleği güncellemek olduğunu görüyorsunuz. [Bütün bunları çalıştırmaya çalışırken, öğrendiğim tek şey iki farklı arabelleğe ihtiyacım olduğuydu - ya da en azından bazı sorunları aşmanın en kolay yolu buydu, bu nedenle 2 arabelleğe ihtiyaç duymaya dönüştü, bu yüzden Onları daha yeni yaptım.] Bir arabellek çağırdım: alınanData ve diğerini: alınanChars.

Tamponlar global değişkenlerdir, bu nedenle modül düzeyinde bildirilirler, bkz. ortak sekmenin 9. ve 10. satırları. Bu işlevin içinde bildirilen ve bu nedenle burada 51-54 satırlarında gösterilen yerel kapsamı olan başka değişkenler vardır. Küreseller ve yereller arasındaki farkları açıklamanın yeri burası değil, ancak bununla ilgili daha fazla bilgiyi https://www.arduino.cc/glossary/en/ altında Yerel ve Küresel altında bulabilirsiniz.

Ayrıca veri türleri ve tür değiştiriciler hakkında her şeyi bulabilirsiniz: burada gösterilen https://www.arduino.cc/reference/en/#variables adresinde static, boolean, byte, const, char.

Bu fonksiyondaki ana program akışı, buradaki 56. satırdaki if ve 74. satırdaki karşılık gelen else tarafından kontrol edilir. Bu, iki senaryo ile ilgilidir.

a) Alınan mesaj başladığında [74. satırdan itibaren]. Bu, startMarker tespit edildiğinde olur - bu, ' < ' karakteri olarak tanımlanmıştır, bu yüzden taslağı ne zaman test etsek, dizimize her zaman o karakterle başlarız. Bunu yapmazsak, hiçbir şey alındı olarak işlenmez, sanki 'Seri Monitör' klavye isteminde saçma sapan yazıyormuşuz gibi hepsi yok sayılır.

b) [satır 56 ila 73], her ne olursa olsun diğer tüm karakterleri alır, ancak bunlar yalnızca geçerli bir başlangıç gerçekleştikten sonra karakterlerle ilgilenir (yukarıdaki a'da olduğu gibi bir '>' alındı.)

Bu satırlarda (74'ten 78'e), alınan < ifadesini arabelleklerden birine (alınanVeri[0]) koyduk, ancak diğerine koymadık. Arabellek işaretçisini (değişken: char ndx), ndx++ satırındaki artış sonrası komutu (++) kullanarak bir sonraki yedek arabellek konumunu (alınanData[1]) gösterecek şekilde ayarlıyoruz; ve devam eden bayrağı true olarak ayarladık.

Fonksiyonun bu bölümündeki program akışı, buradaki 57. satırdaki if ve 65. satırdaki karşılık gelen else tarafından kontrol edilir. Bu, iki senaryo ile ilgilidir.

a) Alınan mesaj sona erdiğinde [65. satırdan itibaren]. Bu, endMarker tespit edildiğinde olur - > olarak tanımlanır, bu nedenle taslağımızı test ettiğimizde dizimizi her zaman bu karakterle bitiririz. Bitiş karakteri alındığında olan şeylerden biri, global bayrağın (teknik olarak değişken) newData işlevinin sona ermesiyle birlikte doğru ayarlanmasıdır, böylece alt işlevimizi çağıran işlev (çağıran işlev: recv(char);) geçerli yeni verilerin eksiksiz olarak alındığını 'bilebilir'.

b) [57'den 64'e kadar olan satırlar], her ne olursa olsun diğer tüm karakterleri alır. Onları her iki tamponda da sıralar halinde yoğun bir şekilde park eder.

Adım 13: Alma Alt Fonksiyonunu Yazın - 2. Kısım

Alma Alt işlevini yazın - Bölüm 2
Alma Alt işlevini yazın - Bölüm 2
Alma Alt işlevini yazın - Bölüm 2
Alma Alt işlevini yazın - Bölüm 2

Doldurulduklarında 2 tamponun nasıl göründüğüne dair bir örnek vermek yardımcı olabilir. Enter'ı tuşlayacak olsaydık, arabelleklerde gösterilen karakterler olurdu:

Şimdi, ilk yazdığımız karakterlerle tamamen aynı olan bir arabelleğimiz ve sadece iki değeri ve bir ayırıcı virgül içeren bir arabelleğimiz olduğunu görebilirsiniz. Artık Seri Monitör klavyesinde yazdığımız karakterleri alabilen bazı kodlarımız var, CDIO faz I'den O'ya geçebilir, bazı dizeleri yazarak ve ne olduğunu görebiliriz. Kodu Master Arduino'ya yükleyin, Seri Monitörü açın ve enter gibi geçerli bir şey yazmayı deneyin. Seri Monitör ekranında burada gösterilene benzer bir yankı alıyor musunuz?

Adım 14: İletim ve Ayrıştırma İşlevlerini Yazın

İletim ve Ayrıştırma Fonksiyonlarını Yazın
İletim ve Ayrıştırma Fonksiyonlarını Yazın
İletim ve Ayrıştırma Fonksiyonlarını Yazın
İletim ve Ayrıştırma Fonksiyonlarını Yazın

İletim için ilk

Şimdi bir dizge aldık, iletme fonksiyonunu yazabiliriz: tran(char); sapını değiştirmek için. Bu, Master'dan Slave Arduino'ya bir dizi göndermemize izin verecek, bu nedenle, bu yeni işlevi test etmek için her iki cihazın da takılı ve birbirine bağlı olduğundan emin olun.

Bu işlevi burada 117 ila 133. satırlarda gösterildiği gibi girin. Anlayacağınız gibi, biri USB kanalına iletmek (donanım UART) ve diğeri diğer Arduino'ya iletmek için (yazılım UART) olmak üzere iki bölümden oluşur. Bu hata derlemelidir. -ücretsizdir ve taslağı hemen yükleyebilir ve ne olduğunu görebilirsiniz. Bu sefer göndereceğim. Gösterilen sonucu alıyor musunuz?

Ekran görüntüsü ilginç çünkü Received dizesi… eskisi gibi doğru görünmelidir ve İletilen dize… şimdi doğru görünmelidir. Ancak, Tamsayı dönüştürmenin çalışmadığını unutmayın. Bu işi yapmak için eklenecek biraz daha kod var.

Adım 15: İletim ve Ayrıştırma İşlevlerini Yazın

İletim ve Ayrıştırma Fonksiyonlarını Yazın
İletim ve Ayrıştırma Fonksiyonlarını Yazın
İletim ve Ayrıştırma Fonksiyonlarını Yazın
İletim ve Ayrıştırma Fonksiyonlarını Yazın

Daha sonra Ayrıştırma için

Bu, sayısal kısmi dizeleri almak için alınan dizeyi ayrıştıran ve bunları tamsayı değerlerine dönüştüren bir kod parçasıdır. Bu geçersiz parseData(); ana döngünün işlevi

Ayrıştırma saplamasını 98 - 113 satırlarında gösterilen kodla değiştirin. Yükleyin ve 2 tamsayı değeriyle yaşadığımız sorunun şimdi çözülüp çözülmediğini görelim. Hadi deneyelim.

Evet, çalışıyor, gösterildiği gibi, bulunan tamsayılar 49 ve 98'dir.

Adım 16: Final

Final!
Final!

Bu veriler, PC'den Master'a, slave'e ve Master'dan tekrar PC'ye geri döndü. Common'ın bitmiş versiyonu hem Master hem de slave uçlara yüklendiğinde ve hata ayıklama modu şimdi kapatıldığında, burada gösterildiği gibi her iki uçtan da doğru şekilde alınan verileri görebiliriz.

Önerilen: