Sisällysluettelo:

Arduino -sarjaliikenne: 5 vaihetta
Arduino -sarjaliikenne: 5 vaihetta

Video: Arduino -sarjaliikenne: 5 vaihetta

Video: Arduino -sarjaliikenne: 5 vaihetta
Video: How to solve Most Common Arduino Issues in 5 Minutes? 2024, Heinäkuu
Anonim
Arduino -sarjaliikenne
Arduino -sarjaliikenne

Monet Arduino -projektit tukeutuvat tiedonsiirtoon useiden Arduinojen välillä.

Olitpa harrastaja, joka rakentaa RC -auton, RC -lentokoneen tai suunnittelet sääaseman etänäytöllä, sinun on tiedettävä, miten sarjatiedot voidaan siirtää luotettavasti Arduinosta toiseen. Valitettavasti harrastajien on vaikea saada sarjatiedonsiirtoa toimimaan omissa projekteissaan, koska sarjatiedot lähetetään tavuvirrana.

Ilman minkäänlaista kontekstia tavuvirrassa on lähes mahdotonta tulkita tietoja. Jos et pysty tulkitsemaan tietoja, Arduinos ei pysty kommunikoimaan luotettavasti. Avain on lisätä tämä kontekstidata tavuvirtaan käyttämällä tavallista sarjapakettimallia.

Sarjapakettien suunnittelu, pakettien täyttäminen ja pakettien jäsentäminen on monimutkaista ja vaikeaa saavuttaa. Onneksi Arduinon käyttäjille on saatavilla kirjastoja, jotka voivat tehdä kaiken tämän monimutkaisen logiikan kulissien takana, joten voit keskittyä projektisi saamiseen ilman ylimääräistä päänsärkyä. Tämä ohje sisältää SerialTransfer.h -kirjaston sarjapakettien käsittelyyn.

Lyhyesti sanottuna: tämä Instructable käsittelee, miten voit ottaa vankat sarjatiedot helposti käyttöön missä tahansa projektissa käyttämällä SerialTransfer.h -kirjastoa. Jos haluat oppia lisää matalan tason teoriasta vankasta sarjaliikenteestä, katso tämä opetusohjelma.

Tarvikkeet

  • 2 Arduinoa

    On erittäin suositeltavaa käyttää Arduinoja, joissa on useita laitteiston UART -laitteita (eli Arduino Mega)

  • Liitäntäjohto
  • Asenna SerialTransfer.h

    Saatavana Arduino IDE: n kirjastopäällikön kautta

Vaihe 1: Fyysiset liitännät

Fyysiset liitännät
Fyysiset liitännät

Sarjaliikennettä käytettäessä on pidettävä mielessä muutama kytkentäkohta:

  • Varmista, että kaikki maadoitukset on kytketty!
  • Arduino TX (lähetys) -nasta on yhdistettävä toiseen Arduinon RX (vastaanotto) -nastaan

Vaihe 2: Kirjaston käyttäminen

Kirjaston käyttäminen
Kirjaston käyttäminen

SerialTransfer.h: n avulla voit helposti lähettää suuria tietomääriä mukautetun pakettiprotokollan avulla. Alla on kuvaus kaikista kirjaston ominaisuuksista - joista monia käytämme myöhemmin tässä opetusohjelmassa:

SerialTransfer.txBuff

Tämä on tavutaulukko, jossa kaikki sarjaliikenteen kautta lähetettävät hyötykuormatiedot puskuroidaan ennen lähetystä. Voit täyttää tämän puskurin tavuilla dataa lähettääksesi toiselle Arduinolle.

SerialTransfer.rxBuff

Tämä on tavumatriisi, jossa kaikki toiselta Arduinolta vastaanotetut hyötykuormatiedot puskuroidaan.

SerialTransfer.bytesLue

Toisen Arduinon vastaanottaman ja SerialTransfer.rxBuffiin tallennetun hyötykuorman tavujen määrä

SerialTransfer.begin (Stream & _port)

Alustaa kirjaston luokan ilmentymän. Voit välittää parametrina minkä tahansa "Serial" -luokan objektin - jopa "SoftwareSerial" -luokan objektit!

SerialTransfer.sendData (const uint16_t & messageLen)

Tämä saa Arduinosi lähettämään "messageLen" -määrän tavuja lähetyspuskurissa toiselle Arduinolle. Jos esimerkiksi "messageLen" on 4, SerialTransfer.txBuffin neljä ensimmäistä tavua lähetetään sarjaportin kautta toiselle Arduinolle.

SerialTransfer.available ()

Tämä saa Arduinosi jäsentämään kaikki toiselta Arduinolta vastaanotetut sarjatiedot. Jos tämä funktio palauttaa boolean -arvon "true", se tarkoittaa, että uusi paketti on jäsennetty onnistuneesti ja juuri vastaanotetun paketin tiedot tallennetaan/käytettävissä SerialTransfer.rxBuff -tiedostossa.

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

Täyttää "len" -määrän mielivaltaisen objektin tavuja (tavu, int, float, double, struktuuri jne.) Lähetyspuskuriin alkaen indeksistä argumentin "index" määrittämällä tavalla.

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

Lukee "len" tavut vastaanottopuskurista (rxBuff) alkaen indeksistä, kuten argumentti "index" määrittää, mielivaltaiseksi objektiksi (tavu, int, float, double, struktuuri jne.).

HUOMAUTUS:

Helpoin tapa lähettää tietoja on ensin määrittää rakenne, joka sisältää kaikki lähetettävät tiedot. Vastaanottopään Arduinolla tulisi olla sama rakenne.

Vaihe 3: Lähetä perustiedot

Seuraava luonnos lähettää sekä ADR -arvon analogRead (0) että analogRead (0) jännitteeksi muunnetun arvon Arduino #2: ksi.

Lähetä seuraava luonnos Arduinolle #1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; rakenne STRUCT {uint16_t adcVal; kelluva jännite; } dataa; void setup () {Serial.begin (115200); Sarja1.alku (115200); myTransfer.begin (Sarja1); } void loop () {data.adcVal = analoginenLue (0); data.jännite = (data.adcVal * 5.0) / 1023,0; myTransfer.txObj (data, sizeof (data)); myTransfer.sendData (sizeof (data)); viive (100); }

Vaihe 4: Vastaanota perustiedot

Seuraava koodi tulostaa Arduinolta 1 vastaanotetut ADC- ja jännitearvot.

Lataa seuraava koodi Arduinolle #2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; rakenne STRUCT {uint16_t adcVal; kelluva jännite; } dataa; void setup () {Serial.begin (115200); Sarja1.alku (115200); myTransfer.begin (Sarja1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); Serial.print (data.adcVal); Serial.print (''); Sarjajulkaisu (datajännite); Sarja.println (); } else if (myTransfer.status <0) {Serial.print ("ERROR:"); jos (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")); }}

Vaihe 5: Testaus

Kun molemmat luonnokset on ladattu vastaaviin Arduinos -peleihisi, voit käyttää Arduino #2: n sarjamonitoria varmistaaksesi, että vastaanotat tietoja Arduinolta #1!

Suositeltava: