Данные не записываются на 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
@ChaoSweeper, 👍0
Обсуждение1 ответ
[РЕШЕНО] - Основываясь на советах нескольких разных людей, я медленно разобрал код и протестировал каждую часть по отдельности, прежде чем снова подключить разделы. Я также протестировал код на новых датчиках индивидуально, убедившись, что он работает, я сделал новый жгут проводов и повторно протестировал. Сработало идеально!
- Аппаратный SPI Arduino NANO не работает
- Как установить CS-пин на Beetle BLE/Bluno Beetle на Adafruit SD Card Breakout - Ошибка инициализации!
- ЖК-дисплеи мешают работе SD-карты регистратора данных Adafruit
- Adafruit Micro-SD breakout не инициализируется на MEGA 2560
- Запись данных на SD-карту из SoftwareSerial
- Библиотека SD - карт мешает работе Adafruit
- Как увеличить скорость записи на SD-карту в Ардуино
- SD-карта не инициализируется
сократите свой код, чтобы создать файл только на SD-карте и записать в него некоторые фиксированные данные (например, "abc123") ..... не включайте в свой код ничего другого .... запустите тест и обновите свой вопрос с результатом .... также обновите список своих программ, чтобы в нем отображался свернутый код, @jsotola
Я разобрал датчики и код и протестировал их по отдельности, прежде чем медленно соединить все вместе. Спасибо за совет, это было то, что мне нужно!, @ChaoSweeper