Код (C++): [code] #include <Wire.h> // библиотека для работы I²C #include "TroykaRTC.h"// библиотека для работы с часами реального времени #include <SPI.h> // библиотека для работы с SPI #include <SD.h> // библиотека для работы с SD-картами #include <iarduino_DHT.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f,16,2); iarduino_DHT sensor(2); #define SD_CS_PIN 7 #define LEN_TIME 12 // размер массива для времени #define LEN_DATE 12 // размер массива для даты #define LEN_DOW 12 // размер массива для дня недели RTC clock; // создаём объект для работы с часами реального времени char time[LEN_TIME]; // массив для хранения текущего времени char date[LEN_DATE]; // массив для хранения текущей даты char weekDay[LEN_DOW]; // массив для хранения текущего дня недели String dataString = ""; const int analogInPin = A0; // выход с датчика давления float P = 0; //задаем переменную для давления void setup() { Serial.begin(9600); // открываем последовательный порт clock.begin(); // инициализация часов // clock.set(10,25,45,27,07,2005,THURSDAY); // метод установки времени и даты в модуль вручную //clock.set(__TIMESTAMP__); // метод установки времени и даты автоматически при компиляции // закоментируйте оба метода clock.set(); // что бы время менялось при прошивки или сбросе питания Serial.println("Initializing SD card..."); // если microSD-карта не была обнаружена if (!SD.begin(SD_CS_PIN)) { // выводим сообщение об ошибке Serial.println("Card failed, or not present"); // don't do anything more: return; } else { Serial.println("Card initialized."); } } void loop() { int check; // переменная состояния датчика int temperature; // переменная покозания температуры int humidity; // переменная показания влажности int sensorValue = 0; // считанное значение dataString = ""; sensorValue = readSensor(10); P = 1.562 * (sensorValue / 7.5) - 6.25; // вычесляем давление // мониторинг ошибок // считывание данных с датчика DHT11 check = sensor.read(); clock.read(); // запрашиваем данные с часов clock.getTimeStamp(time, date, weekDay); // сохраняем текущее время, дату и день недели в переменные Serial.print(time); // выводим в serial порт текущее время, дату и день недели Serial.print("\t"); // выводим в serial порт текущее время, дату и день недели Serial.print(date); // выводим в serial порт текущее время, дату и день недели Serial.print("\t"); // выводим в serial порт текущее время, дату и день недели Serial.println(weekDay); // выводим в serial порт текущее время, дату и день недели switch (check) { case DHT_OK: // всё OK temperature = sensor.tem; // считываем показания влажности и температуры humidity = sensor.hum; dataString += String(time); // формируем строку с результатами показаний датчика dataString += "\t"; // ставим знак табуляции dataString += String(temperature); dataString += "\t"; dataString += String(humidity); dataString += "\t"; dataString += String(P); dataString += "\t"; Serial.print(dataString); // выводим результаты в serial-порт saveSD(); // сохраняем на microSD break; case DHT_ERROR_CHECKSUM: // ошибка контрольной суммы Serial.println("Checksum error"); break; default: // неизвестная ошибка Serial.println("Unknown error"); break; } lcd.init(); //включение дисплея lcd.backlight(); //включение подсветки lcd.print("27 C"); //выводим сообщение lcd.setCursor(0, 1); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки) lcd.print(P);//выводим сообщение lcd.setCursor(5, 1); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки) lcd.print("b");//выводим сообщение lcd.setCursor(8, 1); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки) lcd.print(time);//выводим сообщение lcd.setCursor(7, 0); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки) lcd.print(temperature);//выводим сообщение lcd.setCursor(9, 0); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки) lcd.print(" C");//выводим сообщение lcd.setCursor(12, 0); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки) lcd.print(humidity);//выводим сообщение lcd.setCursor(14, 0); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки) lcd.print(" %");//выводим сообщение lcd.setCursor(7, 1); //вводим координаты следущего вывода (8 - столбец в строке, 1 - номер строки) lcd.print("S");//выводим сообщение delay(1000); // ждём одну секунду } int readSensor(int samples){ // samples - сколько раз нужно прочитать сенсор unsigned int avg_sum=0; for(byte i=0;i<samples;i++){ avg_sum+=analogRead(analogInPin); delay(5); // небольшая пауза между замерами } return avg_sum/samples; } void saveSD() { File dataFile = SD.open("sdv.txt", FILE_WRITE); // создаём файл для записи if (dataFile) { // если файл доступен для записи dataFile.println(dataString); // сохраняем данные dataFile.close(); // закрываем файл Serial.println("Save OK"); // выводим сообщение об удачной записи } else { Serial.println("Error opening sdv.txt"); // если файл не доступен } } [/code] Помогите пожалуйста изменить код так, чтобы запись на SD происходила каждые 15 секунд, а не каждое считывание показаний с датчика DHT. Сам ни как разобраться не могу….
Объявите в начале переменную Код (C++): unsigned long timing; // Переменная для хранения точки отсчета А потом вызывайте функцию записи на CD по условию Код (C++): if (millis() - timing > 15000){ // Вместо 15000 можно подставить другую периодичность для сохранения timing = millis(); saveSD(); // сохраняем на microSD }