подключение слота расширения microSD карты

Тема в разделе "Arduino & Shields", создана пользователем kasyanko, 6 май 2017.

Метки:
  1. kasyanko

    kasyanko Нуб

    Добрый день
    Недавно начал изучения ардуино, для теста купил себе Uno R3, пару датчиков(bmp 280 и dht22), bloototh, все это подключить по примерам не составило труда, теперь хочу подключить модуль расширения для microSD карт [​IMG] http://prntscr.com/f4peus для возможности сохранения данных, но столкнулся с проблемой, порты для подключения уже заняты(10,11,12,13 датчиком bmp280) сейчас на ардуино у меня свободные цифровые порты с 3 по 9, я так понимаю что CS порт можно подключить к одному из них, а как быть с остальными?
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Можно датчик подключить на другие пины
     
    kasyanko нравится это.
  3. NikitOS

    NikitOS Король шутов Администратор

    Дайте скетч этого датчика если на поняли
     
    kasyanko нравится это.
  4. kasyanko

    kasyanko Нуб

    вроде понял, эти порты можно на любые поменять?
    Код (C++):
    #define BMP_SCK 13
    #define BMP_MISO 12
    #define BMP_MOSI 11
    #define BMP_CS 10


    Код (C++):

    #include <Wire.h>
    #include <SPI.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_BMP280.h>

    #define BMP_SCK 13
    #define BMP_MISO 12
    #define BMP_MOSI 11
    #define BMP_CS 10

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


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

      if (!bme.begin()) {
        Serial.println("Could not find a valid BMP280 sensor, check wiring!");
        while (1);
      }
    }

    void loop() {
        Serial.print("Temp= ");
        Serial.print(bme.readTemperature());
        Serial.println(" *C");
     
        Serial.print("davlenie = ");
        Serial.print(bme.readPressure()/133.3,1);
        Serial.println(" Mm");

        Serial.print("Vusota = ");
        Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
        Serial.println(" m");
     
        Serial.println();
        delay(2000);
    }
     
  5. NikitOS

    NikitOS Король шутов Администратор

    Ой..
    Это моя глупость.
    Подключите датчик и модуль к одним и тем же пинам а cs к каким хотите и напишите
    В начале:
    Код (C++):
    #define SD_CS_PIN 8
    В setup'е:
    Код (C++):
    if (!SD.begin(SD_CS_PIN)) {
    // выводим сообщение об ошибке
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
    } else {
    Serial.println("Card initialized.");
    }
     
    kasyanko нравится это.
  6. kasyanko

    kasyanko Нуб

    то есть есл я через макетку подключу датчик и слот расширения к 11,12, 13 порту одновременно то все должно норм работать?
     
  7. NikitOS

    NikitOS Король шутов Администратор

    Именно!Не забудьте cs на разные поставить
     
    kasyanko нравится это.
  8. NikitOS

    NikitOS Король шутов Администратор

    kasyanko нравится это.
  9. kasyanko

    kasyanko Нуб

    Спасибо, подключил все работает:):)
    Появилось пару вопросов по программированию, как правильно сделать? задача такова:
    Нужно записывать данные в файл, если мы функцию открытия и закрытия перенесем в loop() оно не много ресурсов будет кушать(открыть файл, записать, закрыть файл если датчик будет считывать каждую секунду например), может можно открыть файл в setup() только вот когда закрыть я не знаю
     
  10. kasyanko

    kasyanko Нуб

    еще вопрос возник, датчик дает не верные значения, с чем это может быть связано?
    когда комментирую эти строки все норм
    Код (C++):
     if (!SD.begin(8)) {
        Serial.println("initialization failed!");
        return;
      }




    Код (C++):
    //Тестировалось на Arduino IDE 1.0.1
    #include <Wire.h>
    #include <SPI.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_BMP280.h>

    #include <SD.h>

    #define BMP_SCK 13
    #define BMP_MISO 12
    #define BMP_MOSI 11
    #define BMP_CS 10

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





    #define SD_CS_PIN 8


    File myFile;  // Файл который будет скопирован
    char* ORIGINAL_FILE_NAME = "1.txt";  // Название копируемого файла
    char fileText[255];  // Хранилище для текста содержащегося в копируемом файле

    void setup()
    {
       Serial.begin(9600);
      Serial.println(F("BMP280 test"));
     
      if (!bme.begin()) {
        Serial.println("Could not find a valid BMP280 sensor, check wiring!");
        while (1);
      }
      // SPI SS пин должен быть OUTPUT
      pinMode(8, OUTPUT);
     
      // Инициализируем СД карту
      Serial.print("Initializing SD card...");
      if (!SD.begin(8)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
     
     
    }
    // Весь код был выполнен в функции setup
    void loop()
    {  /*
        // Открываем (или создаем, если его нет) файл копии
        myFile = SD.open(ORIGINAL_FILE_NAME, FILE_WRITE);
     
        // Записываем в него считанный текст
        if (myFile) {
          Serial.print("Write...");
          myFile.print(bme.readTemperature());
          myFile.print(" ");
           
          myFile.println(bme.readPressure()/133.3,1);
          // Закрываем файл
          myFile.close();
          Serial.println("done.");
        } else {
          // Если произошла ошибка открытия файла, выводим сообщение
          Serial.print("error opening ");
          Serial.println(ORIGINAL_FILE_NAME);
        }*/

         Serial.print("Temperature = ");
        Serial.print(bme.readTemperature());
        Serial.println(" *C");
       
        Serial.print("davlenie = ");
        Serial.print(bme.readPressure()/133.3,1);
        Serial.println(" Mm");

        Serial.print("Vusota = ");
        Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
        Serial.println(" m");
       
        Serial.println();
        delay(2000);
    }
     
  11. NikitOS

    NikitOS Король шутов Администратор

    всё связано с тем что датчики sd-карта всегда включены а нужно чтобы один работал а другой был отключен(для этого и нужны пины cs)
     
    kasyanko нравится это.
  12. kasyanko

    kasyanko Нуб

    не подскажите как мне выйти из даного положения, посмотрел библиотеку, метода типа SD.end() нету
     
    Последнее редактирование: 6 май 2017
  13. NikitOS

    NikitOS Король шутов Администратор

    Даже не знаю...