cu valori care variază de la 10 Ohm la 1 MOhm);

  • 2 rezistențe de 4,7 kOhm (din același set);
  • darts spochni (de exemplu, axa este bună);
  • computer cu Arduino IDE.
  • 1 Descriere Interfață I2C

    Protocolul de comunicație serială IIC (numit și I2C - Circuite Inter-Integrate) utilizează două linii de comunicație bidirecționale pentru a transmite date, numite magistrală de date seriale. SDA (date seriale) acea anvelopă este bătută SCL (ceas serial). Există și două rânduri pentru viață. Autobuzele SDA și SCL sunt trase la magistrala de viață prin rezistențe.

    Mi-ar plăcea să am unul dispozitiv cu fir (Master) Aceasta inițiază transferul de date și generează semnale de sincronizare. Măsuri de asemenea managementul dispozitivelor (slave), care transmit date liderului. Skin-ul dispozitivului este atribuit unei adrese unice, după care dispozitivul este direcționat către una nouă. Adresele dispozitivului sunt indicate în pașaport (fișa de date). La o magistrală I2C pot fi conectate până la 127 de dispozitive, în funcție de numărul de fire. Atunci roboții pot fi conectați la autobuz. Vaughn încurajează o conexiune fierbinte.

    Să aruncăm o privire rapidă asupra diagramei de schimb de protocol I2C. Există o serie de opțiuni, să ne uităm la una dintre cele mai largi. Accelerează cu un analizor logic, conectat la magistralele SCL și SDA.

    Stăpânul inițiază schimbul. În acest scop, VIN începe să genereze impulsuri de ceas și le trimite de-a lungul liniei SCL într-un pachet de 9 bucăți. În același timp, se afișează linia de date SDA Voi adăuga adrese, de aceea este necesar să instalați legături care sunt tactate de primele 7 impulsuri de ceas (din gama de adrese: 2 7 = 128 minus zero adrese). Bătălia ofensivă a așezării - tse cod de tranzacție(citește sau scrie) și încă un pic - bit de confirmare(ACK) pentru a confirma că dispozitivul a primit cererea. Dacă nu se primește confirmarea, schimbul se va încheia. Sau maestrul va continua să se forțeze să întrebe din nou.

    Acest lucru este ilustrat mai jos.. În prima fază, de exemplu, este necesară operarea dispozitivului din anvelopă. Se poate observa că masterul încearcă să stabilească o conexiune de la dispozitivul cu adresa 0x27, dar nu respinge confirmarea (NAK). Schimbul se va încheia.


    Acum ne conectăm la magistrala I2C a dispozitivelor și repetăm ​​operația. Situația s-a schimbat. Primul pachet cu adresa a primit o confirmare (ACK) așa cum a fost introdusă. Schimbul a continuat. Informațiile sunt transmise și folosind mesaje pe 9 biți, dar acum durează 8 biți Omagiuși 1 bit - bit de confirmare otrimannya conducem datele de octet de piele. Dacă în orice moment conexiunile sunt întrerupte și nu sosește confirmarea, comandantul va fixa transmisia.

    2 Implementarea I2Cîn Arduino

    Arduino vikorist pentru roboți cu interfață I2C, două porturi. De exemplu, portul analog Arduino UNO și Arduino Nano A4 acceptă SDA, portul analogic A5 acceptă SCL.


    Pentru alte modele de plăci, tipul de conexiuni este următorul:

    3 Biblioteca „Fire” pentru roboți z IIC

    Pentru a facilita schimbul de date cu dispozitivele prin intermediul magistralei I2C, a fost scrisă o bibliotecă standard pentru Arduino Sârmă. Are urmatoarele functii:

    FuncţieMisiune
    incepe (adresa) Inițializarea bibliotecii și conectarea la magistrala I2C; Dacă nu este specificată o adresă, dispozitivul trebuie să fie acceptat de furnizor; Se folosește adresarea pe 7 biți;
    o cerere de la() Vikorist este folosit de un dispozitiv cu fir pentru a furniza un număr mare de octeți din date;
    startTransmission(adresa) începutul transferului de date către dispozitivul desemnat în spatele adresei melodiei;
    endTransmission() implementarea transferului de date către slave;
    scrie() înregistrarea datelor introduse în cerere;
    disponibil() rotește numărul de octeți de informații disponibili ca intrare;
    citit() citirea unui octet transmis de la master la master sau de la master la slave;
    onReceive() indică funcția care apelează buta atunci când șoferul dispozitivului respinge transmisia de la master;
    la cerere() Indică o funcție care este apelată atunci când dispozitivul cu fir respinge transmisia de la slave.

    4 Voi instala conexiuni I2C la Arduino

    Să vedem cum funcționează magistrala I2C cu Arduino.

    Să alcătuim imediat o diagramă, ca una mică. Pe baza luminozității LED-ului, există un potențiometru digital cu 64 de poziții AD5171 (Div. Descriere tehnică), care este conectat la magistrala I2C. Adresele pentru care vom apela la potențiometru sunt 0x2c (44 pentru al zecelea sistem).


    5 Controlul dispozitivului prin autobuzul IIC

    Să aruncăm o privire la diagramele schimbului de informații cu potențiometrul digital AD5171, prezentate în descrierea tehnică:


    Faceți clic aici pentru o diagramă a datelor de înregistrare în registru RDAC. Acest registru este utilizat pentru întreținerea suportului potențiometrului.

    Schiță din biblioteca „Wire”: Zrazka Wire file digital_potentiometer. Interesat de puzzle-ul Arduino.

    #include // Include biblioteca "Wire" byte val = 0; // valorile transferate potențiometrului void setup() ( Wire.begin(); // se conectează la magistrala I2C ca master } void loop() ( Wire.beginTransmission(44); // începe comunicarea de la dispozitiv cu adresa I2C „44” (0x2C) Wire.write(byte(0x00)); // emite instrucțiunea de a scrie registrul RDAC Wire.write(val); // setează poziția potențiometrului cu 64 de poziții Wire.endTransmission(); // transfer I2C complet val++; // increment val cu 1 if (val == 63) ( // după atingerea maximului potențiometrului val = 0; // reset val ) delay(500); }

    Când este pornit, veți vedea cum luminozitatea LED-ului crește ciclic și apoi se stinge. În acest caz, potențiometrul este conectat la un Arduino suplimentar prin magistrala I2C.

    Am primit un transport din China care conținea un microcircuit EEPROM Atmel. Aș dori să mă conectez la Arduino. Dar nu vrea să distrugă deloc biblioteca gata făcută, ci să înceapă să se construiască. Acest articol este scurt și plictisitor și poate fi împărțit în trei părți:

    • Teoria interfeței I2C.
    • EEPROM, descrieri ale microcircuitelor mele (AT24C256) și conexiuni.
    • Scrierea unei biblioteci înainte de a lucra din memorie.

    O parte din primul, I2C și biblioteca „Wire”.

    Protocol de schimb secvenţial de date IIC(de asemenea, titluri I2C- Circuite inter-integrate, conexiune inter-microcircuite). A fost dezvoltat de Philips Semiconductors la începutul anilor 1980 ca o simplă magistrală internă de 8 biți pentru electronicele pe care le controlează. Deci, cum este dreptul la vikoristannya yogo care costă bănuți Atmel pharma numit yogo TWI, Ale cărui sens se schimbă.

    Cum funcţionează asta?

    Pentru transmisie se folosesc două linii de transmisie bidirecționale. S.D.A.(Serial Data) magistrală de date seriale SCL(Ceas serial) Timp autobuz. Cele două magistrale sunt trase în sus de rezistențe la magistrala de viață pozitivă. Transmisia/recepția semnalelor funcționează pe linia 0, unică se instalează singur, în spatele cadrului rezistențelor de tragere.

    Doriți un dispozitiv cu fir ( Maestru), care inițiază transferul de date și generează semnale de sincronizare și control al dispozitivului ( Sclav), care transmit date liderului. Skin-ul dispozitivului este atribuit unei adrese unice, după care dispozitivul este direcționat către una nouă. A devenit clar că Leader este microcontrolerul nostru, iar Leader este memoria noastră. Dispozitivul cu fir începe să apese pe anvelopă SCL la zero cu puritatea cântând, și anvelopa S.D.A. apăsați sau eliberați un număr de bare în melodie, transmițând Single sau Nulik. Transmiterea datelor începe cu semnalul START, apoi sunt transmisi 8 biți de date și este trimis al 9-lea bit.Dispozitivul slave confirmă primirea octetului apăsând magistrala. S.D.A. la minus . Transmisia se termină cu semnalul STOP .

    Biblioteca „Fire”.

    Pentru a facilita schimbul de date cu dispozitivele prin intermediul magistralei I2C, a fost scrisă o bibliotecă standard pentru Arduino Sârmă iac De asemenea, inclus în kitul IDE. Are următoarele funcții principale:

    Wire.begin(Adresă)Faceți clic o dată pentru a inițializa și a vă conecta la magistrală ca dispozitiv Master sau Master. Adresa fără sarcini este conectată ca dispozitiv Master.

    Wire.beginTransmission(adresă) începe transmisia către dispozitivele I2C cu adresa specificată.

    Wire.endTransmission() se referă la transferul de date către led. Funcția rotește valorile octeților:

    • 0 - succes.
    • 1 datele sunt prea lungi pentru a umple memoria tampon de transmisie.
    • 2 — NACK a fost primit la ora transmiterii adresei.
    • 3 - NACK primit pe oră de transmisie de date.
    • 4 - alte beneficii.

    Wire.write() Datele de înregistrare de pe dispozitiv trimise către dispozitiv sunt trimise către dispozitivul cu fir sau introduse în octeți pentru transmiterea de la master la dispozitiv. De fapt, scrie date în buffer. Dimensiunea memoriei tampon 32 de octeți a (minus 2 octeți la adresă, de fapt 30 octeți), iar funcția transferă tamponul Wire.endTransmission().

    • Wire.write(valoare)- valoare: valoare de transfer, un octet.
    • Wire.write(șir)-şir: ordine de transmisie, secvență de octeți.
    • Wire.write (date, lungime)-Date: matrice de date de transmis, octeți. lungime: numărul de octeți de transferat.

    Wire.read() Citește un octet, care este numărul de transmisii de la dispozitivul condus la master sau orice număr de transmisii de la dispozitivul cu fir la cel cu fir. Înseamnă că octetul este rotit: octetul primit.

    Acestea sunt funcțiile principale ale unei biblioteci și ne vom uita la altele pe parcurs))

    Parte dintr-un prieten, EEPROM.

    EEPROM Memorie programabilă doar pentru citire ștergabilă electric) - șterge electric PZP (EEPROM), care este reprogramat, unul dintre tipurile de memorie nevolatilă (cum ar fi PROM și EPROM). O memorie de acest tip poate fi ștearsă și uitată de date de până la un milion de ori.

    Mi s-a trimis un modul EEPROM gata făcut cu un microcircuit AT24C256 de la Atmel cu un volum de 32 kbytes. Pentru a cunoaște această minune, avem șansa să studiem fișa cu date atât de plictisitor și englezesc. Așa că pot vedea rezultatul final al chinului meu.

    Caracteristici:

    • Tensiune joasă și viață standard. VCC = 1,7 V până la 5,5 V.
    • Suma frecvenței de sincronizare de 400 kHz (1,7 V) și 1 MHz (2,5 V, 2,7 V, 5,0 V).
    • Vitalitate: 1.000.000 de cicluri de înregistrare.
    • Organizații interne: 32768 pagini x 8 biți.

    visnovki:

    • W.P.- Protejați înregistrarea. Dacă faceți conexiuni la GND, puteți înregistra date pe puzzle.
    • A0...A2- Vă rugăm să întrebați adresa anexei.
    • Vcc- Mâncare plus.
    • GND- Minus de mâncare.
    Adrese de memorie:

    Cele trei picioare sunt stabilite de A0..A2. Dacă piciorul este apăsat la Gnd, atunci valoarea bitului este 0, dacă până la Vcc atunci 1. Microcircuitul este vicoristic adresa de opt biți, bitul rămas indică alegerea operației. Dacă valoarea bitului este mare, atunci se inițiază operația de citire, dacă valoarea este scăzută (zero), atunci se inițiază operația de scriere.

    Dacă toți cei trei pini sunt apăsați pe GND și vrem să le scriem în memorie, adresele dispozitivului vor arăta ca 10100000 (biblioteca „Wire” folosește adrese de 7 biți, transformând totul la dreapta unui bit 0101000 0 0x50).

    Înregistrarea omagilor aduse ghicitorii:

    Pentru a înregistra de la început ne întoarcem la memorie cu bit Înregistrări la adresa. Apoi se adaugă două adrese de 8 biți (deci avem o adresă 0x8000), apoi un octet de date și un semnal STOP. După aceasta, EEPROM intră înaintea ciclului de scriere sincronizat intern tWR (Write Cycle Time 5 ms) în memoria nevolatilă. Toate semnalele de intrare
    pornit pentru un ciclu de înregistrare orară și EEPROM-ul nu este corect până când înregistrarea este finalizată.

    Săpăm mai departe și aflăm în fișa de date că memoria microcircuitelor este organizată ca 512 unul langa altul 64 octet. Apoi putem scrie până la 64 de octeți de informații per comandă. Pentru care transmitem toți cei 64 de octeți de informații și abia apoi semnalul STOP.

    Citind omagiile:

    Citind aceste date, vei fi fericit. Memoria acceptă trei opțiuni de citire:

    • Citiți adresa exactă;
    • Citiți adresa lui Vipadkov;
    • Lectură consecventă;

    Memoria reține adresa rămasă a înregistrării și nu schimbă durata de viață, astfel încât putem citi octetul rămas fără a introduce adresa.

    Trebuie să citim adresa de la început trimite o comandă pentru a scrieși transmiteți-l la adresa pe care doriți să o citiți( Nu uitați că adresele sunt formate din două părți de 8 biți). Apoi trimiteți o comandă pentru a citi și elimina octetul citit, terminând totul cu comanda STOP.

    Citirea ulterioară poate fi finalizată fie de la adresa fluxului, fie de la adresa de ieșire și va continua până când microcontrolerul nu a găsit semnalul STOP. Când adresa este schimbată, memoria va fi ștearsă și adresarea va dispărea.

    Ei bine, a venit momentul să încerci să scrii:
    #include // Includeți biblioteca #define EEPROM_ADDRESS 0x53 // Setați adresa de cuvânt a adresei de memorie = 0; // Adresele Cudi sunt înregistrate byte data_send = 170; // Data void setup() ( Wire.begin(); // Inițializează I2C Serial.begin(9600); Serial.print ("Scrie octet în memoria EEPROM..."); Serial.println (trimite_date); Wire. beginTransmission(EEPROM_ADDRESS);// Începe transmisia Wire.write(adresa >> 8);Wire.write(adresă & 0xFF);// Trimite doi octeți de adresă Wire.write(data_send); endTransmission(); // Termină transmisia verificăm starea transmisiei.if (status == 0)Serial.println ("Ok"); // delay(10); ), Wire.beginTransmission(EEPROM_ADDRESS); // Pentru a citi datele, deschideți adresa corectă. (starea == 0) Serial.println("Ok"); // opriți transmiterea Wire.requestFrom(EEPROM_ADDRESS, (octet)1); // trimite o comandă pentru a citi un octet de date octet de date = 0; if (Wire.available ()) // verificați ce date trebuie citite (data = Wire.read(); // citiți date) Serial.println (date, DEC); ) bucla void() ( )

    Wire.requestFrom(adresă, cantitate) — Vikory este folosit de maestru pentru a scrie octeți de pe dispozitivul ceramic. Acești octeți pot fi eliminați folosind metodele available() și read(). Dimensiunea tamponului este aceeași de 32 de octeți.

    • adresa : voi adăuga o adresă de 7 biți de la care vor fi primiți octeți;
    • cantitate : numărul de octeți de preluat;

    Wire.available()— Rotește numărul de octeți disponibili pentru extragere folosind read().

    Ei bine, iată un exemplu de intrare în memoria rândului „Cuvânt Bună”:

    #include #define EEPROM_ADDRESS 0x53 cuvânt adresa = 0; char data_send = "Salut Word"; void setup() ( Wire.begin(); // Serial.begin(9600); Serial.print("Scrie octet în memoria EEPROM..."); Serial.println (trimitere_date); Wire.beginTransmission(EEPROM_ADDRESS); Wire.write (adresă >> 8); Wire.write (adresă & 0xFF); Wire.write (data_send); delay (10); Serial.println ("Citește octet din memoria EEPROM..."); Wire.endTransmission (); dacă (starea == 0) Serial.println ("Ok"); // opriți transmiterea Wire.requestFrom(EEPROM_ADDRESS, (byte)10); octet de date = 0; i<10 ;i++) { if (Wire.available()) { data = Wire.read(); } Serial.write (data); } } void loop() { }

    Organizarea memoriei:

    Deci, nu este clar ce este scris despre aceasta în înregistrările istorice. Practic încerc să ies de aici. Fișa tehnică spune că memoria microcircuitelor este organizată ca 512 unul langa altul 64 octet. Ce înseamnă acest lucru? Dacă vrem să scriem mai mult de 64 de octeți pe cadru, să spunem în spatele adresei 0x40 (adresele de cealaltă parte), când adresa trece dincolo de cealaltă parte Medicul microcircuit intern vă rugăm să contactați adresa de pe prima pagină. Iar octeții de solicitări vor fi înregistrați pe prima pagină și datele care au fost înregistrate acolo vor fi șterse.

    Pentru a citi astfel de limite, nu există limite; foaia de date spune doar că atunci când ajungeți la adresa finală, veți fi transferat automat la început (adresele 0x00).

    De aceea cred că asta-i tot. Desigur, puteți folosi o bibliotecă gata făcută pentru EEPROM și credeți că o puteți scrie pe propria dvs. Am ajuns să înțelegem principiile de bază ale robotului.

    În acest articol, am încercat să colectăm mesaje pentru toate cele mai populare biblioteci Arduino într-un singur loc și, de asemenea, am pregătit o colecție a celor mai populare biblioteci. Mai devreme sau mai târziu, orice dezvoltator Arduino se va confrunta cu nevoia acestei biblioteci sau a oricărei alte biblioteci. Chiar și codul gata făcut de vikoristannaya chiar scurtează ora de programare. Sperăm că, adunate într-un singur loc și furnizate cu mesaje pentru descărcare și scurte butoane ale Wikoristan, informațiile despre bibliotecile populare vă vor ajuta cu proiectele dvs.

    Biblioteca Arduino este un cod de program care este salvat nu în schițe, ci în fișiere externe care pot fi conectate la proiectul dvs. Biblioteca utilizează diverse metode și structuri de date care sunt necesare pentru a simplifica lucrul cu senzori, indicatori, module și alte componente. O selecție de programe gata făcute va face mai ușor să lucrați la proiecte, astfel încât să vă puteți concentra pe logica principală fără a pierde ore în muncă inactiv.

    Astăzi, au fost create un număr mare de biblioteci care pot fi găsite și accesate cu ușurință pe Internet. Este important ca majoritatea bibliotecilor să fie distribuite sub o licență gratuită, deci nu este nevoie să căutați versiuni „pirate”. Golovne, tse navchitisya.

    Biblioteci standard Arduino

    Începeți să învățați despre biblioteci cel mai bine pe site-ul oficial, unde puteți găsi o listă cuprinzătoare de module standard și link-uri către bibliotecile oficiale ale partenerilor.

    Lista bibliotecilor incluse (toate furnizate cu distribuția IDE Arduino):

    • EEPROM
    • Ethernet / Ethernet 2
    • Firmata
    • Cristal lichid
    • Servo
    • SoftwareSerial
    • stepper

    Colecție de biblioteci într-o arhivă

    Dacă nu aveți suficient timp pentru o analiză detaliată a site-urilor anonime și doriți să colectați tot ce aveți nevoie pentru a lucra cu dispozitivele Arduino actuale într-o arhivă, am pregătit o listă cu 40 dintre cele mai populare biblioteci. Doar despachetați-l (dosarul biblioteci) din folderul Arduino.

    Biblioteci pentru ecrane, indicatoare și afișaje

    Biblioteca I2C

    Biblioteca este destinată utilizării în dispozitive periferice care utilizează protocolul I2C.

    fundul Vikoristan:

    #ifndef I2C_MASTER_H

    #define I2C_MASTER_H

    void I2C_init (void) – crearea unui obiect, ajustat la frecvența corectă pentru magistrală.

    uint8_t I2C_start () – conexiune stabilită cu un dispozitiv nou.

    uint8_t I2C_write() – scrierea datelor pe dispozitivul de streaming.

    uint8_t I2C_read_ack() – citește octetul de pe dispozitiv, scrie octetul următor.

    Biblioteca LiquidCrystal

    Bibliotecă standard instalată în Arduino IDE. Proiectat pentru a fi utilizat cu ecrane LCD cu cristal rare.

    fundul Vikoristan:

    #include . De asemenea, pentru a nu-ți face griji în ceea ce privește scrierea, te poți conecta prin meniul Sketch – Import Library – LiquidCrystal.

    Constructorul clasei este LiquidCristal(…). Argumentele sunt rs, rw, en, do ... d7. Primele 3 semnale sunt RS, RW și Enable. Simbolurile d indică numerele magistralelor de date la care este conectat afișajul.

    void begin(cols, rows) – o metodă care inițializează interfața de afișare. Argumentele sunt numărul de caractere dintr-un rând (cols) și numărul de rânduri (rânduri). Această metodă poate fi pusă la îndoială mai întâi.

    void createChar(num, data) - metodă necesară pentru crearea simbolurilor koristuvach.

    Biblioteca UTFT

    Bibliotecă standard, necesară pentru roboții Arduino cu ecrane TFT de diferite tipuri. Toate afișajele acceptate sunt prezentate într-un document însoțitor cu bibliotecă.

    fundul Vikoristan:

    #include

    UTFT(); - Crearea unei copii UTFT.

    textRus(char*st, int x, int y); – o metodă care vă permite să afișați un rând din indicator. De exemplu, char * dht = "Temperatura, C";

    textRus(șir st, int x, int y); - Afișează rândul din setările din parametru. De exemplu, g.textRus("Temperatura, C", 0, 20);

    Biblioteca LedControl

    Vă permite să utilizați afișaje cu șapte segmente, combinând o serie de LED-uri într-o singură matrice.

    fundul Vikoristan:

    #include

    LedControl lc1 = LedControl();

    - Necesar pentru inițializarea bibliotecii. Este necesar să combinați patru argumente - numărul de pini la care este conectat afișajul (primele 3 argumente) și numărul de cipuri conectate.

    writeArduinoOn7Segment() - afișează pe afișaj toate numerele de la 0 la 15. Funcțiile Vikorist setChar() pentru caracterele a, d și setRow() pentru a crea un aspect pentru caracterele lipsă.

    LedControl.shutdown() – închide imaginea.

    setIntensity() – controlul luminozității.

    Biblioteci pentru roboti cu data si ora Arduino

    Biblioteca RTClib

    O bibliotecă pentru lucrul cu un ceas în timp real, care va facilita interacțiunea cu Arduino.

    fundul Vikoristan:

    #include

    RTC_DS1307 RTC; - Vibrație senzor (în acest caz DS1307).

    rtc.adjust(DateTime(Data, Ora)); – reglarea orei și calendarului.

    dayOfTheWeek () – afișează ziua săptămânii. Argument: 0 la 6, 0 – săptămână.

    Biblioteca Timelib

    Permite Arduino să preia informații despre data și ora la momentul curent.

    fundul Vikoristan:

    #include

    Timp(); - Crearea unei copii.

    setTime(t); - Este setat la ora. Argumentul t – anul, ora, secunda, ziua, luna si ziua.

    timeStatus(); - Indicați ce oră este setată.

    adjustTime(ajustare); - E timpul să o reparăm.

    Biblioteca Ds1307

    Bibliotecă pentru interacțiunea manuală a DS1307 cu Arduino și biblioteca Wire.

    fundul Vikoristan:

    #include

    clasa DS1307RTC – crearea obiectului DS1307.

    SetTime() – setați ora.

    get() – citește RTC, rotește data extrasă în format POSIX.

    Set(time_t t) – data înregistrării de la RTC

    Biblioteca DS 3231

    Atribuit datei și orei modulului ds3231.

    #include „ds3231.h”

    Ceas DS3231 (SDA, SCL); – crearea obiectului DS3231, conexiune la linia de ceas și linia de date.

    Fă-ți timp(); - citiți data aniversării.

    setDate(data, luni, year); - Data stabilită.

    Biblioteci de sistem Arduino

    Biblioteca EEPROM

    Biblioteci standard. Utilizări pentru lucrul cu memorie neenergetică (înregistrarea datelor, citirea).

    fundul Vikoristan:

    #include

    EEPROM.read(); - Crearea obiectului, citirea octetului la adresa din memoria nevolatilă.

    EEPROM.write(adresă, valoare) – scrie un octet în memoria nevolatilă.

    EEPROM.put() – înregistrarea serii de numere dintr-o comă plutitoare.

    EEPROM.get() – citirea rândurilor de numere plutitoare.

    Software de bibliotecă Serial

    O bibliotecă care vă permite să implementați interfețe ulterioare de la orice pin digital. De asemenea, vă permite să deschideți un număr de porturi ulterioare care funcționează la viteze de până la 115.200 baud.

    #include

    SoftwareSerial mySerial(RX, TX) – obiectul de creare, argumente – elementele de bază ale conexiunilor RX și TX.

    Serial.begin(); – instalează fluiditate pe portul pentru conectarea Arduino la computer.

    mySerial.overflow() – depășirea tamponului de intrare.

    Matematică de bibliotecă

    Include un număr mare de funcții matematice pentru lucrul cu numere flotante.

    fundul Vikoristan:

    #include

    Matematică(); - Crearea unei copii de Math.

    Serial.print("cos num = "); - Rotiți cosinusul unui număr.

    Serial.println(fmod(double__x, double__y)); - Rotiți numerele modulo.

    Programator bibliotecă

    Proiectat pentru roboți cu Arduino Due, care vă permite să lucrați în modul multitasking. Deocamdată este o bibliotecă experimentală.

    fundul Vikoristan:

    #include

    Programator; - Crearea unei copii.

    Scheduler.startLoop() – vă permite să adăugați o funcție care iese imediat din loop().

    yield() – vă permite să transferați procesarea către alte sarcini.

    Biblioteci de servomotoare și motoare

    Biblioteca Servo

    Biblioteci standard. Este necesar pentru funcționarea servomotoarelor și este adesea folosit în proiecte robotizate cu manipulatoare.

    fundul Vikoristan:

    #include

    Servo myservo; - Crearea unui obiect pentru servomotor.

    myservo.attach(); - Numărul ieșirii la care este conectat servomotorul.

    myservo.write(180, 30, true); - Rotire 180 de grade, viteza 30, rotire completa.

    Library Stepper

    Necesar pentru tratamentul motoarelor unipolare și bipolare din sânge.

    #include

    const int stepsPerRevolution = ; – de câte ori ia motorul să facă o viraj.

    Stepper myStepper = Stepper(steps, pin1, pin2) – creează o instanță a unei clase din numărul specificat de pași și vârfuri la care este conectat motorul.

    Biblioteci de senzori Arduino

    Biblioteca DHT

    #include< DHT.h>

    DHT dht(DHTPIN, DHT11); – inițializează senzorul (în cazul DHT11).

    dht.begin(); - Pornirea senzorului.

    float t = dht.readTemperature(); - Citirea valorii temperaturii pe tur în grade Celsius.

    Biblioteca DallasTemperatura

    Aplicații pentru roboți cu senzori Dallas. Funcționează simultan din biblioteca OneWire.

    #include

    DallasTemperature dallasSensors(&oneWire); - Transferul obiectului oneWire către robotul senzor.

    a trecut în registru.

    printTemperature(adresa senzorului); – se aplică pentru a obține valoarea curentă a temperaturii.

    Biblioteca cu ultrasunete

    Robotul Arduino va fi protejat de un senzor de vibrații ultrasonic HC-SR04.

    #include

    Ultrasunete cu ultrasunete (tig, ecou) – stunează obiectul, argumente – Trig contact și Echo contact.

    dist = ultrasonic.distanceRead(); - Distanța desemnată depinde de obiect. Argument – ​​centimetri (CM) chi inci (INC).

    Timing() – citirea valorii impulsului la ieșirea Echo, convertind-o la sistemul numeric necesar.

    Biblioteca ADXL345

    Proiectat pentru utilizare cu accelerometrul ADXL345.

    fundul Vikoristan:

    #include

    ADXL345_ADDRESS – obiect creat alocat adresei sale.

    ADXL345_REG_DEVID – identificarea dispozitivului.

    ADXL345_REG_OFSX – axa X suprimată.

    ADXL345_REG_BW_RATE – suport pentru viteza de transmisie a datelor.

    Biblioteca BME280

    Potrivit pentru lucrul cu senzor de temperatură, umiditate și menghină BME280.

    fundul Vikoristan:

    #include

    BME280_ADDRESS – obiectul creat BME280, alocat adresei sale.

    begin(uint8_t addr = BME280_ADDRESS); - Senzor robot Cob.

    getTemperature — obsesia temperaturii reale.

    getPressure – obsesia pentru un viciu magic.

    Biblioteca BMP280

    Necesar pentru roboții cu senzor de presiune atmosferică BMP280.

    fundul Vikoristan:

    #include

    BMP280_CHIPID – crearea unei instanțe, inserarea adresei.

    getTemperature(float *temp); - mentinerea temperaturii extreme.

    getPressure(float *presiune); - Tăierea valorii menghinei.

    Biblioteca BMP085

    Necesar pentru roboții cu senzor de menghină BMP085.

    fundul Vikoristan:

    #include

    Adafruit_BMP085 bmp; - Crearea copiei BMP085.

    dps.init(MODE_ULTRA_HIGHRES, 25000, true); - Vymiryuvannya vice, argument 25000 - înălțime deasupra nivelului mării (în acest caz 250 m deasupra nivelului mării).

    dps.getPressure(&Presiunea); - Viciul este repartizat.

    Biblioteca de amprente

    Trebuie să utilizați un scanner cu degete.

    fundulwikiristannya:

    #include

    Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); – uluit de obiectul Finger. Parametrul este trimis la site pentru operare cu UART, înainte ca orice modul să fie conectat.

    finger.begin(); - Inițializarea modulului cu vârful degetelor.

    Func_sensor_communication(); - Faceți clic pe modulul senzorului pentru degete.

    Biblioteci de comunicare

    Sârmă de bibliotecă

    Necesar pentru funcționarea cu o interfață I2C bi-cablată.

    fundul Vikoristan:

    #include

    Wire.begin() – inițializarea bibliotecii, conectată la magistrala I2C.

    Wire.requestFrom() – umple masterul cu octeți de la dispozitivul hardware.

    Wire.beginTransmission() – începutul transmisiei către dispozitiv.

    Biblioteca Iremotă

    Este necesar ca robotul să folosească Arduino cu IC.

    fundul Vikoristan:

    #include

    IRrecv irrecv(RECV_PIN); - PIN, înainte de acceptarea oricărei conexiuni ІЧ.

    SetPinAndButton(int ir1, int ir2, int pin) - vă permite să configurați ieșirea care urmează să fie solicitată atunci când sunt specificate valorile lui ir1, ir2.

    biblioteca GSM

    Necesar pentru conectarea prin card GSM cu rețeaua GSM/GRPS. Cu acest ajutor, puteți efectua operațiuni care implică utilizarea unui telefon GSM, gestionarea apelurilor vocale și conectarea la Internet prin GRPS.

    fundul Vikoristan:

    #include

    GSM GSMAccess – inițializează o instanță a clasei.

    gprs.powerOn() – viață crescută.

    GPRS – configurarea unei conexiuni la Internet.

    GSM – conexiune radio modem.

    Biblioteca RFID

    Necesar pentru conectarea Arduino și modulul RFID.

    fundul Vikoristan:

    #include

    RFID RFID (SS_PIN, RST_PIN); - Crearea unei instanțe rfid, argumente - pini, la orice modul de conexiuni.

    rfid.init(); - Initializarea modulului RFID.

    Biblioteca MFRC 522

    Necesar pentru conectarea Arduino și modulul MFRC522.

    fundul Vikoristan:

    #include

    MFRC522 mfrc522(SS_PIN, RST_PIN); – o instanță creată a MFRC522, argumentele indică ieșirea la care este conectat modulul.

    mfrc522.PCD_Init(); - Inițializarea MFRC522.

    Biblioteca Ethershield

    Noua versiune https://github.com/jcw/ethercard

    Necesar pentru a conecta Arduino la o rețea locală sau la Internet. Biblioteca nu mai este acceptată, versiune nouă de Ethercard. Există, de asemenea, o bibliotecă Ethernet standard.

    fundul Vikoristan:

    #include „EtherShield.h”

    #include

    EtherShield es = EtherShield(); – pregătirea unei pagini web

    ether.begin(dimensiunea Ethernet::buffer, mymac,); - Începutul lucrării, argumente - Adresele Mac și numărul portului la care este conectată ieșirea CS.

    Biblioteca Nrf24l01

    Necesar pentru roboții cu modul radio RF24.

    fundul Vikoristan:

    #include „RF24.h”

    RF24 - Constructorul creează o nouă instanță a driverului. Înainte de a selecta modulul, trebuie să creați o instanță și să specificați un pin înainte de orice conexiune la cip (_cepin: Activare pin modul, cspin: Selectare pin modul).

    Început – începutul unui cip robotizat.

    setChannel – canal de comunicare RF.

    setPayloadSize – setarea unei dimensiuni de transfer fix.

    getPayloadSize – selectarea unei dimensiuni fixe.

    Biblioteca TinyGPS

    Este necesar să citiți notificările GPGGA și GPRMC. Vă ajută să citiți date despre poziție, dată, oră, altitudine și alți parametri.

    fundul Vikoristan:

    #include

    GPS TinyGPS; - Crearea unei instanțe TinyGPS.

    encode() – trimiterea de date secvențiale către obiect, câte un caracter.

    gps.stats() – metoda statisticilor. Arată dacă datele corecte au fost eliminate sau nu.

    Biblioteci în Arduino IDE

    Dintre diversitatea bibliotecilor, se pot vedea 3 grupuri principale:

    • Acestea sunt biblioteci care sunt instalate inițial în nucleul IDE-ului Arduino. Nu trebuie să fie descărcate sau instalate suplimentar; sunt disponibile pentru descărcare din program imediat după începerea procesului de dezvoltare.
    • Bibliotecile suplimentare sunt biblioteci care trebuie achiziționate independent. Acest tip de bibliotecă conține o colecție de senzori, senzori și alte componente pentru a facilita funcționarea Arduino.
    • Biblioteci întârziate – sunt instalate ca o bară laterală a bibliotecii suplimentare, care nu funcționează direct cu aceasta.

    Cel mai simplu mod de a lucra cu biblioteci în Arduino este să exploatezi capacitățile mijlocului IDE-ului Arduino. Să vorbim despre asta în statisticile oficiale.

    Ecran LCD- Invitat frecvent al proiectelor Arduino. Totuși, în circuitele pliabile este posibil să avem o problemă cu lipsa porturilor Arduino din cauza necesității de a conecta un ecran, care are o mulțime de contacte. Ieșirea din această situație poate fi I2C/IIC Un adaptor care conectează un ecran Arduino 1602 practic standard la plăcile Uno, Nano sau Mega cu încă 4 pini. Acest articol arată cum puteți conecta un ecran LCD cu o interfață I2C, cum puteți accesa biblioteci, cum puteți scrie un scurt exemplu și cum puteți privi aplicațiile tipice.

    Ecran cu cristale lichide LCD 1602 Este prima alegere pentru afișarea șirurilor de simboluri în diferite proiecte. Este ieftin, cu diverse modificări cu diferite culori de iluminare de fundal, puteți crea cu ușurință biblioteci gata făcute pentru schița Arduino. Dar cel mai mare dezavantaj al acestui ecran este faptul că display-ul are 16 elemente digitale, dintre care sunt cel puțin 6. Acest ecran LCD fără i2c este o problemă serioasă pentru plăcile Arduino Uno sau Nano. Dacă nu există contacte, va trebui să cumpărați o placă Arduino Mega sau să protejați contactele, inclusiv pentru conectarea display-ului prin i2c.

    Scurtă descriere a LCD 1602 pini

    Să aruncăm o privire mai atentă la tehnologia LCD1602:

    Pielea din viță de vie are propriul ei sens:

    1. Pământ GND;
    2. Kharchuvannya 5;
    3. Setarea contrastului monitorului;
    4. Echipa, date;
    5. Înregistrarea și citirea datelor;
    6. Permite;

    7-14. linii de date;

    1. Plus suport;
    2. Iluminare minus.

    Specificații afișaj:

    • Tip simbolic de afișare - posibilitatea introducerii simbolurilor;
    • iluminare din spate cu LED;
    • Controler HD44780;
    • Tensiune curentă 5V;
    • Format 16x2 caractere;
    • Interval de temperatură de funcționare: -20°С până la +70°С, interval de temperatură de depozitare: -30°С până la +80°С;
    • Lasă-mă să mă uit la 180 de grade.

    Schema de conectare a LCD-ului la placa Arduino fără i2C

    Schema standard pentru conectarea unui monitor direct la un microcontroler Arduino fără I2C arată astfel.

    Din cauza numărului mare de contacte care sunt conectate, este posibil să nu existe suficient spațiu pentru a primi elementele necesare. Comutatorul I2C schimbă numărul de săgeți la 4 și numărul de pini ocupați la 2.

    De unde să cumpărați ecrane LCD și scuturi pentru Arduino

    Ecranul LCD 1602 (și versiunea 2004) este foarte popular, așa că îl puteți găsi cu ușurință atât în ​​magazinele online locale, cât și pe piețele externe. Să aruncăm o privire la opțiunile disponibile:

    Modul LCD1602+I2C cu ecran albastru, combinat cu Arduino Un afișaj LCD1602 simplu (iluminare de fundal verde) mai ieftin de 80 de ruble Ecran LCD2004 mare cu I2C HD44780 pentru Arduino (iluminare de fundal albastră și verde)
    Display 1602 cu adaptor IIC și lumini albastre O altă versiune a LCD1602 cu un modul I2C lipit Modul adaptor Port IIC/I2C/TWI/SPI pentru ecran 1602, potrivit pentru Arduino
    Display cu comutatoare RGB! LCD 16×2 + tastatură + Buzzer Shield pentru Arduino Shield pentru Arduino cu butoane și ecran LCD1602 LCD 1602 Afișaj LCD pentru imprimantă 3D (controller inteligent pentru RAMPS 1.4, LCD text 20×4), modul cititor de carduri SD și MicroSD

    Descrierea protocolului I2C

    Mai întâi, să vorbim pe scurt despre conectarea afișajului la Arduino printr-un adaptor i2c. Să vorbim pe scurt despre protocolul i2C în sine.

    I2C/IIC(Inter-Integrated Circuit) este un protocol care a fost creat inițial pentru a conecta circuite integrate în mijlocul unui dispozitiv electronic. Designul aparține companiei Philips. Protocolul i2c se bazează pe o magistrală vicoristică de 8 biți, care este necesară pentru conectarea blocurilor din electronica pe care o controlează, și un sistem de adresare, care poate fi conectat de-a lungul acelorași fire cu un conector și anexe. Pur și simplu furnizăm date unuia sau altui dispozitiv, adăugând la pachetele de date identificatorul elementului necesar.

    Cel mai simplu circuit I2C poate găzdui un dispozitiv cu fir (de obicei un microcontroler Arduino) și multe dispozitive (de exemplu, un afișaj LCD). Fiecare dispozitiv are o adresă în intervalul de la 7 la 127. Nu este necesar ca două dispozitive cu aceeași adresă să fie în același circuit.

    Placa Arduino acceptă i2c la nivel hardware. Puteți utiliza pini A4 și A5 pentru a conecta dispozitive folosind acest protocol.

    În robotul I2C puteți vedea o serie de avantaje:

    • Lucrarea necesită cel puțin 2 linii – SDA (linie de date) și SCL (linie de sincronizare).
    • Conectarea unui număr mare de dispozitive cu fir.
    • Schimbarea orei tulburărilor.
    • Pentru a controla întregul set de dispozitive, este necesar un singur microcontroler.
    • Orice număr de microcircuite care sunt conectate la o magistrală sunt înconjurate doar de o capacitate de limită.
    • Un nivel ridicat de economisire a datelor printr-un filtru special suprimă stropirile generate în circuite.
    • O procedură simplă pentru diagnosticarea defecțiunilor care apar și remedierea defecțiunilor.
    • Autobuzul este deja integrat în Arduino în sine, deci nu este nevoie să extindeți în continuare interfața magistralei.

    Nedoliky:

    • Deviația de bază pe linie este de 400 pF.
    • Este important să programați controlerul I2C, deoarece există o serie de dispozitive diferite pe magistrală.
    • Cu un număr mare de dispozitive, devine dificilă localizarea eșecului, deoarece unul dintre ele instalează ușor un factor de nivel scăzut.

    Modul i2c pentru LCD 1602 Arduino

    Cel mai bun și mai ușor mod de a instala un afișaj i2c în Arduino este să achiziționați un ecran gata făcut cu un protocol încorporat. Dar astfel de ecrane nu suportă mirosul, nu este ieftin. Și axa diferitelor ecrane standard a produs deja o mare rezistență. Prin urmare, cea mai accesibilă și cea mai populară opțiune astăzi este achiziționarea și înlocuirea unui modul I2C adiacent - un adaptor, care arată astfel:

    Pe o parte a modulului există pini i2c - masă, viață și 2 pentru transferul de date. Din alt adaptor, vom folosi trandafirii vieții externe. Și, desigur, există un fund gol pe placă, în plus față de care modulul este lipit la componentele standard ale ecranului.


    Pentru a vă conecta la plata Arduino, utilizați deconectarea i2c. Dacă este necesar, conectăm o sursă externă pentru iluminare. Cu ajutorul unui rezistor de reglare încorporat, putem regla setările de contrast J

    Pe piata gasesti module LCD 1602 cu adaptoare lipite, instalarea acestora este pe cat posibil simplificata. Dacă ați cumpărat același adaptor, va trebui să-l lipiți la modul în prealabil.

    Conectarea ecranului RK la Arduino prin I2C

    Pentru a vă conecta, aveți nevoie de placa Arduino în sine, un afișaj, o placă de breadboard, conectori și un potențiometru.

    Dacă utilizați un adaptor special i2c, va trebui mai întâi să-l lipiți pe modulul ecranului. Este important să ai milă acolo, te poți implica într-o astfel de schemă.


    Un monitor RCD cu suport i2c este conectat înainte de a plăti pentru cele patru săgeți suplimentare - două săgeți pentru date, două săgeți pentru viață.

    • Conexiunea GND este conectată la GND de pe placă.
    • VCC este la 5V.
    • SCL este conectat la pinul A5.
    • SDA este conectat la pinul A.

    Asta e tot! Pânze lungi de călătorii, în care este ușor să te pierzi. În acest caz, pur și simplu putem încredința bibliotecilor toată complexitatea implementării protocolului i2C.

    Biblioteci pentru roboți cu afișaj LCD i2c

    Pentru a comunica între Arduino și LCD 1602 prin magistrala I2C, veți avea nevoie de cel puțin două biblioteci:

    • Biblioteca Wire.h pentru lucrul cu I2C este deja inclusă în programul standard Arduino IDE.
    • Biblioteca LiquidCrystal_I2C.h, care include o mare varietate de comenzi pentru controlul unui monitor prin magistrala I2C, vă permite să creați o schiță mai simplă și mai scurtă. Este necesar să instalați biblioteca în plus După conectarea ecranului, trebuie să instalați biblioteca LiquidCrystal_I2C.h

    După ce conectăm toate bibliotecile necesare la schiță, creăm un obiect și îi putem personaliza funcțiile. Pentru testare, este important să folosiți o schiță standard pe fund.

    #include #include // Conexiuni la bibliotecă //#include // Conectarea unei biblioteci alternative LiquidCrystal_I2C lcd(0x27,16,2); // Indicați adresa I2C (cea mai largă valoare) și specificați parametrii ecranului (pentru LCD 1602 - 2 rânduri a câte 16 caractere fiecare //LiquidCrystal_PCF8574 lcd(0x27); // Opțiune pentru biblioteca PCF8574 void setup() ( lcd. init (); // Inițializați afișajul lcd.backlight(); // Conectați iluminarea de fundal lcd.setCursor(0,0); // Plasați cursorul pe capul primului rând lcd.print("Bună ziua"); // Tastați text pe primul rând lcd .setCursor(0,1); // Plasați cursorul pe capul altui rând lcd.print("ArduinoMaster"); // Introduceți text pe alt rând ) void loop() ( )

    Descrierea funcțiilor și metodelor bibliotecii LiquidCrystal_I2C:

    • home() și clear() – prima funcție vă permite să rotiți cursorul în partea de sus a ecranului, afișând tot ce era pe monitor înainte.
    • write(ch) – vă permite să scrieți un singur caracter ch pe ecran.
    • cursor() și noCursor() – arată/ascunde cursorul pe ecran.
    • blink() și noBlink() – cursorul clipește/nu clipește (dacă afișarea sa a fost activată anterior).
    • display() și noDisplay() – vă permite să conectați/porniți afișajul.
    • scrollDisplayLeft() și scrollDisplayRight() – derulează ecranul după un semn pentru stânga/dreapta.
    • autoscroll() și noAutoscroll() – vă permite să activați/dezactivați modul de autoscroll. Pentru ce mod de piele, un nou simbol este înregistrat în același loc care a fost scris anterior pe ecran.
    • leftToRight() și rightToLeft() – Inserarea directă a textului afișat – stânga la dreapta sau dreapta la stânga.
    • createChar(ch, bitmap) – creează un caracter cu codul ch (0 – 7), folosind o matrice de bitmap pentru a crea puncte alb-negru.

    Bibliotecă alternativă pentru roboți cu afișaj i2c

    În unele cazuri, atunci când biblioteca alocată cu dispozitive echipate cu controlere PCF8574 este deteriorată, pot apărea erori. O alternativă la această opțiune este biblioteca LiquidCrystal_PCF8574.h. Ea extinde LiquidCrystal_I2C, ceea ce nu este cauza problemelor pentru victoriani.

    Probleme la conectarea ecranului LCD i2c

    Dacă după ce faceți clic pe o schiță nu vedeți mesajul dorit pe afișaj, încercați să faceți clic pe aceste acțiuni.

    În primul rând, puteți crește sau modifica contrastul monitorului. Adesea, personajele pur și simplu nu sunt vizibile prin modurile de contrast și de iluminare.

    Dacă acest lucru nu ajută, verificați dacă contactele sunt conectate corect și dacă sursa de alimentare este conectată. Dacă ați folosit un adaptor i2c compatibil, verificați din nou punctul de lipit al contactelor.

    Un alt motiv comun pentru lipsa textului de pe ecran poate fi adresele i2c incorecte. Încercați să vă amintiți în schițe adresa dispozitivului cu 0x27 0x20 sau 0x3F. Diferiți distribuitori pot avea adrese diferite pentru plată. Dacă acest lucru nu ajută, puteți rula schița scanerului i2c, care analizează toate conexiunile dispozitivului și determină adresele acestora folosind o metodă de forță brută. Schiță la cap a unui scaner i2c.

    Dacă ecranul încă nu funcționează, încercați să lipiți adaptorul și să conectați LCD-ul ca de obicei.

    Visnovok

    În acest articol, ne-am uitat la sursa principală de alimentare pentru ecranul LCD în proiectele Arduino pliabile, dacă trebuie să economisim bani în plus pe placă. Un adaptor i2c simplu și ieftin vă permite să conectați un ecran LCD 1602 folosind doar 2 pini analogici. În mai multe situații, poți fi și mai important. Taxă pentru disponibilitate - necesitatea de a utiliza un modul suplimentar - un convertor și o bibliotecă. În opinia noastră, prețul pentru flexibilitate nu este deloc mare și vă recomandăm să profitați de această flexibilitate în proiecte.

    Descrierea bibliotecii Wire

    Această bibliotecă vă permite să comunicați cu dispozitive I2C/TWI. Pe plăcile Arduino cu aspect R3 (design 1.0), SDA (linia de date) și SCL (linia de ceas) sunt situate pe pinii pinului AREF. Arduino Due are două interfețe I2C/TWI: SDA1 și SCL1 sunt situate pe pinul AREF, iar liniile suplimentare sunt situate pe pinii 20 și 21.

    Tabelul de mai jos arată dezinstalarea TWI pe diferite plăci Arduino.

    Începând cu Arduino 1.0, această bibliotecă introduce funcțiile Stream, așa că funcționează excelent cu alte biblioteci de citire/scriere. Prin aceasta, send() și receive() sunt înlocuite cu read() și write().

    Notă

    Găsiți versiuni pe 7 și 8 biți ale adresei I2C. 7 biți identifică dispozitivul, iar al 8-lea bit indică dacă dispozitivul este scris sau citit. Biblioteca Wire conține adrese de 7 biți. Dacă aveți o descriere tehnică sau un exemplu de cod care învinge adrese de 8 biți, va trebui să răsturnați bitul scăzut (pentru a distruge valoarea cu un bit în dreapta), reducând adresa de la 0 la 127. Cu toate acestea, adresele de la 0 la 7 nu sunt victorioși, fragmentele sunt rezervate, prima adresă care poate fi selectată este 8. Vă rugăm să rețineți că atunci când conectați pinii SDA/SCL, sunt necesare rezistențe să tragă în sus. Raportați-vă să vă minunați de fund. Pe placa MEGA 2560 există rezistențe care trebuie trase în sus pe pinii 20 și 21.

    Descrierea metodelor

    Wire.begin()

    Descriere

    Inițializează biblioteca Wire și se conectează la magistrala I2C ca master sau lider. De regulă, puteți suna o singură dată.

    Sintaxă

    Wire.begin(adresă)

    Parametrii

    adresa: adresa de 7 biți atribuită dispozitivului (nu este necesar); Dacă nu există sarcini, placa este conectată la magistrală ca master.

    Sensul a ceea ce se întoarce

    fundul

    Capturile pentru dispozitivul ceramic sunt minunate pentru metodele onReceive() și onRequest(). Butts pentru dispozitive cu fir diferă de la butts la alte metode. .

    Wire.requestFrom()

    Descriere

    Vikory este folosit de maestru pentru a scrie octeți de pe dispozitivul ceramic. Acești octeți pot fi eliminați folosind metodele available() și read().

    Dacă acest argument este adevărat, atunci requestFrom(), după pornire, emite o notificare STOP, apelând magistrala I2C.

    Dacă acest argument este fals, atunci requestFrom() va emite o notificare RESTART după solicitare. Anvelopa nu funcționează, ceea ce împiedică un alt dispozitiv-master să intre între conexiuni. Acest lucru permite unui dispozitiv cu fir să trimită un număr de intrări de putere până când controlează magistrala.

    Sintaxă

    Wire.requestFrom(adresă, cantitate)

    Wire.requestFrom(adresă, cantitate, oprire)

    Parametrii

    • adresa: voi adăuga o adresă de 7 biți de la care vor fi primiți octeți;
    • cantitate: numărul de octeți de preluat;
    • stop: boolean. true forțează o notificare STOP după o solicitare. false forțează notificarea RESTART după solicitare, salvând conexiunile active.
    Sensul a ceea ce se întoarce

    octet: numărul de octeți rotiți în funcție de dispozitivul specificat.

    fundul

    Wire.beginTransmission()

    Descriere

    Începe transmisia către dispozitivele I2C cu adresa specificată. După ce secvența de octeți de transfer este specificată folosind funcția write(), transferul este finalizat folosind apelul endTransmission().

    Sintaxă

    Wire.beginTransmission(adresă)

    Parametrii

    adresa: voi adăuga o adresă de 7 biți pentru că este necesar să transferați date.

    Sensul a ceea ce se întoarce

    fundul

    Wire.endTransmission()

    Descriere

    Finalizează transferul către dispozitivul care a fost tipărit utilizând metoda beginTransmission() și transferă octeții care au fost trimiși către dispozitiv utilizând metoda write().

    Pentru utilizare cu majoritatea dispozitivelor I2C, începând cu Arduino 1.0.1, requestFrom() preia un argument la un tip de date boolean, care își schimbă comportamentul.

    Dacă acest argument este adevărat, atunci requestFrom(), după transmitere, emite o notificare STOP, eliberând magistrala I2C.

    Dacă acest argument este fals, atunci requestFrom() emite o notificare RESTART după transmitere. Anvelopa nu funcționează, ceea ce împiedică un alt dispozitiv-master să intre între conexiuni. Acest lucru permite unui dispozitiv cu fir să trimită un număr de viteze în timp ce controlează autobuzul.

    În teorie, acest argument este mai vechi decât adevărat.

    Sintaxă

    Wire.endTransmission()

    Wire.endTransmisie(oprire)

    Parametrii

    stop: boolean. true forțează notificarea STOP după transmitere. fals forțează notificarea RESTART după transfer, salvând conexiunea activă.

    Sensul a ceea ce se întoarce

    octet , care indică modul de transfer:

    • 0: succes;
    • 1: sunt necesare mai multe date pentru a umple tamponul de transmisie;
    • 2: NACK primit la ora transmiterii adresei;
    • 3: NACK primit la ora transmiterii datelor;
    • 4: reshta scuze.
    fundul

    Urmăriți exemplul metodei write().

    Wire.write()

    Descriere

    Scrie date de pe dispozitivul specificat pe dispozitivul de intrare sau setează octeții care urmează să fie transferați de la master la dispozitivul specificat (între apelurile beginTransmission() și endTransmission()).

    Sintaxă

    Wire.write(valoare)

    Wire.write(șir)

    Wire.write (date, lungime)

    Parametrii

    • valoare: valoarea de transmisie, un octet.
    • șir: ordine de transmisie, secvență de octeți.
    • date: matrice de date de transmisie, octeți.
    • lungime: numărul de octeți de transferat.
    Sensul a ceea ce se întoarce

    byte: write() rotește numărul de octeți scriși, deși citirea unora dintre ei nu este dificilă.

    Butt #include byte val = 0; void setup() ( Wire.begin(); // se conectează la magistrala i2c ) void loop() ( Wire.beginTransmission(44); // transfer la dispozitivul #44 (0x2c) // adresa dispozitivului pentru sarcinile din descrierea tehnică Wire. write(val); // trimite octetul de valoare Wire.endTransmission(); // ignora transmisia val++; // crește valoarea if(val == 64) // când a 64-a valoare (max) este atins ( val = 0; / / start on the cob) întârziere (500);

    Wire.available()

    Descriere

    Rotește un număr de octeți care pot fi recuperați folosind read(). Această metodă trebuie apelată pe dispozitivul cu fir după apelul requestFrom() sau pe dispozitivul slave în mijlocul apelului onReceive().

    Sintaxă

    Wire.available()

    Parametrii

    Sensul a ceea ce se întoarce

    Numărul de octeți disponibili pentru citire.

    fundul

    Urmăriți fundul înainte de metoda read().

    Wire.read()

    Descriere

    Citește un octet care este trimis de la dispozitivul trimis către gazdă după apelarea requestFrom() sau un octet care este trimis de la dispozitivul trimis către cel trimis.

    Sintaxă

    Parametrii

    Sensul a ceea ce se întoarce

    octet: vierme octet de acceptări.

    Butt #include byte val = 0; void setup() ( Wire.begin(); // se conectează la magistrala i2c (adresele pentru master nu sunt obligatorii) Serial.begin(9600); // se configurează portul serial pentru ieșire) void loop() ( Wire .requestFrom( 2, 6);// furnizați 6 octeți de la dispozitivul specificat #2 în timp ce (Wire.available()) // poate fi trimis mai puțin decât dispozitivul solicitat (char c = Wire.read(); // accept octetul ca un caracter Serial .print (c); // wrap the symbol ) delay(500);

    Wire.setClock()

    Descriere

    Modifică frecvența ceasului de comunicare pe magistrala I2C. Dispozitivele I2C nu au o frecvență minimă de ceas de operare, care este de obicei 100 kHz.

    Sintaxă

    Wire.setClock(clockFrequency)

    Parametrii

    clockFrequency: valoarea frecvenței (în herți) a semnalului de ceas. Valorile acceptate sunt 100.000 (modul standard) și 400.000 (modul suedez). Fiecare procesor acceptă, de asemenea, 10.000 (mod de viteză mică), 1.000.000 (modul de viteză mare plus) și 3.400.000 (modul de viteză mare). Pentru a vă asigura că modul necesar este acceptat, accesați documentația pentru un anumit procesor.

    Sensul a ceea ce se întoarce

    Wire.onReceive()

    Descriere

    Înregistrează o funcție care va fi apelată atunci când dispozitivul primește un transfer de la master.

    Sintaxă

    Wire.onReceive(handler)

    Parametrii

    handler: o funcție care va fi apelată atunci când dispozitivul primește date; Trebuie să acceptați un parametru int (numărul de octeți citiți de la master) și să nu rotiți nimic, apoi:

    void myHandler (int numBytes)

    Sensul a ceea ce se întoarce

    fundul

    #include void setup() ( Wire.begin(8); // se conectează la magistrala i2c cu adresa #8 Wire.onReceive(receiveEvent); // se înregistrează subsenzorul Serial.begin(9600); // se configurează portul serial pentru afișare ) void loop() ( delay(100); ) // o funcție care va ieși imediat când datele sunt primite de la master // această funcție este înregistrată ca procesor de date, watch setup() void receiveEvent(int howMany) (în timp ce (1< Wire.available()) // пройтись по всем до последнего { char c = Wire.read(); // принять байт как символ Serial.print(c); // напечатать символ } int x = Wire.read(); // принять байт как целое число Serial.println(x); // напечатать число }

    Wire.onRequest()

    Descriere

    Înregistrează funcția care va fi apelată atunci când masterul solicită date de la dispozitivul specificat.

    Sintaxă

    Wire.onRequest(handler)

    Parametrii

    handler: o funcție care trebuie apelată, nu acceptă parametri și nu rotește nimic, deci:

    void myHandler()

    Sensul a ceea ce se întoarce

    fundul

    Cod pentru placa Arduino, care funcționează ca dispozitiv:

    #include void setup() ( Wire.begin(8); // conectează-te la magistrala i2c cu adresa #8 Wire.onRequest(requestEvent); // înregistrează procesorul de solicitare ) void loop() ( întârziere(100); ) // funcția, De îndată ce masterul este // interogat datele // această funcție este înregistrată ca un sondaj, vezi setup() void requestEvent() ( Wire.write("hello "); // trimite notificări)