1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
| //Déclaration des bibiliothèques nécessaires
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_LSM9DS1.h>
#include <Adafruit_Sensor.h> // not used in this demo but required!
//Déclaration des variables
int timeRes ; // période d'échantillonnage en ms
int dureeAcquisition ; // durée totale de l'acquisition en s
unsigned long tempsZero;
unsigned long tempsCourant;
int topDepart = 0;
String envoi;
unsigned long baud = 115200; // flux de la liaison série
unsigned long tempsPrec;
long start = 0 ;
// i2c
Adafruit_LSM9DS1 lsm = Adafruit_LSM9DS1();
#define LSM9DS1_SCK A5
#define LSM9DS1_MISO 12
#define LSM9DS1_MOSI A4
#define LSM9DS1_XGCS 6
#define LSM9DS1_MCS 5
// You can also use software SPI
//Adafruit_LSM9DS1 lsm = Adafruit_LSM9DS1(LSM9DS1_SCK, LSM9DS1_MISO, LSM9DS1_MOSI, LSM9DS1_XGCS, LSM9DS1_MCS);
// Or hardware SPI! In this case, only CS pins are passed in
//Adafruit_LSM9DS1 lsm = Adafruit_LSM9DS1(LSM9DS1_XGCS, LSM9DS1_MCS);
void setupSensor()
{
// 1.) Set the accelerometer range
lsm.setupAccel(lsm.LSM9DS1_ACCELRANGE_2G);
//lsm.setupAccel(lsm.LSM9DS1_ACCELRANGE_4G);
//lsm.setupAccel(lsm.LSM9DS1_ACCELRANGE_8G);
//lsm.setupAccel(lsm.LSM9DS1_ACCELRANGE_16G);
// 2.) Set the magnetometer sensitivity
lsm.setupMag(lsm.LSM9DS1_MAGGAIN_4GAUSS);
//lsm.setupMag(lsm.LSM9DS1_MAGGAIN_8GAUSS);
//lsm.setupMag(lsm.LSM9DS1_MAGGAIN_12GAUSS);
//lsm.setupMag(lsm.LSM9DS1_MAGGAIN_16GAUSS);
// 3.) Setup the gyroscope
//lsm.setupGyro(lsm.LSM9DS1_GYROSCALE_245DPS);
//lsm.setupGyro(lsm.LSM9DS1_GYROSCALE_500DPS);
lsm.setupGyro(lsm.LSM9DS1_GYROSCALE_2000DPS);
}
void setup()
{
Serial.begin(baud);
tempsPrec = millis();
tempsZero = millis();
envoi = "0";
// Vérification de la détection du capteur
if (!lsm.begin())
{
Serial.println("Oops ... unable to initialize the LSM9DS1. Check your wiring!");
while (1);
}
// helper to just set the default scaling we want, see above!
setupSensor();
}
void lecture()
{
lsm.read(); /* ask it to read in the data */
/* Get a new sensor event */
sensors_event_t a, m, g, temp;
lsm.getEvent(&a, &m, &g, &temp);
Serial.print(tempsCourant / 1000.0 , 3);
Serial.print("\t");
Serial.print(a.acceleration.x);
Serial.print("\t");
Serial.print(a.acceleration.y);
Serial.print("\t");
Serial.print(a.acceleration.z);
Serial.print("\t");
Serial.print(g.gyro.x);
Serial.print("\t");
Serial.print(g.gyro.y);
Serial.print("\t");
Serial.println(g.gyro.z);
tempsPrec += timeRes;
}
void reglages()
{
String prm;
String rec;
int posC;
while (topDepart == 0) {
envoi = Serial.readString();
Serial.print("Saisir la période d'échantillonnage (en ms) : ");
while (Serial.available() == 0 );
if (Serial.available() != 0)
{
timeRes = Serial.parseInt(); //on enregistre la valeur saisie dans timeRes
Serial.println(timeRes);
delay(100); //délai de temporisation
}
Serial.print("Saisir la durée d'acquisition (en ms) : ");
while (Serial.available() == 0 );
if (Serial.available() != 0)
{
dureeAcquisition = Serial.parseInt(); //on enregistre la valeur saisie dans dureeAcquisition
Serial.println(dureeAcquisition);
delay(100); //délai de temporisation
}
Serial.println("Saisir S pour lancer l'acquisition : ");
while (Serial.available() == 0 );
if (Serial.available() != 0)
{
topDepart = 1;
Serial.flush();
tempsPrec = 0;
tempsZero = millis();
Serial.print("t"); // donne la date en seconde
Serial.print('\t');
Serial.print("Ax"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.print("Ay"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.print("Az"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.print("Gx"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.print("Gy"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.println("Gz"); // donne la valeur recalculée de la tension
Serial.print("ms"); // donne la date en milliseconde
Serial.print('\t');
Serial.print("m.s^-2"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.print("m.s^-2"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.print("m.s^-2"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.print("rad.s^-2"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.print("rad.s^-2"); // donne la valeur recalculée de la tension
Serial.print('\t');
Serial.println("rad.s^-2"); // donne la valeur recalculée de la tension
}
}
}
void loop()
{
tempsCourant = millis() - tempsZero;
if ( topDepart == 0) {
reglages();
} else {
if (tempsCourant <= dureeAcquisition) {
if (tempsCourant >= tempsPrec) {
lecture();
}
}
}
Serial.flush();
} |
Partager