Writing BMP280 data to an SD card using Teensyduino (3.2)

Hello! I am having trouble pulling data from a pressure sensor and writing it to an SD card. It seems that I can either pull accurate data and NOT write to the card, or pull inaccurate data and successfully write to the card. This setup is SPI, using an Adafruit BMP280, an Adafruit SD SPI Card Breakout, and a Teensy 3.2.

When I comment out the following if-statement, the data is accurate but cannot write to the card:

  if (!SD.begin(SD_CS_PIN)) {

    Serial.println("initialization failed!");
  }    else {
    Serial.println("initialization done.");

I cannot understand how this if-statement affects the data and/or writing capability so significantly. I'm sure it's something silly. Here is the entirety of the code, please let me know if you can help!

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#include <SdFatConfig.h>
#include <SdFat.h>

#define BMP_SCK  (2)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS   (A7)

#define SD_CS_PIN 10 

//Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

#include "SdFat.h"
#include "SdFatConfig.h"
SdFat SD;
File myFile;

void setup() {
  Serial.println(F("BMP280 test"));

  //if (!bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID)) {
  if (!bmp.begin()) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
                      "try a different address!"));
    while (1) delay(10);

  /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */

 // Open serial communications and wait for port to open:
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only

  Serial.print("Initializing SD card...");

  if (!SD.begin(SD_CS_PIN)) {

    Serial.println("initialization failed!");
  }    else {
    Serial.println("initialization done.");


void loop() {
  myFile = SD.open("test.txt", FILE_WRITE);
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");

    // close the file:
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
    Serial.print(F("Temperature = "));
    Serial.println(" *C");

    Serial.print(F("Pressure = "));
    Serial.println(" Pa");

    Serial.print(F("Approx altitude = "));
    Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
    Serial.println(" m");


Did you try using a different CS pin than A7?

it is an ARM chip

I have, and I can definitely again with different pins. But the fact that it is able to write to card, albeit with skewed data tells me it is able to communicate between the Teensy and the chip and may not be a chip select error.

So what might that mean?

He was giving me some info.

Ah haha my bad.


This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.