Данные не записываются на SD-карту на M0

Я пытаюсь написать скетч, который будет извлекать данные из BME280 и ADXL345 с использованием протокола I2C, а затем записывать эти данные на SD-карту. Используя различные скетчи, которые я нашел в Интернете, у меня есть кое-что, что, по моему мнению, должно работать, но это не так, и я не уверен, в чем проблема. Во время установки я прошу его создать файловый модуль Data.txt, напишите заголовок, а затем закройте для последующего использования. Я даже не могу заставить это работать. Еще одна проблема, с которой я сталкиваюсь, - мой датчик BME не работает. У меня оба датчика подключены к прототипу FeatherWing следующим образом

Feather      ADXL     BME       
SCL ----->  SCL-----> SCK
SDA------>  SDA-----> SDI
3V------->  VIN-----> VIN
GND------>  GND-----> GND
3V------->  CS

Технические характеристики оборудования: 1 Регистратор 1x Перо M0 1x ADXL345 1x BME280 1 Прото крылатого пера

Любое понимание того, где я ошибся, будет очень оценено!

#include <SdFat.h>                 // SD card library
#include <Wire.h>               // I2C wire lbrary
#include <Adafruit_BME280.h>    // Pressure Sensor library
#include <Adafruit_Sensor.h>    // Adafruit Sensor library
#include <Adafruit_ADXL345_U.h> // ADXL345 library

#define SEALEVELPRESSURE_HPA (1013.25)
#define RANGE_2_G 0;

int chipSelect = 4;
float hgInches = 29.97;

SdFat SD;
Adafruit_BME280 bme;
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);


void setup() {
  //turn on serial monitor
  Serial.begin(9600);
  while (!Serial) {
    ;
  }// end while - serial

  // initialize I2C bus
  Wire.begin();

  bool status;
  //initialize BME sensor
  status =  bme.begin();
  if (!status) {
    Serial.println("No BME");
    while (1);
  } // end if - BME

  //initialize ADXL sensor, range and data rate
  status = accel.begin();
  accel.setRange( ADXL345_RANGE_2_G );
  accel.setDataRate( ADXL345_DATARATE_50_HZ );
  if (!status) {
    Serial.println("No ADXL");
    while (1);
  } // end if - accel

  // initialize the SD card
  Serial.print("Looking for SD: ");
  if (!SD.begin(chipSelect)) {
    Serial.println("SD not found ");
    return;
  } // end if - SD
  Serial.println(" SD found");
  // print a header in HAB Flight Data.txt
  File flightData = SD.open("HAB Flight Data.txt", FILE_WRITE);
  if (flightData) {
    flightData.print("HAB FLight Data");
    flightData.println("Temperature, Pressure, Altitude, Humidity, X-Axis, Y-Axis, Z-Axis");
    flightData.println("_________________________________________________________________");
    flightData.close();
  } //end if - flightdata
} // end main setup

void loop() {
  //var to hold sensor data
  float BMEt1 = (bme.readTemperature());
  float BMEh1 = (bme.readHumidity());
  float BMEp1 = (bme.readPressure() / 100.0F);
  float BMEa1 = (bme.readAltitude(SEALEVELPRESSURE_HPA));
  // register events for ADXL
  sensors_event_t event;
  accel.getEvent(&event);

  // print out BME data to serial monitor
  Serial.println("BME Data.");
  Serial.print("Temperature = "); Serial.print(BMEt1); Serial.println(" *F");
  Serial.print("Pressure = "); Serial.print(BMEp1); Serial.println(" hPa");
  Serial.print("Approx. Altitude = "); Serial.print(BMEa1); Serial.println(" meters");
  Serial.print("Humidity = "); Serial.print(BMEh1); Serial.println(" %");

  // print out ADXL data to serial monitor
  Serial.println("Accelerometer Data");
  Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print("  ");
  Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print("  ");
  Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print("  ");

  delay(1000); //Pause between readings.

  // Create a txt file adn record data
  File flightData = SD.open("HAB Flight Data.txt", FILE_WRITE);
  if (flightData) {
    flightData.print(BMEt1); flightData.print(","); flightData.print(BMEp1); flightData.print(",");
    flightData.print(BMEa1); flightData.print(","); flightData.print(BMEh1); flightData.print(",");
    flightData.println("X: "); flightData.print(event.acceleration.x); flightData.print(",");
    flightData.println("Y: "); flightData.print(event.acceleration.y); flightData.print(",");
    flightData.println("Z: "); flightData.print(event.acceleration.z); flightData.print(",");
    flightData.close();
  } //  end if - data recorder
  else {
    Serial.println("error opening HAB Flight Data.txt");
  } // end else - SD error

} //end Main loop

, 👍0

Обсуждение

сократите свой код, чтобы создать файл только на SD-карте и записать в него некоторые фиксированные данные (например, "abc123") ..... не включайте в свой код ничего другого .... запустите тест и обновите свой вопрос с результатом .... также обновите список своих программ, чтобы в нем отображался свернутый код, @jsotola

Я разобрал датчики и код и протестировал их по отдельности, прежде чем медленно соединить все вместе. Спасибо за совет, это было то, что мне нужно!, @ChaoSweeper


1 ответ


0

[РЕШЕНО] - Основываясь на советах нескольких разных людей, я медленно разобрал код и протестировал каждую часть по отдельности, прежде чем снова подключить разделы. Я также протестировал код на новых датчиках индивидуально, убедившись, что он работает, я сделал новый жгут проводов и повторно протестировал. Сработало идеально!

,