Mündəricat:

Arduino Serial Əlaqəsi: 5 addım
Arduino Serial Əlaqəsi: 5 addım

Video: Arduino Serial Əlaqəsi: 5 addım

Video: Arduino Serial Əlaqəsi: 5 addım
Video: Lesson 05: Introduction to Serial Monitor | Robojax Arduino Step By Step Course 2024, Iyul
Anonim
Arduino Serial Əlaqəsi
Arduino Serial Əlaqəsi

Bir çox Arduino layihəsi bir neçə Arduino arasında məlumat ötürülməsinə əsaslanır.

İstər RC avtomobili, istər RC təyyarəsi quran, istərsə də uzaqdan displeyli bir hava stansiyası hazırlayan bir həvəskar olsanız da, ardıcıl məlumatları bir Arduinodan digərinə etibarlı şəkildə necə köçürməyi bilməlisiniz. Təəssüf ki, həvəskarların öz layihələrində işləyən serial məlumatları əldə etməsi çətindir, çünki serial məlumatları bayt axını olaraq göndərilir.

Bayt axını içərisində hər hansı bir kontekst olmadan, məlumatları şərh etmək demək olar ki, mümkün deyil. Veriləri şərh edə bilmədən Arduinosunuz etibarlı şəkildə əlaqə qura bilməyəcək. Əsas odur ki, bu kontekst məlumatlarını standart seriyalı paket dizaynından istifadə edərək bayt axınına əlavə edin.

Serial paket dizaynı, paket doldurulması və paket təhlili mürəkkəbdir və buna nail olmaq çətindir. Xoşbəxtlikdən Arduino istifadəçiləri üçün, bu mürəkkəb məntiqin hamısını pərdəarxasında edə biləcək kitabxanalar var, belə ki, layihənizi əlavə başlıq olmadan işləməyə yönəltmək olar. Bu Təlimat seriyalı paket emalı üçün SerialTransfer.h kitabxanasından istifadə edəcək.

Qısacası: Bu Təlimat, SerialTransfer.h kitabxanasından istifadə edərək, hər hansı bir layihədə möhkəm serial məlumatlarını necə asanlıqla tətbiq edə biləcəyinizi izah edəcək. Güclü serial ünsiyyətinin aşağı səviyyəli nəzəriyyəsi haqqında daha çox məlumat əldə etmək istəyirsinizsə, bu təlimata baxın.

Təchizat

  • 2 Arduino

    Birdən çox hardware UART (yəni Arduino Mega) olan Arduinolardan istifadə etməyiniz çox tövsiyə olunur

  • Bağlama teli
  • SerialTransfer.h quraşdırın

    Arduino IDE Kitabxanalar Meneceri vasitəsi ilə əldə edilə bilər

Addım 1: Fiziki Əlaqələr

Fiziki Əlaqələr
Fiziki Əlaqələr

Serial ünsiyyətdən istifadə edərkən bir neçə kabel nöqtəsini yadda saxlamaq lazımdır:

  • Bütün əsasların əlaqəli olduğundan əmin olun!
  • Arduino TX (Göndərmə) pininin digər Arduino RX (Qəbul) pininə bağlanması lazımdır

Addım 2: Kitabxanadan necə istifadə olunur

Kitabxanadan necə istifadə etmək olar
Kitabxanadan necə istifadə etmək olar

SerialTransfer.h, xüsusi bir paket protokolu istifadə edərək asanlıqla böyük miqdarda məlumat göndərməyə imkan verir. Aşağıda kitabxananın bütün xüsusiyyətlərinin təsviri verilmişdir - bir çoxunu bu dərsdə daha sonra istifadə edəcəyik:

SerialTransfer.txBuff

Bu, serial üzərindən göndəriləcək bütün yük məlumatlarının ötürülmədən əvvəl tamponlandığı bir bayt dizisidir. Bu tamponu başqa bir Arduinoya göndərmək üçün məlumat baytları ilə doldura bilərsiniz.

SerialTransfer.rxBuff

Bu, digər Arduinodan alınan bütün yük məlumatlarının tamponlandığı bir bayt dizisidir.

SerialTransfer.bytes Oxuyun

Digər Arduino tərəfindən alınan və SerialTransfer.rxBuff -də saxlanılan faydalı yük baytlarının sayı

SerialTransfer.begin (Axın və _port)

Kitabxana sinifinin bir nümunəsini işə salır. İstənilən "Serial" sinif obyektini parametr olaraq keçə bilərsiniz - hətta "SoftwareSerial" sinif obyektləri!

SerialTransfer.sendData (const uint16_t & messageLen)

Bu, Arduino -nu ötürmə tamponundakı "messageLen" bayt sayını digər Arduinoya göndərməsinə səbəb olur. Məsələn, "messageLen" 4 olarsa, SerialTransfer.txBuff -in ilk 4 baytı serial vasitəsilə digər Arduinoya göndəriləcək.

SerialTransfer.available ()

Bu, Arduino -nuzu digər Arduinodan alınan serial məlumatlarını təhlil etməyə məcbur edir. Bu funksiya boolean "doğru" dəyərini qaytararsa, bu, yeni bir paketin uğurla təhlil edildiyini və yeni alınan paketin məlumatlarının SerialTransfer.rxBuff -də saxlanıldığını/mövcud olduğunu bildirir.

SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

"İndeks" arqumentinin göstərdiyi kimi indeksdən başlayaraq ötürücü buferinə ixtiyari bir obyektin bayt sayını (bayt, int, float, double, struct və s.) "Len" qoyun.

SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

"İndeks" arqumentinin göstərdiyi kimi indeksdən başlayaraq qəbul buferindən (rxBuff) baytların "len" sayını ixtiyari bir obyektə (bayt, int, float, double, struct və s.) Oxuyur.

QEYD:

Məlumat ötürməyin ən asan yolu, əvvəlcə göndərmək istədiyiniz bütün məlumatları ehtiva edən bir quruluşu təyin etməkdir. Qəbul edən tərəfdəki Arduino eyni quruluşa sahib olmalıdır.

Addım 3: Əsas məlumatları ötürün

Aşağıdakı eskiz, həm analogRead (0) ADC dəyərini, həm də gərginliyə çevrilən analogRead (0) dəyərini Arduino #2 -ə ötürür.

Aşağıdakı eskizi Arduino #1 -ə yükləyin:

#"SerialTransfer.h" daxil edin

SerialTransfer myTransfer; struktur STRUCT {uint16_t adcVal; üzmə gərginliyi; } məlumatlar; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (data, sizeof (data)); myTransfer.sendData (sizeof (data)); gecikmə (100); }

Addım 4: Əsas məlumatları əldə edin

Aşağıdakı kod, Arduino #1 -dən alınan ADC və gərginlik dəyərlərini yazdırır.

Aşağıdakı kodu Arduino #2 -ə yükləyin:

#"SerialTransfer.h" daxil edin

SerialTransfer myTransfer; struktur STRUCT {uint16_t adcVal; üzmə gərginliyi; } məlumatlar; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("ERROR:"); əgər (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); başqa halda (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); başqa halda (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Addım 5: Test

Hər iki eskiz müvafiq Arduino -ya yükləndikdən sonra Arduino #1 -dən məlumat aldığınızı yoxlamaq üçün Arduino #2 -də Serial Monitordan istifadə edə bilərsiniz!

Tövsiyə: