Stap 1: I2C communicatie
Alle communicatie tussen de componenten op dit forum gebeurt via een digitale taal I2Cgenoemd. Componenten met elkaar verbonden via I2C zijn masters of slaven. Een master component zal het instellen van de klok van de mededeling van de I2C en de slaven luisteren op dit kloksignaal.
Alle componenten communiceren over I2C zijn via verbonden aan de dezelfde twee regels - SDA en SCL; om verwarring te voorkomen, elke component heeft een uniek adres waar het kunt verzenden of ontvangen van berichten, op zal wegcijferen naar berichten die naar verschillende adressen. De adressen voor I2C-onderdelen worden meestal ingesteld door de fabrikant, hoewel u mei zitten kundig voor wijzigen sommige of alle van het adres bits zelf (Controleer het gegevensblad).
Ik ben de draad bibliotheek gebruiken om te communiceren met mijn hardware via I2C - deze bibliotheek komt automatisch geïnstalleerd in nieuwere versies van de Arduino IDE.
Wanneer ik wil een register ingesteld op een van mijn sensoren, voer ik code die als dit kijkt:
Wire.beginTransmission(GYRO_ADDRESS); WIRE_SEND(0x16);//register to write to WIRE_SEND(0x1B);//value Wire.endTransmission();
Wanneer ik gegevens wilt ontvangen van de sensoren die ik code uitvoert die ziet er als volgt:
Wire.beginTransmission(GYRO_ADDRESS); WIRE_SEND(0x1D); // Sends address to read from Wire.endTransmission(); Wire.beginTransmission(GYRO_ADDRESS); Wire.requestFrom(GYRO_ADDRESS, 6); // Request 6 bytes while(Wire.available()) // ((Wire.available())&&(i<6)) { buff[i] = WIRE_RECEIVE(); // Read one byte i++; } Wire.endTransmission();
Zowel van de sensoren die ik gebruik voor dit project hebben vele gebruiker gedefinieerde parameters die van invloed op werking (bereik van acc/mag/gyro operatie, offsets, interrupts, resolutie, refresh tijd, enz). Om te beginnen met programmeren met I2C apparaten, zul je lezen door middel van het gegevensblad, met name de paragraaf "Registreren beschrijving", zodat u weet hoe u elk van deze parameters behoorlijk op uw chip.