Satura rādītājs:

Arduino sērijas komunikācija: 5 soļi
Arduino sērijas komunikācija: 5 soļi

Video: Arduino sērijas komunikācija: 5 soļi

Video: Arduino sērijas komunikācija: 5 soļi
Video: Измерение 5A-30A переменного и постоянного тока с использованием ACS712 с библиотекой Robojax 2024, Jūlijs
Anonim
Arduino seriālā komunikācija
Arduino seriālā komunikācija

Daudzi Arduino projekti balstās uz datu pārsūtīšanu starp vairākiem Arduinos.

Neatkarīgi no tā, vai esat hobijs, kurš būvē RC automašīnu, RC lidmašīnu vai projektē laika staciju ar tālvadības displeju, jums būs jāzina, kā droši pārsūtīt sērijas datus no viena Arduino uz citu. Diemžēl hobijiem ir grūti iegūt seriālo datu sakarus, kas darbojas savos projektos. Tas ir tāpēc, ka sērijveida dati tiek nosūtīti kā baitu plūsma.

Bez jebkāda konteksta baitu plūsmā ir gandrīz neiespējami interpretēt datus. Nespējot interpretēt datus, jūsu Arduinos nevarēs droši sazināties. Galvenais ir pievienot šos konteksta datus baitu straumei, izmantojot standarta sērijas pakešu dizainu.

Sērijveida pakešu dizains, pakešu pildīšana un pakešu parsēšana ir sarežģīts un grūti sasniedzams. Par laimi Arduino lietotājiem ir pieejamas bibliotēkas, kas var paveikt visu šo sarežģīto loģiku aizkulisēs, lai jūs varētu koncentrēties uz to, lai projekts darbotos bez papildu galvassāpēm. Šī pamācība sērijveida pakešu apstrādei izmantos bibliotēku SerialTransfer.h.

Īsumā: šajā pamācībā tiks apskatīts, kā jebkurā projektā, izmantojot bibliotēku SerialTransfer.h, viegli ieviest stabilus sērijas datus. Ja vēlaties uzzināt vairāk par zema līmeņa teoriju par stabilu seriālo komunikāciju, skatiet šo pamācību.

Piegādes

  • 2 Arduinos

    Ir ļoti ieteicams izmantot Arduinos, kuriem ir vairāki aparatūras UART (piemēram, Arduino Mega)

  • Savienojuma vads
  • Instalējiet SerialTransfer.h

    Pieejams, izmantojot Arduino IDE bibliotēku pārvaldnieku

1. darbība: fiziskie savienojumi

Fiziskie savienojumi
Fiziskie savienojumi

Izmantojot seriālo komunikāciju, jāpatur prātā daži vadu savienošanas punkti:

  • Pārliecinieties, ka visi laukumi ir savienoti!
  • Arduino TX (pārraides) tapai jābūt savienotai ar otru Arduino RX (uztveršanas) tapu

2. darbība. Kā izmantot bibliotēku

Kā izmantot bibliotēku
Kā izmantot bibliotēku

SerialTransfer.h ļauj viegli nosūtīt lielu datu apjomu, izmantojot pielāgotu pakešu protokolu. Zemāk ir visu bibliotēkas funkciju apraksts - daudzas no tām mēs izmantosim vēlāk šajā apmācībā:

SerialTransfer.txBuff

Šis ir baitu masīvs, kurā visi sērijveidā nosūtāmie kravnesības dati tiek buferizēti pirms nosūtīšanas. Jūs varat piepildīt šo buferi ar datu baitiem, lai tos nosūtītu citam Arduino.

SerialTransfer.rxBuff

Šis ir baitu masīvs, kurā visi no otras Arduino saņemtās kravnesības dati ir buferizēti.

SerialTransfer.bytesRead

Otrās Arduino saņemtās un SerialTransfer.rxBuff uzglabātās kravas baitu skaits

SerialTransfer.begin (straume un _ports)

Inicializē bibliotēkas klases eksemplāru. Jūs varat nodot jebkuru "Serial" klases objektu kā parametru - pat "SoftwareSerial" klases objektus!

SerialTransfer.sendData (const uint16_t & messageLen)

Tas liek jūsu Arduino nosūtīt "messageLen" baitu skaitu pārraides buferī uz citu Arduino. Piemēram, ja "messageLen" ir 4, SerialTransfer.txBuff pirmie 4 baiti tiks nosūtīti, izmantojot sērijas datus, otram Arduino.

SerialTransfer.available ()

Tas liek jūsu Arduino analizēt visus saņemtos sērijas datus no otra Arduino. Ja šī funkcija atgriež Būla vērtību “true”, tas nozīmē, ka jauna pakete ir veiksmīgi parsēta un jauniegūtās paketes dati tiek saglabāti/pieejami mapē SerialTransfer.rxBuff.

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

Ievieto “len” patvaļīga objekta baitu skaitu (baiti, int, float, double, struktura utt.) Pārraides buferī, sākot ar indeksu, kā norādīts argumentā “index”.

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

Nolasa "len" baitu skaitu no saņemšanas bufera (rxBuff), sākot ar indeksu, kā norādīts argumentā "index", patvaļīgā objektā (baits, int, pludiņš, dubults, struktūra utt.).

PIEZĪME:

Vienkāršākais veids, kā pārsūtīt datus, ir vispirms definēt struktūru, kurā ir visi dati, kurus vēlaties nosūtīt. Arduino uztvērēja galā jābūt definētai identiskai struktūrai.

3. solis: Transmit Pamatdati

Šī skice pārraida gan analogRead (0) ADC vērtību, gan analogRead (0) vērtību, kas pārveidota par spriegumu uz Arduino #2.

Augšupielādējiet šādu skici Arduino #1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struktura STRUCT {uint16_t adcVal; pludiņa spriegums; } dati; void setup () {Serial.begin (115200); Seriāls1.sākt (115200); myTransfer.begin (Serial1); } void loop () {data.adcVal = analogRead (0); dati. spriegums = (data.adcVal * 5,0) / 1023,0; myTransfer.txObj (dati, lielums (dati)); myTransfer.sendData (sizeof (dati)); kavēšanās (100); }

4. darbība. Pamatdatu saņemšana

Šis kods izdrukā ADC un sprieguma vērtības, kas saņemtas no Arduino #1.

Augšupielādējiet šādu kodu Arduino #2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struktura STRUCT {uint16_t adcVal; pludiņa spriegums; } dati; void setup () {Serial.begin (115200); Seriāls1.sākt (115200); myTransfer.begin (Serial1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (dati, lielums (dati)); Sērijas nospiedums (data.adcVal); Serial.print (''); Serial.println (dati.priegums); Sērijas.println (); } cits if (myTransfer.status <0) {Serial.print ("ERROR:"); ja (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); cits ja (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); cits if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

5. darbība: pārbaude

Kad abas skices tika augšupielādēti to attiecīgo Arduinos, jūs varat izmantot Serial Monitor par Arduino # 2, lai pārliecinātos, jūs saņemat datus no Arduino # 1!

Ieteicams: