Добрый день Недавно начал изучения ардуино, для теста купил себе Uno R3, пару датчиков(bmp 280 и dht22), bloototh, все это подключить по примерам не составило труда, теперь хочу подключить модуль расширения для microSD карт http://prntscr.com/f4peus для возможности сохранения данных, но столкнулся с проблемой, порты для подключения уже заняты(10,11,12,13 датчиком bmp280) сейчас на ардуино у меня свободные цифровые порты с 3 по 9, я так понимаю что CS порт можно подключить к одному из них, а как быть с остальными?
вроде понял, эти порты можно на любые поменять? Код (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); }
Ой.. Это моя глупость. Подключите датчик и модуль к одним и тем же пинам а 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."); }
то есть есл я через макетку подключу датчик и слот расширения к 11,12, 13 порту одновременно то все должно норм работать?
Спасибо, подключил все работает Появилось пару вопросов по программированию, как правильно сделать? задача такова: Нужно записывать данные в файл, если мы функцию открытия и закрытия перенесем в loop() оно не много ресурсов будет кушать(открыть файл, записать, закрыть файл если датчик будет считывать каждую секунду например), может можно открыть файл в setup() только вот когда закрыть я не знаю
еще вопрос возник, датчик дает не верные значения, с чем это может быть связано? когда комментирую эти строки все норм Код (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); }
всё связано с тем что датчики sd-карта всегда включены а нужно чтобы один работал а другой был отключен(для этого и нужны пины cs)