Orodha ya maudhui:

Mawasiliano ya Siri ya Arduino: Hatua 5
Mawasiliano ya Siri ya Arduino: Hatua 5

Video: Mawasiliano ya Siri ya Arduino: Hatua 5

Video: Mawasiliano ya Siri ya Arduino: Hatua 5
Video: Функция Arduino Millis поясняется 3 примерами 2024, Novemba
Anonim
Mawasiliano ya Siri ya Arduino
Mawasiliano ya Siri ya Arduino

Miradi mingi ya Arduino inategemea kupitisha data kati ya Arduino kadhaa.

Ikiwa wewe ni hobbyist anayejenga gari la RC, ndege ya RC, au kubuni kituo cha hali ya hewa na onyesho la mbali, utahitaji kujua jinsi ya kuhamisha data ya serial kutoka Arduino hadi nyingine. Kwa bahati mbaya, ni ngumu kwa wanaopenda kupata mawasiliano ya data ya serial kufanya kazi katika miradi yao wenyewe. Hii ni kwa sababu data ya serial hutumwa kama mkondo wa ka.

Bila muktadha wa aina yoyote ndani ya mtiririko wa ka, haiwezekani kutafsiri data. Bila kuwa na uwezo wa kutafsiri data, Arduino zako hazitaweza kuwasiliana kwa uaminifu. Muhimu ni kuongeza data hii ya muktadha kwenye mkondo wa baiti kwa kutumia muundo wa pakiti ya kawaida.

Ubunifu wa pakiti ya serial, kujaza pakiti, na kuchambua pakiti ni ngumu na ngumu kufikia. Kwa bahati nzuri kwa watumiaji wa Arduino, kuna maktaba zinazoweza kufanya mantiki hii ngumu nyuma ya pazia ili uweze kuzingatia kupata mradi wako ufanye kazi bila kichwa cha ziada. Inayoweza kufundishwa itatumia maktaba SerialTransfer.h kwa usindikaji wa pakiti za serial.

Kwa kifupi: hii inayoweza kufundishwa itaenda juu ya jinsi unaweza kutekeleza data dhabiti ya seri kwa urahisi katika mradi wowote ukitumia maktaba SerialTransfer.h. Ikiwa unataka kujifunza zaidi juu ya nadharia ya kiwango cha chini juu ya mawasiliano thabiti ya serial, angalia mafunzo haya.

Vifaa

  • 2 Arduino

    Inatiwa moyo sana kwamba utumie Arduino zilizo na vifaa vingi vya UARTs (i.e. Arduino Mega)

  • Kuunganisha waya
  • Sakinisha SerialTransfer.h

    Inapatikana kupitia Meneja wa Maktaba ya Arduino IDE

Hatua ya 1: Uunganisho wa Kimwili

Uunganisho wa Kimwili
Uunganisho wa Kimwili

Wakati wa kutumia mawasiliano ya serial, vidokezo vichache vya wiring vinahitaji kuzingatiwa:

  • Hakikisha misingi yote imeunganishwa!
  • Pini ya Arduino TX (Transmit) inahitaji kushikamana na pini nyingine ya RX (Pokea) ya Arduino

Hatua ya 2: Jinsi ya Kutumia Maktaba

Jinsi ya Kutumia Maktaba
Jinsi ya Kutumia Maktaba

SerialTransfer.h hukuruhusu kutuma kwa urahisi idadi kubwa ya data ukitumia itifaki ya pakiti ya kawaida. Hapa chini kuna maelezo ya huduma zote za maktaba - nyingi ambazo tutatumia baadaye kwenye mafunzo haya:

SerialTransfer.txBuff

Hii ni safu ya baiti ambapo data zote za kulipwa ambazo zitatumwa juu ya serial zinakumbwa kabla ya kupitishwa. Unaweza kujaza bafa hii na ka data za kutuma kwa Arduino nyingine.

SerialTransfer.rxBuff

Hii ni safu ndogo ambayo data yote ya malipo inayopokelewa kutoka kwa Arduino nyingine imefungwa.

SerialTransfer.bytesSoma

Idadi ya baiti za malipo zinazopokelewa na Arduino nyingine na kuhifadhiwa kwenye SerialTransfer.rxBuff

SerialTransfer.begin (Mkondo & _port)

Inazindua mfano wa darasa la maktaba. Unaweza kupitisha kitu chochote cha "Serial" kama kigezo - hata vitu vya darasa "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t & ujumbeLen)

Hii inafanya Arduino yako itume "messageLen" idadi ya ka kwenye kiboreshaji cha kupitisha kwa Arduino nyingine. Kwa mfano, ikiwa "messageLen" ni 4, baiti 4 za kwanza za SerialTransfer.txBuff zitatumwa kupitia serial kwa Arduino nyingine.

SerialTransfer haipatikani ()

Hii inafanya picha yako ya Arduino ipokee data ya serial kutoka kwa Arduino nyingine. Ikiwa kazi hii inarudisha boolean "kweli", inamaanisha kuwa pakiti mpya imechanganuliwa vizuri na data ya pakiti mpya iliyopokelewa imehifadhiwa / inapatikana katika SerialTransfer.rxBuff.

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

Stuffs "len" idadi ya ka ya kitu holela (baiti, int, kuelea, maradufu, muundo, n.k …) kwenye bafa ya kupitisha kuanzia faharisi kama ilivyoainishwa na hoja ya "faharisi".

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

Inasoma idadi ya "len" ya ka kutoka kwa bafa ya kupokea (rxBuff) kuanzia faharisi kama ilivyoainishwa na hoja ya "faharisi" katika kitu kiholela (baiti, int, kuelea, mara mbili, muundo, n.k …).

KUMBUKA:

Njia rahisi ya kusambaza data ni kwanza kufafanua muundo ambao una data yote unayotaka kutuma. Arduino kwenye mwisho wa kupokea inapaswa kuwa na muundo sawa uliofafanuliwa.

Hatua ya 3: Peleka Takwimu za Msingi

Mchoro ufuatao hupitisha thamani ya ADC ya AnalogRead (0) na thamani ya AnalogRead (0) iliyogeuzwa kuwa voltage kuwa Arduino # 2.

Pakia mchoro ufuatao kwa Arduino # 1:

# pamoja na "SerialTransfer.h"

SerialTransfer myTransfer; muundo STRUCT {uint16_t adcVal; voltage ya kuelea; } data; kuanzisha batili () {Serial.begin (115200); Serial1.anza (115200); myTransfer.begin (Serial1); } kitanzi batili () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (data, saizi (data)); myTransfer.sendData (sizeof (data)); kuchelewesha (100); }

Hatua ya 4: Pokea Takwimu za Msingi

Nambari ifuatayo inachapisha ADC na maadili ya voltage yaliyopokelewa kutoka Arduino # 1.

Pakia nambari ifuatayo kwa Arduino # 2:

# pamoja na "SerialTransfer.h"

SerialTransfer myTransfer; muundo STRUCT {uint16_t adcVal; voltage ya kuelea; } data; kuanzisha batili () {Serial.begin (115200); Serial1.anza (115200); myTransfer.begin (Serial1); } kitanzi batili () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print ("); Serial.println (data.voltage); Serial.println (); } kingine ikiwa (myTransfer.status <0) {Serial.print ("ERROR:"); ikiwa (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); vinginevyo ikiwa (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); vinginevyo ikiwa (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Hatua ya 5: Upimaji

Mara tu michoro yote imepakiwa kwa Arduinos zao, unaweza kutumia Monitor Serial juu ya Arduino # 2 ili kuhakikisha unapata data kutoka Arduino # 1!

Ilipendekeza: