Mundarija:

Arduino seriyali aloqasi: 5 qadam
Arduino seriyali aloqasi: 5 qadam

Video: Arduino seriyali aloqasi: 5 qadam

Video: Arduino seriyali aloqasi: 5 qadam
Video: Lesson 52: Controlling DC Motor using two relays | Arduino Step By Step Course 2024, Noyabr
Anonim
Arduino seriyali aloqa
Arduino seriyali aloqa

Ko'p Arduino loyihalari bir nechta Arduino o'rtasida ma'lumotlarni uzatishga tayanadi.

Siz RC avtomobili, RC samolyotini quradigan yoki masofadan turib displeyli ob -havo stantsiyasini loyihalashni yaxshi ko'radigan havaskor bo'lsangiz ham, ketma -ket ma'lumotlarni bir Arduino -dan boshqasiga ishonchli tarzda o'tkazishni bilishingiz kerak bo'ladi. Afsuski, havaskorlar uchun o'z loyihalarida ketma -ket ma'lumotlarni uzatish qiyin, chunki ketma -ket ma'lumotlar baytlar oqimi sifatida yuboriladi.

Baytlar oqimida hech qanday kontekst bo'lmasa, ma'lumotlarni sharhlash deyarli mumkin emas. Ma'lumotni sharhlay olmagan holda, sizning Arduinosingiz ishonchli aloqa qila olmaydi. Asosiysi, bu kontekst ma'lumotlarini standart ketma -ket paketli dizayn yordamida bayt oqimiga qo'shish.

Paketlarni ketma -ket tuzish, paketlarni to'ldirish va ajratish murakkab va erishish qiyin. Yaxshiyamki, Arduino foydalanuvchilari uchun bu murakkab mantiqni bajarishi mumkin bo'lgan kutubxonalar mavjud, shuning uchun siz o'z loyihangizni qo'shimcha boshsiz ishlashiga e'tibor qaratishingiz mumkin. Bu yo'riqnoma ketma -ket paketli ishlov berish uchun SerialTransfer.h kutubxonasidan foydalanadi.

Qisqacha aytganda, bu ko'rsatma SerialTransfer.h kutubxonasidan foydalanib, har qanday loyihada mustahkam ketma -ket ma'lumotlarni qanday osonlik bilan amalga oshirish mumkinligini ko'rib chiqadi. Agar siz kuchli ketma-ket aloqa haqidagi past darajali nazariya haqida ko'proq bilmoqchi bo'lsangiz, ushbu qo'llanmani ko'ring.

Ta'minotlar

  • 2 Arduino

    Bir nechta apparat UART -lariga ega bo'lgan Arduino -dan foydalanish tavsiya etiladi (ya'ni Arduino Mega)

  • Ulanish simlari
  • SerialTransfer.h ni o'rnating

    Arduino IDE kutubxonalar menejeri orqali mavjud

1 -qadam: jismoniy aloqa

Jismoniy ulanishlar
Jismoniy ulanishlar

Ketma -ket aloqadan foydalanganda, bir nechta simli nuqtalarni yodda tutish kerak:

  • Barcha asoslar ulanganligiga ishonch hosil qiling!
  • Arduino TX (uzatish) pinini boshqa Arduino RX (qabul qilish) piniga ulash lozim.

2 -qadam: Kutubxonadan qanday foydalanish kerak

Kutubxonadan qanday foydalanish kerak
Kutubxonadan qanday foydalanish kerak

SerialTransfer.h sizga maxsus paketli protokol yordamida katta hajmdagi ma'lumotlarni osongina yuborish imkonini beradi. Quyida kutubxonaning barcha funktsiyalari tavsifi keltirilgan, ularning ko'pchiligini biz keyinchalik ushbu darslikda ishlatamiz:

SerialTransfer.txBuff

Bu ketma -ket yuboriladigan barcha yuk ma'lumotlari uzatilishdan oldin buferlangan bayt qatoridir. Siz buferni boshqa Arduino -ga yuborish uchun ma'lumot baytlari bilan to'ldirishingiz mumkin.

SerialTransfer.rxBuff

Bu boshqa Arduino -dan olingan barcha yuk ma'lumotlari tamponlangan baytli qator.

SerialTransfer.bytesRead

Boshqa Arduino tomonidan qabul qilingan va SerialTransfer.rxBuff -da saqlangan yuk baytlari soni

SerialTransfer.begin (Oqim va _port)

Kutubxona sinfining namunasini ishga tushiradi. Siz har qanday "Serial" sinf ob'ektini parametr sifatida o'tkazishingiz mumkin - hatto "SoftwareSerial" sinf ob'ektlari ham!

SerialTransfer.sendData (const uint16_t & messageLen)

Bu sizning Arduino -ni boshqa "Arduino" ga uzatish buferidagi "messageLen" bayt sonini yuborishga majbur qiladi. Masalan, agar "messageLen" 4 bo'lsa, SerialTransfer.txBuff -ning dastlabki 4 bayti ketma -ket boshqa Arduino -ga yuboriladi.

SerialTransfer.available ()

Bu sizning Arduino -ni boshqa Arduino -dan olingan ketma -ket ma'lumotlarni tahlil qilishga majbur qiladi. Agar bu funktsiya mantiqiy "rost" ni qaytarsa, bu yangi paket muvaffaqiyatli tahlil qilinganligini va yangi olingan ma'lumotlarning SerialTransfer.rxBuff -da saqlanganligini bildiradi.

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

"Indeks" argumenti ko'rsatganidek, indeksdan boshlanadigan uzatish buferiga ixtiyoriy ob'ektning baytlari (bayt, int, float, double, struct va boshqalar) "len".

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

Qabul qilish buferidan "renx" baytlar sonini indeksdan boshlab "indeks" argumenti o'zboshimchalik bilan ob'ektga o'qiydi (bayt, int, float, dubl, strukt va boshqalar …).

ESLATMA:

Ma'lumot uzatishning eng oson usuli - bu siz yubormoqchi bo'lgan barcha ma'lumotlarni o'z ichiga olgan tuzilmani aniqlash. Qabul qilayotgan Arduino bir xil tuzilishga ega bo'lishi kerak.

3 -qadam: Asosiy ma'lumotlarni uzatish

Quyidagi eskiz analogRead (0) ning ADC qiymatini ham, analogRead (0) qiymatini ham Arduino №2 ga o'tkazadi.

Quyidagi eskizni Arduino #1 -ga yuklang:

#"SerialTransfer.h" ni qo'shing

SerialTransfer myTransfer; STRUCT {uint16_t adcVal tuzilishi; suzuvchi kuchlanish; } ma'lumotlar; void setup () {Serial.begin (115200); Seriya 1. boshlanishi (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (ma'lumotlar, hajmlar (ma'lumotlar)); myTransfer.sendData (hajmi (ma'lumotlar)); kechikish (100); }

4 -qadam: Asosiy ma'lumotlarni oling

Quyidagi kod ADC va Arduino #1dan olingan kuchlanish qiymatlarini bosib chiqaradi.

Quyidagi kodni Arduino #2 -ga yuklang:

#"SerialTransfer.h" ni qo'shing

SerialTransfer myTransfer; STRUCT {uint16_t adcVal tuzilishi; suzuvchi kuchlanish; } ma'lumotlar; void setup () {Serial.begin (115200); Seriya 1. boshlanishi (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (ma'lumotlar kuchlanish); Serial.println (); } if if (myTransfer.status <0) {Serial.print ("ERROR:"); agar (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); aks holda (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); aks holda (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

5 -qadam: Sinov

Ikkala eskiz ham tegishli Arduino -larga yuklanganidan so'ng, siz Arduino #1 -dan ma'lumot olganingizni tekshirish uchun Arduino #2 seriyali monitoridan foydalanishingiz mumkin!

Tavsiya: