Turinys:

„Arduino“serijinis ryšys: 5 žingsniai
„Arduino“serijinis ryšys: 5 žingsniai

Video: „Arduino“serijinis ryšys: 5 žingsniai

Video: „Arduino“serijinis ryšys: 5 žingsniai
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Lapkritis
Anonim
„Arduino“serijos komunikacija
„Arduino“serijos komunikacija

Daugelis „Arduino“projektų remiasi duomenų perdavimu tarp kelių „Arduino“.

Nesvarbu, ar esate mėgėjas, kuriantis RC automobilį, RC lėktuvą, ar kuriantis orų stotį su nuotoliniu ekranu, turėsite žinoti, kaip patikimai perduoti serijinius duomenis iš vieno „Arduino“į kitą. Deja, mėgėjams sunku gauti nuoseklų duomenų perdavimą savo projektuose. Taip yra todėl, kad serijiniai duomenys siunčiami kaip baitų srautas.

Be baitų srauto konteksto beveik neįmanoma interpretuoti duomenų. Negalėdami interpretuoti duomenų, jūsų „Arduinos“negalės patikimai bendrauti. Svarbiausia yra pridėti šiuos kontekstinius duomenis prie baitų srauto naudojant standartinį serijinių paketų dizainą.

Serijinis paketų dizainas, paketų įdarymas ir paketų analizavimas yra sudėtingas ir sunkiai pasiekiamas. Laimei, „Arduino“vartotojams yra bibliotekų, galinčių atlikti visą šią sudėtingą logiką užkulisiuose, kad galėtumėte sutelkti dėmesį į tai, kad jūsų projektas veiktų be papildomų galvos skausmų. Šis „Instructable“serijinių paketų apdorojimui naudos biblioteką „SerialTransfer.h“.

Trumpai tariant: šioje instrukcijoje aprašoma, kaip galite lengvai įdiegti patikimus serijinius duomenis bet kuriame projekte, naudojant biblioteką SerialTransfer.h. Jei norite sužinoti daugiau apie žemo lygio tvirtos serijinės komunikacijos teoriją, peržiūrėkite šią mokymo programą.

Prekės

  • 2 Arduinos

    Labai rekomenduojama naudoti „Arduinos“, turinčias kelis aparatinės įrangos UART (t. Y. „Arduino Mega“)

  • Prijungimo viela
  • Įdiekite SerialTransfer.h

    Prieinama per „Arduino IDE“bibliotekų tvarkytuvę

1 žingsnis: fiziniai ryšiai

Fiziniai ryšiai
Fiziniai ryšiai

Naudojant nuoseklųjį ryšį, reikia nepamiršti kelių prijungimo taškų:

  • Įsitikinkite, kad visi pagrindai yra prijungti!
  • „Arduino TX“(perdavimo) kaištis turi būti prijungtas prie kito „Arduino“RX (priėmimo) kaiščio

2 veiksmas: kaip naudotis biblioteka

Kaip naudotis biblioteka
Kaip naudotis biblioteka

SerialTransfer.h leidžia lengvai siųsti didelius duomenų kiekius naudojant pasirinktinį paketų protokolą. Žemiau yra visų bibliotekos funkcijų aprašymas - daugelį iš jų naudosime vėliau šioje pamokoje:

SerialTransfer.txBuff

Tai yra baitų masyvas, kuriame visi naudingosios apkrovos duomenys, kurie turi būti siunčiami nuosekliai, yra buferuojami prieš perdavimą. Jūs galite užpildyti šį buferį baitais duomenų, kad nusiųstumėte į kitą „Arduino“.

SerialTransfer.rxBuff

Tai yra baitų masyvas, kuriame visi naudingosios apkrovos duomenys, gauti iš kito „Arduino“, yra buferuojami.

SerialTransfer.bytesRead

Kitos apkrovos baitų, kuriuos gavo kitas „Arduino“, skaičius ir saugomas SerialTransfer.rxBuff

SerialTransfer.begin (srautas ir _portas)

Inicijuoja bibliotekos klasės egzempliorių. Galite perduoti bet kurį „Serial“klasės objektą kaip parametrą - net „SoftwareSerial“klasės objektus!

SerialTransfer.sendData (const uint16_t & messageLen)

Dėl to jūsų „Arduino“siunčia „messageLen“baitų skaičių perdavimo buferyje kitam „Arduino“. Pavyzdžiui, jei „messageLen“yra 4, pirmieji 4 „SerialTransfer.txBuff“baitai bus siunčiami serijiniu būdu kitam „Arduino“.

SerialTransfer.available ()

Dėl to jūsų „Arduino“analizuoja visus gautus serijinius duomenis iš kito „Arduino“. Jei ši funkcija grąžina loginę reikšmę „true“, tai reiškia, kad naujas paketas buvo sėkmingai išanalizuotas ir naujai gauto paketo duomenys saugomi/pasiekiami SerialTransfer.rxBuff.

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

Įkelia „len“savavališko objekto (baito, int, plūdės, dvigubo, struktūros ir kt.) Baitų skaičių į perdavimo buferį, pradedant indeksu, kaip nurodyta argumente „index“.

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

Skaito „len“baitų skaičių iš priėmimo buferio (rxBuff), pradedant indeksu, kaip nurodyta argumente „index“, į savavališką objektą (baitą, int, plūdę, dvigubą, struktūrą ir kt.).

PASTABA:

Lengviausias būdas perduoti duomenis yra pirmiausia apibrėžti struktūrą, kurioje yra visi duomenys, kuriuos norite siųsti. „Arduino“priėmimo gale turėtų būti apibrėžta identiška struktūra.

3 žingsnis: perduokite pagrindinius duomenis

Šis eskizas perduoda tiek analogRead (0) ADC reikšmę, tiek analogRead (0) vertę, konvertuotą į įtampą į Arduino #2.

Įkelkite šį eskizą į „Arduino #1“:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struktura STRUCT {uint16_t adcVal; plūdės įtampa; } duomenys; 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 (duomenys, dydis (duomenys)); myTransfer.sendData (sizeof (duomenys)); vėlavimas (100); }

4 žingsnis: Gaukite pagrindinius duomenis

Šis kodas spausdina ADC ir įtampos vertes, gautas iš „Arduino #1“.

Įkelkite šį kodą į „Arduino #2“:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struktura STRUCT {uint16_t adcVal; plūdės įtampa; } duomenys; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (duomenys, dydis (duomenys)); Serial.print (data.adcVal); Serial.print (''); Serial.println (duomenys. Įtampa); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("KLAIDA:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); else if (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); else if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

5 žingsnis: bandymas

Kai abu eskizai bus įkelti į atitinkamus „Arduinos“, galite naudoti „Arduino #2“serijos monitorių, kad patikrintumėte, ar gaunate duomenis iš „Arduino #1“!

Rekomenduojamas: