0

I am currently working with two Arduinos and I'm trying to synchronize them. I want to get data from four LIS3DH accelerometers. The LIS3DH accelerometers are connected to the Arduino using I2C interface. I have managed to get the Arduinos to synchronize using SPI but when I get the third set of data it keeps on showing OVF rather than the values. My code is below can someone please help me out?

Thanks

// SPI Master
#include <Wire.h>
#include <SPI.h>
#include "SPI_anything.h"
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>
//#define LIS3DH_CLK 13
//#define LIS3DH_MISO 12
//#define LIS3DH_MOSI 11
//#define LIS3DH_CS 10
// I2C
Adafruit_LIS3DH lisch1 = Adafruit_LIS3DH();
Adafruit_LIS3DH lisch2 = Adafruit_LIS3DH();
// Adafruit_LIS3DH lisch3 = Adafruit_LIS3DH();
struct event3;
#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using
// programming port to program the Zero!
#define Serial SerialUSB
#endif
void setup() {
#ifndef ESP8266
 while (!Serial)
 ; // will pause Zero, Leonardo, etc until serial console opens
#endif
 Serial.begin(9600);
 // have to send on master in, *slave out*
 pinMode(MISO, OUTPUT);
 // turn on SPI in slave mode
 SPCR |= _BV(SPE);
 Serial.println("LIS3DH test!");
 if (!lisch1.begin(0x19)) { // change this to 0x19 for alternative i2c address
 // - Voltage SDO
 Serial.println("Couldnt start");
 while (1)
 ;
 }
 Serial.println("LIS3DH1 found!");
 if (!lisch2.begin(0x18)) { // change this to 0x18 for alternative i2c address
 // - Ground SDO
 Serial.println("Couldnt start");
 while (1)
 ;
 }
 Serial.println("LIS3DH2 found!");
 lisch1.setRange(LIS3DH_RANGE_16_G); // 2, 4, 8 or 16 G!
 lisch2.setRange(LIS3DH_RANGE_16_G); // 2, 4, 8 or 16 G!
 Serial.print("Range = ");
 Serial.print(2 << lisch1.getRange());
 Serial.print("Range = ");
 Serial.print(2 << lisch2.getRange());
 Serial.println("G");
}
void loop() {
 lisch1.read(); // get X Y and Z data at once
 /* Or....get a new sensor event, normalized */
 sensors_event_t event;
 lisch1.getEvent(&event);
 /* Display the results (acceleration is measured in m/s^2) */
 Serial.print(" \t ");
 Serial.print(event.acceleration.x);
 Serial.print(" \t ");
 Serial.print(event.acceleration.y);
 Serial.print(" \t ");
 Serial.print(event.acceleration.z);
 lisch2.read(); // get X Y and Z data at once
 lisch2.getEvent(&event);
 /* Display the results (acceleration is measured in m/s^2) */
 Serial.print(" \t ");
 Serial.print(event.acceleration.x);
 Serial.print(" \t ");
 Serial.print(event.acceleration.y);
 Serial.print(" \t ");
 Serial.print(event.acceleration.z);
 struct event;
 SPI_readAnything(event);
 // sensors_event_t event;
 // lisch3.getEvent(&event);
 Serial.print(" \t "); Serial.print(float2s(event.acceleration.x,6);
 Serial.print(" \t "); Serial.print(event.acceleration.y); 
 Serial.print(" \t "); Serial.print(event.acceleration.z);
 Serial.println ();
 delay(500);
}
/ SPI Slave
#include <Wire.h>
#include <SPI.h>
#include "SPI_anything.h"
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>
#define LIS3DH_CLK 13
#define LIS3DH_MISO 12
#define LIS3DH_MOSI 11
#define LIS3DH_CS 10
 // I2C
 Adafruit_LIS3DH lisch3 = Adafruit_LIS3DH();
#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using
// programming port to program the Zero!
#define Serial SerialUSB
#endif
void setup() {
#ifndef ESP8266
 while (!Serial)
 ; // will pause Zero, Leonardo, etc until serial console opens
#endif
 Serial.begin(9600); // start serial for output
 SPI.begin();
 // Slow down the master a bit
 SPI.setClockDivider(SPI_CLOCK_DIV8);
 Serial.println("LIS3DH3 test!");
 if (!lisch3.begin(0x19)) { // change this to 0x19 for alternative i2c address
 // - Voltage SDO
 Serial.println("Couldnt start");
 while (1)
 ;
 }
 Serial.println("LIS3DH3 found!");
 lisch3.setRange(LIS3DH_RANGE_16_G); // 2, 4, 8 or 16 G!
 Serial.print("Range = ");
 Serial.print(2 << lisch3.getRange());
 Serial.println("G");
}
void loop() {
 lisch3.read(); // get X Y and Z data at once
 /* Or....get a new sensor event, normalized */
 sensors_event_t event;
 lisch3.getEvent(&event);
 /* Display the results (acceleration is measured in m/s^2) */
 Serial.print(" \t ");
 Serial.print(event.acceleration.x);
 Serial.print(" \t ");
 Serial.print(event.acceleration.y);
 Serial.print(" \t ");
 Serial.print(event.acceleration.z);
 Serial.println();
 digitalWrite(SS, LOW); // SS is pin 10
 SPI_writeAnything(event);
 digitalWrite(SS, HIGH);
 // delay (1000); // for testing
 delay(100);
}
asked Feb 25, 2017 at 12:38

1 Answer 1

1

OVF means overflow, you probably exceeded the range of the data type you're using. Try /1000; /10000000000 etc to your variable until you don't get the OVF or use a datatype with a bigger range.

answered Mar 16, 2018 at 15:53

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.