Hello I'm having a nasty problem. I want to use a datalogger shield and a MS5803 pressure sensor together, I used their libraries and had each of them work separately but not together.
This is the datalogger shield I bought:
This is the datasheet of the MS5803:
And this is the connection diagram:
The 3 codes I present are almost equal just with some comments on lines to avoid having them running.
With this code I get the date in the SD like this:
2019/5/30 9:27:33
const int chipSelect = 10;
#include <SdFat.h>
SdFat sd;
SdFile myFile;
#include "RTClib.h"
RTC_DS1307 RTC;
#include <Wire.h>
#include <SparkFun_MS5803_I2C.h>
MS5803 sensor(ADDRESS_LOW);
float temperature_c, temperature_f;
double pressure_abs, pressure_relative, altitude_delta, pressure_baseline;
double base_altitude = 1655.0;
void setup() {
Serial.begin(9600);
Wire.begin();
delay(400); // catch Due reset problem
RTC.begin();
if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
sensor.reset();
Serial.println("I haven't stopped");
sensor.begin();
Serial.println("I stopped");
pressure_baseline = sensor.getPressure(ADC_4096);
}
void loop() {
timeprint();
pressureprint();
myFile.close();
}
void pressureprint(){
temperature_c = sensor.getTemperature(CELSIUS, ADC_512);
pressure_abs = sensor.getPressure(ADC_4096);
Serial.println("Temperature C = ");
Serial.println(temperature_c);
Serial.print("Pressure abs (mbar)= ");
Serial.println(pressure_abs);
Serial.println("");
}
void timeprint(){
if (!myFile.open("test.txt", O_RDWR | O_CREAT | O_AT_END)) {
sd.errorHalt("opening test.txt for write failed");
}
DateTime now = RTC.now();
DateTime future (now.unixtime() + 7 * 86400L + 30);
myFile.print(future.year(), DEC);
myFile.print('/');
myFile.print(future.month(), DEC);
myFile.print('/');
myFile.print(future.day(), DEC);
myFile.print(' ');
myFile.print(future.hour(), DEC);
myFile.print(':');
myFile.print(future.minute(), DEC);
myFile.print(':');
myFile.println(future.second(), DEC);
delay(500);
}
With this code I get the date printed like this:
Temperature C =
27.97
Pressure abs (mbar)= 1000.60
const int chipSelect = 10;
#include <SdFat.h>
SdFat sd;
SdFile myFile;
#include "RTClib.h"
RTC_DS1307 RTC;
#include <Wire.h>
#include <SparkFun_MS5803_I2C.h>
MS5803 sensor(ADDRESS_HIGH);
float temperature_c, temperature_f;
double pressure_abs, pressure_relative, altitude_delta, pressure_baseline;
double base_altitude = 1655.0;
void setup() {
Serial.begin(9600);
Wire.begin();
delay(400); // catch Due reset problem
// RTC.begin();
// if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
sensor.reset();
Serial.println("I haven't stopped");
sensor.begin();
Serial.println("I stopped");
pressure_baseline = sensor.getPressure(ADC_4096);
}
void loop() {
// timeprint();
pressureprint();
// myFile.close();
}
void pressureprint(){
temperature_c = sensor.getTemperature(CELSIUS, ADC_512);
pressure_abs = sensor.getPressure(ADC_4096);
Serial.println("Temperature C = ");
Serial.println(temperature_c);
Serial.print("Pressure abs (mbar)= ");
Serial.println(pressure_abs);
Serial.println("");
}
/*void timeprint(){
if (!myFile.open("test.txt", O_RDWR | O_CREAT | O_AT_END)) {
sd.errorHalt("opening test.txt for write failed");
}
DateTime now = RTC.now();
DateTime future (now.unixtime() + 7 * 86400L + 30);
myFile.print(future.year(), DEC);
myFile.print('/');
myFile.print(future.month(), DEC);
myFile.print('/');
myFile.print(future.day(), DEC);
myFile.print(' ');
myFile.print(future.hour(), DEC);
myFile.print(':');
myFile.print(future.minute(), DEC);
myFile.print(':');
myFile.println(future.second(), DEC);
delay(500);
}*/
AND WHEN I CONNECT THEM TOGETHER, and put this code I JUST GET:
"I haven't stopped message" on serial
but not the second message "I stopped"
This is the code
const int chipSelect = 10;
#include <SdFat.h>
SdFat sd;
SdFile myFile;
#include "RTClib.h"
RTC_DS1307 RTC;
#include <Wire.h>
#include <SparkFun_MS5803_I2C.h>
MS5803 sensor(ADDRESS_HIGH);
float temperature_c, temperature_f;
double pressure_abs, pressure_relative, altitude_delta, pressure_baseline;
double base_altitude = 1655.0;
void setup() {
Serial.begin(9600);
Wire.begin();
delay(400); // catch Due reset problem
RTC.begin();
if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
sensor.reset();
Serial.println("I haven't stopped");
sensor.begin();
Serial.println("I stopped");
pressure_baseline = sensor.getPressure(ADC_4096);
}
void loop() {
timeprint();
pressureprint();
myFile.close();
}
void pressureprint(){
temperature_c = sensor.getTemperature(CELSIUS, ADC_512);
pressure_abs = sensor.getPressure(ADC_4096);
Serial.println("Temperature C = ");
Serial.println(temperature_c);
Serial.print("Pressure abs (mbar)= ");
Serial.println(pressure_abs);
Serial.println("");
}
void timeprint(){
if (!myFile.open("test.txt", O_RDWR | O_CREAT | O_AT_END)) {
sd.errorHalt("opening test.txt for write failed");
}
DateTime now = RTC.now();
DateTime future (now.unixtime() + 7 * 86400L + 30);
myFile.print(future.year(), DEC);
myFile.print('/');
myFile.print(future.month(), DEC);
myFile.print('/');
myFile.print(future.day(), DEC);
myFile.print(' ');
myFile.print(future.hour(), DEC);
myFile.print(':');
myFile.print(future.minute(), DEC);
myFile.print(':');
myFile.println(future.second(), DEC);
delay(500);
}
I think the problem is the I2C connection of the MS5803 is causing trouble to the SPI connections with the Datalogger, the MS5803 is connected via A4 and A5 but I don't know what pins the datalogger uses, but i haven't achieved anything else other than detecting the line where the program or at least the serial communication with Arduino stops.
Please help