Агуулгын хүснэгт:

Arduino цуваа холбоо: 5 алхам
Arduino цуваа холбоо: 5 алхам

Видео: Arduino цуваа холбоо: 5 алхам

Видео: Arduino цуваа холбоо: 5 алхам
Видео: #14 OP320 HMI Связь Modbus | Внешний ПЛК Arduino 2024, Арваннэгдүгээр
Anonim
Arduino цуваа холбоо
Arduino цуваа холбоо

Arduino -ийн олон төслүүд хэд хэдэн Arduino хооронд өгөгдөл дамжуулахад тулгуурладаг.

Та RC машин, RC онгоц бүтээх эсвэл алсын дэлгэцтэй цаг уурын станц зохион бүтээх хоббичин байсан ч хамаагүй нэг цуваа өгөгдлийг нэг Arduino -аас нөгөө рүү хэрхэн найдвартай шилжүүлэхээ мэдэх шаардлагатай болно. Харамсалтай нь, хобби сонирхогчид өөрсдийн төслүүд дээр сериал өгөгдөл дамжуулах нь хэцүү байдаг, учир нь цуваа өгөгдлийг байтын урсгалаар илгээдэг.

Байтын урсгалд ямар нэгэн контекст байхгүй бол өгөгдлийг тайлбарлах нь бараг боломжгүй юм. Өгөгдлийг тайлбарлах чадваргүй бол таны Arduinos найдвартай харилцах боломжгүй болно. Хамгийн гол нь энэхүү контекстийн өгөгдлийг стандарт цуваа пакет дизайн ашиглан байтын урсгалд нэмэх явдал юм.

Цуваа пакет дизайн, пакет чөмөг, пакет задлан шинжлэх нь нарийн төвөгтэй бөгөөд хүрэхэд хэцүү байдаг. Аз болоход Arduino хэрэглэгчдийн хувьд энэ бүх нарийн төвөгтэй логикийг хийх боломжтой номын сангууд байдаг бөгөөд ингэснээр та төслөө нэмэлт толгойгүйгээр ажиллуулахад анхаарлаа төвлөрүүлж чадна. Энэхүү заавар нь SerialTransfer.h номын санг цуваа пакет боловсруулахад ашиглах болно.

Товчхондоо: Энэхүү зааварчилгаа нь SerialTransfer.h номын санг ашиглан ямар ч төсөлд бат бөх цуваа өгөгдлийг хэрхэн хялбархан хэрэгжүүлэх талаар тайлбарлах болно. Хэрэв та бат бөх цуваа холбооны доод түвшний онолын талаар илүү ихийг мэдэхийг хүсвэл энэ хичээлийг үзнэ үү.

Хангамж

  • 2 Ардуино

    Та олон тоног төхөөрөмжийн UART (өөрөөр хэлбэл Arduino Mega) агуулсан Arduinos -ийг ашиглахыг зөвлөж байна

  • Холбох утас
  • SerialTransfer.h суулгана уу

    Arduino IDE -ийн номын сангийн менежерээр дамжуулан авах боломжтой

Алхам 1: Физик холболт

Физик холболтууд
Физик холболтууд

Цуваа холболтыг ашиглахдаа хэд хэдэн утсыг анхаарч үзэх хэрэгтэй.

  • Бүх үндэслэл холбогдсон эсэхийг шалгаарай!
  • Arduino TX (дамжуулах) зүүг бусад Arduino -ийн RX (хүлээн авах) зүүтэй холбох шаардлагатай.

Алхам 2: Номын санг хэрхэн ашиглах талаар

Номын санг хэрхэн ашиглах талаар
Номын санг хэрхэн ашиглах талаар

SerialTransfer.h нь өөрчлөн тохируулсан пакет протокол ашиглан их хэмжээний өгөгдлийг хялбархан илгээх боломжийг олгодог. Номын сангийн бүх онцлог шинж чанаруудын тайлбарыг доор харуулав.

SerialTransfer.txBuff

Энэ бол дамжуулахаас өмнө цуваагаар илгээх бүх ачааллын өгөгдлийг буфержуулсан байт массив юм. Та энэ буферийг өөр Arduino руу илгээхдээ өгөгдлийн байтаар дүүргэж болно.

SerialTransfer.rxBuff

Энэ бол бусад Arduino -аас хүлээн авсан бүх ачааллын өгөгдлийг буфержуулсан байт массив юм.

SerialTransfer.bytes Унших

Нөгөө Arduino хүлээн авч, SerialTransfer.rxBuff -д хадгалагдсан ачааллын байтын тоо

SerialTransfer.begin (Урсгал ба _порт)

Номын сангийн ангийн жишээг эхлүүлнэ. Та ямар ч "Цуваа" ангийн объектыг параметр болгон дамжуулж болно, тэр ч байтугай "SoftwareSerial" ангийн объект!

SerialTransfer.sendData (const uint16_t & messageLen)

Энэ нь таны Arduino -г дамжуулах буфер доторх "messageLen" байтын тоог бусад Arduino руу илгээх боломжийг олгодог. Жишээлбэл, "messageLen" нь 4 бол SerialTransfer.txBuff -ийн эхний 4 байтыг цуваагаар нөгөө Arduino руу илгээх болно.

SerialTransfer.available ()

Энэ нь таны Arduino -ийг бусад Arduino -аас хүлээн авсан цуваа өгөгдлийг задлахад хүргэдэг. Хэрэв энэ функц нь логик "үнэн" буцаах юм бол энэ нь шинэ пакетийг амжилттай задалж, шинээр хүлээн авсан пакетийн өгөгдлийг SerialTransfer.rxBuff -д хадгалж/ашиглах боломжтой гэсэн үг юм.

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

"Индекс" аргументийн зааж өгсөн индексээс эхлэн дамжуулагч буферт дурын объектын (байт, int, хөвөх, давхар, бүтэц гэх мэт …) байтын тоог "len" оруулна.

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

Хүлээн авах буфер (rxBuff) -аас "len" тооны байтыг индексээс эхлэн "индекс" аргументаар дурын объект руу (байт, int, float, double, struct гэх мэт) уншдаг.

ТАЙЛБАР:

Өгөгдөл дамжуулах хамгийн хялбар арга бол эхлээд илгээхийг хүссэн бүх өгөгдлийг агуулсан бүтцийг тодорхойлох явдал юм. Хүлээн авах цэг дээрх Arduino нь ижил бүтэцтэй байх ёстой.

Алхам 3: Үндсэн өгөгдлийг дамжуулах

Дараах ноорог нь analogRead (0) ADC утга болон analogRead (0) утгыг хоёуланг нь хүчдэл болгон Arduino #2 руу дамжуулдаг.

Дараах ноорогыг Arduino #1 дээр байршуулна уу

#"SerialTransfer.h" -ийг оруулна уу

SerialTransfer myTransfer; бүтэц STRUCT {uint16_t adcVal; хөвөх хүчдэл; } өгөгдөл; void setup () {Serial.begin (115200); Цуваа 1. эхлэх (115200); myTransfer.begin (Цуваа1); } void loop () {data.adcVal = analogRead (0); өгөгдөл.хүчдэл = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (өгөгдөл, хэмжээ (өгөгдөл)); myTransfer.sendData (sizeof (өгөгдөл)); саатал (100); }

Алхам 4: Үндсэн өгөгдлийг хүлээн авах

Дараах код нь Arduino #1 -ээс хүлээн авсан ADC ба хүчдэлийн утгыг хэвлэнэ.

Дараах кодыг Arduino #2 дээр байршуулна уу

#"SerialTransfer.h" -ийг оруулна уу

SerialTransfer myTransfer; бүтэц STRUCT {uint16_t adcVal; хөвөх хүчдэл; } өгөгдөл; void setup () {Serial.begin (115200); Цуваа 1. эхлэх (115200); myTransfer.begin (Цуваа1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Serial.println (өгөгдлийн хүчдэл); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("ERROR:"); хэрэв (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); өөр бол (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); өөр бол (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Алхам 5: Туршилт

Хоёр зургийг хоёуланг нь Arduino -д байршуулсны дараа та Arduino #2 дээрх Цуваа мониторыг ашиглан Arduino #1 -ээс өгөгдөл хүлээн авч байгаагаа баталгаажуулах боломжтой болно!

Зөвлөмж болгож буй: