\doxysection{i2c\+\_\+accel.\+ino}
\hypertarget{i2c__accel_8ino_source}{}\label{i2c__accel_8ino_source}\index{examples/i2c\_accel/i2c\_accel.ino@{examples/i2c\_accel/i2c\_accel.ino}}
\mbox{\hyperlink{i2c__accel_8ino}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00001}00001\ /***************************************************************}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00002}00002\ \ *\ @file\ \ \ \ I2C\_Accel.ino}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00003}00003\ \ *\ @brief\ \ \ Minimal\ I2C\ bring-\/up\ for\ 7Semi\ ICM-\/20948\ on\ UNO/ESP32\ +}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00004}00004\ \ *\ \ \ \ \ \ \ \ \ \ continuous\ accelerometer\ readout\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00005}00005\ \ *}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00006}00006\ \ *\ Features}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00007}00007\ \ *\ -\/\ I2C\ init\ on\ default/custom\ pins}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00008}00008\ \ *\ -\/\ IMU\ beginI2C()\ on\ I2C\ (addr\ 0x68/0x69)}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00009}00009\ \ *\ -\/\ Manual\ sensor\ enable\ (setSensors)}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00010}00010\ \ *\ -\/\ Accel\ config:\ scale,\ DLPF,\ averaging,\ sample\ rate}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00011}00011\ \ *\ -\/\ Read\ accel\ (g)\ at\ \string~2\ Hz\ print}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00012}00012\ \ *}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00013}00013\ \ *\ Notes}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00014}00014\ \ *\ -\/\ WHO\_AM\_I\ must\ be\ 0xEA}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00015}00015\ \ *\ -\/\ Sensors\ must\ be\ explicitly\ enabled}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00016}00016\ \ *\ -\/\ Bank\ switching\ handled\ internally\ by\ library}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00017}00017\ \ *}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00018}00018\ \ *\ Wiring\ (Arduino\ UNO\ I2C)}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00019}00019\ \ *\ -\/\ SDA\ \ -\/>\ A4}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00020}00020\ \ *\ -\/\ SCL\ \ -\/>\ A5}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00021}00021\ \ *\ -\/\ VCC\ \ -\/>\ 3V3\ (or\ 5V\ if\ your\ board\ supports\ it)}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00022}00022\ \ *\ -\/\ GND\ \ -\/>\ GND}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00023}00023\ \ *}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00024}00024\ \ *\ Wiring\ (ESP32\ default\ I2C)}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00025}00025\ \ *\ -\/\ SDA\ \ -\/>\ GPIO21}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00026}00026\ \ *\ -\/\ SCL\ \ -\/>\ GPIO22}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00027}00027\ \ *\ -\/\ VCC\ \ -\/>\ 3V3}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00028}00028\ \ *\ -\/\ GND\ \ -\/>\ GND}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00029}00029\ \ ***************************************************************/}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00030}00030\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00031}00031\ \#include\ <Wire.h>}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00032}00032\ \#include\ <DevLab\_ICM20948.h>}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00033}00033\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00034}00034\ /*\ ======================\ User\ Config\ =======================\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00035}00035\ /**\ @brief\ I2C\ SDA\ pin\ used\ by\ the\ example\ board.\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00036}00036\ \#define\ SDA\_PIN\ \ \ 6}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00037}00037\ /**\ @brief\ I2C\ SCL\ pin\ used\ by\ the\ example\ board.\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00038}00038\ \#define\ SCL\_PIN\ \ \ 7}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00039}00039\ /**\ @brief\ I2C\ bus\ speed\ in\ hertz.\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00040}00040\ \#define\ I2C\_FREQ\ \ 400000UL}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00041}00041\ /**\ @brief\ ICM-\/20948\ I2C\ address\ selected\ by\ the\ AD0\ pin.\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00042}00042\ \#define\ ICM\_ADDR\ \ 0x69}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00043}00043\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00044}00044\ /**\ @brief\ Global\ ICM-\/20948\ driver\ instance.\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00045}00045\ DevLab\_ICM20948\ imu;}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00046}00046\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00047}00047\ /**}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00048}00048\ \ *\ @brief\ Configure\ the\ IMU\ for\ accelerometer-\/only\ operation\ over\ I2C.}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00049}00049\ \ *}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00050}00050\ \ *\ The\ function\ initializes\ the\ bus,\ verifies\ the\ device\ identity,\ enables\ the}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00051}00051\ \ *\ accelerometer,\ and\ applies\ range,\ DLPF,\ averaging,\ and\ sample-\/rate\ settings.}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00052}00052\ \ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00053}00053\ void\ setup()\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00054}00054\ \ \ Serial.begin(115200);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00055}00055\ \ \ delay(200);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00056}00056\ \ \ Serial.println(F("{}ICM-\/20948\ (I2C)\ —\ Accel\ Example"{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00057}00057\ \ \ Wire.begin(SDA\_PIN,\ SCL\_PIN);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00058}00058\ \ \ /*\ Initialize\ IMU\ using\ I2C.\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00059}00059\ \ \ if\ (!imu.beginI2C(ICM\_ADDR,\ Wire,\ 400000))\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00060}00060\ \ \ \ \ Serial.println(F("{}ERROR:\ ICM-\/20948\ beginI2C()\ failed."{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00061}00061\ \ \ \ \ while\ (1)\ delay(200);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00062}00062\ \ \ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00063}00063\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00064}00064\ \ \ Serial.println(F("{}ICM-\/20948\ ready."{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00065}00065\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00066}00066\ \ \ /*\ Verify\ device\ identity.\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00067}00067\ \ \ uint8\_t\ who;}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00068}00068\ \ \ if\ (imu.readWhoAmI(who))\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00069}00069\ \ \ \ \ Serial.print("{}WHO\_AM\_I:\ 0x"{});}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00070}00070\ \ \ \ \ Serial.println(who,\ HEX);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00071}00071\ \ \ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00072}00072\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00073}00073\ \ \ /*\ Enable\ only\ accelerometer}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00074}00074\ \ \ \ *\ -\/\ accel\ =\ true}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00075}00075\ \ \ \ *\ -\/\ gyro\ \ =\ false}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00076}00076\ \ \ \ *\ -\/\ temp\ \ =\ false}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00077}00077\ \ \ \ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00078}00078\ \ \ if\ (!imu.setSensors(true,\ false,\ false))\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00079}00079\ \ \ \ \ Serial.println(F("{}setSensors\ failed."{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00080}00080\ \ \ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00081}00081\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00082}00082\ \ \ /*\ -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/\ ACCEL\ CONFIG\ -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00083}00083\ \ \ \ *\ -\/\ Scale:\ ±2/±4/±8/±16\ g}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00084}00084\ \ \ \ *\ -\/\ DLPF:\ noise\ filtering}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00085}00085\ \ \ \ *\ -\/\ Averaging:\ noise\ reduction}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00086}00086\ \ \ \ *\ -\/\ Sample\ rate:\ output\ frequency}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00087}00087\ \ \ \ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00088}00088\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00089}00089\ \ \ /*\ Set\ accelerometer\ full-\/scale\ range.\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00090}00090\ \ \ if\ (!imu.setAccelScale(ICM20948\_Accel\_FullScale::G\_4))\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00091}00091\ \ \ \ \ Serial.println(F("{}setAccelScale\ failed."{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00092}00092\ \ \ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00093}00093\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00094}00094\ \ \ /*\ Enable\ DLPF\ (recommended)}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00095}00095\ \ \ \ *\ -\/\ bypass\ =\ false\ →\ DLPF\ enabled}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00096}00096\ \ \ \ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00097}00097\ \ \ if\ (!imu.setAccelDLPF(ACCEL\_DLPFCFG\_3,\ false))\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00098}00098\ \ \ \ \ Serial.println(F("{}setAccelDLPF\ failed."{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00099}00099\ \ \ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00100}00100\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00101}00101\ \ \ /*\ Set\ averaging\ (noise\ reduction).\ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00102}00102\ \ \ if\ (!imu.setAccelAveraging(ICM20948\_Accel\_Average::AVG\_8))\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00103}00103\ \ \ \ \ Serial.println(F("{}setAccelAveraging\ failed."{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00104}00104\ \ \ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00105}00105\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00106}00106\ \ \ /*\ Set\ output\ data\ rate\ (ODR)}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00107}00107\ \ \ \ *\ -\/\ Base\ =\ 1125\ Hz}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00108}00108\ \ \ \ *\ -\/\ ODR\ =\ 1125\ /\ (1\ +\ divider)}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00109}00109\ \ \ \ *\ -\/\ Example:\ 225\ Hz}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00110}00110\ \ \ \ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00111}00111\ \ \ if\ (!imu.setAccelSampleRate(225))\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00112}00112\ \ \ \ \ Serial.println(F("{}setAccelSampleRate\ failed."{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00113}00113\ \ \ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00114}00114\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00115}00115\ \ \ delay(10);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00116}00116\ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00117}00117\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00118}00118\ /**}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00119}00119\ \ *\ @brief\ Read\ and\ print\ accelerometer\ data\ in\ g.}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00120}00120\ \ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00121}00121\ void\ loop()\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00122}00122\ \ \ float\ ax,\ ay,\ az;}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00123}00123\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00124}00124\ \ \ /*\ Read\ accelerometer\ data}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00125}00125\ \ \ \ *\ -\/\ Output\ in\ g\ units}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00126}00126\ \ \ \ *\ -\/\ Returns\ true\ on\ success}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00127}00127\ \ \ \ */}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00128}00128\ \ \ if\ (imu.readAccel(ax,\ ay,\ az))\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00129}00129\ \ \ \ \ Serial.print("{}ACCEL\ [g]:\ "{});}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00130}00130\ \ \ \ \ Serial.print(ax,\ 3);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00131}00131\ \ \ \ \ Serial.print("{},\ "{});}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00132}00132\ \ \ \ \ Serial.print(ay,\ 3);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00133}00133\ \ \ \ \ Serial.print("{},\ "{});}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00134}00134\ \ \ \ \ Serial.println(az,\ 3);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00135}00135\ \ \ \}\ else\ \{}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00136}00136\ \ \ \ \ Serial.println(F("{}ACCEL\ read\ failed"{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00137}00137\ \ \ \}}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00138}00138\ }
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00139}00139\ \ \ Serial.println(F("{}-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/"{}));}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00140}00140\ \ \ delay(500);}
\DoxyCodeLine{\Hypertarget{i2c__accel_8ino_source_l00141}00141\ \}}

\end{DoxyCode}
