Здравствуйте, делаю курсовую работу по теме "Разработка и программирование термогигрометра на базе Arduino". Написал уже полностью скетч который читает данные с модуля dht11 и сохраняет их на microsd. Далее при подключении модуля rtc ds1302 файл перестал создаваться на microsd. Методом тыка я выяснил что дело в строчке rtc.begin(). Когда она закоментированна файл создается и все работает исправно, только без времени соответственно, а когда строчка активна программа почему то перестает сохранять данные в файл. Ниже прикрепляю код, надеюсь на вашу помощь. Код (C++): //Раздел 1 //Измерение температуры и влажности //Запись на карту памяти //SD card attached to SPI bus as follows: //MOSI - pin 11 //MISO - pin 12 //SCK - pin 13 //CS - pin 10(SS pin) //Раздел 2 //Используется бибилиотека: //DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library #include <DHT.h> //Подключаем библиотеки для SD ридера #include <SPI.h> #include <SD.h> //Подключаем библиотеку для часов реального времени #include "RTClib.h" //SS - pin 10 const int chipSelect = 10; //Используется датчик DHT11 #define DHTTYPE DHT11 // Строка означает, что переменная DHTTYPE=DHT11 //Датчки подключим к цифровому порту 4 #define DHTPIN D14 //Строка означает, что переменная DHTPIN=4 //Инициализируем датчик DHT11 //Создадим Объект dht Класса DHT с параметрами DHTPIN и DHTTYPE DHT dht(DHTPIN, DHTTYPE); //Создадим объект rtc класса DS1302 с параметрами D8, D6, D7 DS1302 rtc(D8, D6, D7); //Раздел 3 void setup() { //открываем порт на скорости 9600 бод Serial.begin(9600); while (!Serial) { ; //ждем подключения порта } //Подключаем SD карту Serial.print("Подключение SD карты..."); // Проверяем подключение карты, пока это не случится: if (!SD.begin(chipSelect)) { Serial.println("Карта не читается, или отсутствует"); while(1); } Serial.println("Карта установлена."); //Приветствие перед началом работы датчика Serial.println("Начинаем измерять влажность и температуру"); //"Открываем" датчик измерения температуры и влажности dht.begin(); //Запускаем rtc модуль rtc.begin(); //Проверяем модуль на работоспособность if (!rtc.isrunning()) { Serial.println("RTC не работает!");} } void loop() { // Чтение температуры и влажности занимает примерно 250 мс! // Датчик очень медленный, может выдавать данные 2-х //секундной давности //Используем Метод readHumidity Объекта dht //Влажность записываем в переменную h типа float float h = dht.readHumidity(); //Используем Метод readTemperature Объекта dht //Температуру в градусах Цельсия записываем в переменную h //типа float float t = dht.readTemperature(); //Проверим данные на выходе датчика. Проверяем, пока данные не //появятся if (isnan(h) || isnan(t)) { //Нет данных? Выводим сообщение об ошибке в //последовательный порт Serial.println("Ошибка датчика!"); //Возвращаемся к проверке данных на выходе датчика return; } //Создаем переменную даты и времени DateTime now = rtc.now(); //Выводим данные в серийный порт Serial.print("Влажность: "); Serial.print(h); Serial.print("% Температура: "); Serial.print(t); Serial.print("°C "); Serial.println(now.toStr()); //Создаем строку, в которой будем писать влажность и температуру String dataString = ""; // Записываем подряд влажность,температуру и дату/время через ";" dataString = String(h, 2)+";"+String(t, 2)+";"+now.toStr(); //Открываем файл на карте памяти File dataFile = SD.open("datalog.csv", FILE_WRITE); //Если с файлом все хорошо, то пишем переменную dataString if (dataFile) { dataFile.println(dataString); dataFile.close(); //Для проверки пишем тоже в монитор порта Serial.println(dataString); } //Если что-то не так то else { Serial.println("Ошибка при открытии datalog.csv"); } //Делаем паузу между измерениями пару секунд, см. коммент. //ниже delay(3000); } Используется плата Wemos D1 R2.
На одной шине стояли часы и OLED дисплей. На дисплее отображались кракозябры. Потому что в память дисплея пролезали артефакты обмена по шине часов с ардуиной. Поэтому пришлось перед циклом работы с дисплеем вводить команду обнуления памяти дисплея. Может у вас что-то подобное с кардридером.
да запустить получилось, проблема не в часах, а в том что кард ридер перестает создавать файл, когда часы появляются в основном скетче