I am a newbie here, Recently I was working with H3LIS331DL 3-Axis Linear Accelerometer I²C Mini Module
Here is code for the X, Y, Z-axis.
#include <movingAvg.h>
#include <Wire.h>
// H3LIS331DL I2C address is 0x18(24)
#define Addr 0x18
movingAvg xAxisAverage(5);
int readingIndex=0;
int readingArray[10];
int firstFiveReadingAverage;
int lastFiveReadingAverage;
void setup()
{
// Initialise I2C communication as MASTER
Wire.begin();
// Initialise Serial Communication, set baud rate = 9600
Serial.begin(9600);
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select control register 1
Wire.write(0x20);
// Enable X, Y, Z axis, power on mode, data output rate 50Hz
Wire.write(0x27);
// Stop I2C Transmission
Wire.endTransmission();
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select control register 4
Wire.write(0x23);
// Set full scale, +/- 100g, continuous update
Wire.write(0x00);
// Stop I2C Transmission
Wire.endTransmission();
delay(300);
}
void loop()
{
unsigned int data[6];
for(int i = 0; i < 6; i++)
{
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select data register
Wire.write((40+i));
// Stop I2C Transmission
Wire.endTransmission();
// Request 1 byte of data
Wire.requestFrom(Addr, 1);
// Read 6 bytes of data
// xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb
if(Wire.available() == 1)
{
data[i] = Wire.read();
}
}
delay(300);
// Convert the data
int xAccl = ((data[1] * 256) + data[0]);
int yAccl = ((data[3] * 256) + data[2]);
int zAccl = ((data[5] * 256) + data[4]);
if(readingIndex<10)
{
readingArray[readingIndex]=xAccl;
readingIndex++;
if(readingIndex == 10)
{
firstFiveReadingAverage=(readingArray[0]+readingArray[1]+readingArray[2]+readingArray[3]+readingArray[4])/5;
lastFiveReadingAverage= (readingArray[5]+readingArray[6]+readingArray[7]+readingArray[8]+readingArray[9])/5 ;
if(lastFiveReadingAverage>firstFiveReadingAverage)
{
Serial.print("Hardbrake Pressed");
Serial.println();
}
readingIndex=0;
}
}
//int avg = avgAccl.reading(xAccl);
// calculate the moving average
// Output data to serial monitor
Serial.print("Acceleration in X-Axis : ");
Serial.println(xAccl);
Serial.print("Acceleration in Y-Axis : ");
Serial.println(yAccl);
Serial.print("Acceleration in Z-Axis : ");
Serial.println(zAccl);
delay(300);
Serial.println();
int average=xAxisAverage.reading(xAccl);
if (average < -1000)
{
Serial.print("Hardbraking: ");
//Serial.print(average/100.0);
Serial.print(average);
Serial.println();
}
}
I have changed the code, but values are keeps on repeating when I trigger the hard braking and it keep on repeating even I released the brake.
