Здравствуйте, кто нибудь подскажет? У меня на sd данные пишуться каждую секунду а как сделать чтобы данные записывались каждые 20 секунд? Я пытался но не вышло. Код (C++): #include <LiquidCrystalRus.h> #include <Wire.h> // Подключаем библиотеку Wire #include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature #define DS18B20 0 // Указываем, к какому выводу подключена DQ #include "RTClib.h" #include <MS5611.h> #include <SI7021.h> #include <SPI.h> #include <SD.h> int vl; int d; SI7021 sensor; const int chipSelect = 4; int hum1; MS5611 ms5611; RTC_DS1307 RTC; unsigned long realPressure; int z; int dav; int times; unsigned long lasttime; const int temptime = 10000; const int sdtime = 20000; unsigned long lastime; int temp2; long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика LiquidCrystal_I2C lcd(0x38,20,4); // Задаем адрес и размер дисплея OneWire oneWire(DS18B20); DallasTemperature sensors(&oneWire); unsigned long TimeLightOffOn = 86397000; double referencePressure; void setup() { sensors.begin(); lcd.init(); lcd.backlight() ; times = 0; lcd.setCursor(0,0); lcd.print("TEM""\xA8""EPAT""\xA9""PA: "); lcd.setCursor(0,1); lcd.print("B""\xA7""A""\xA3""HOCT""\x08"":"); lcd.setCursor(0 ,2); lcd.print("\xE0""AB""\xA7""EH""\xA5""E:"); lasttime = 0; lastime = 0; Wire.begin(); RTC.begin(); RTC.adjust(DateTime(__DATE__, __TIME__)); while(!ms5611.begin()) { delay(500); } if (!SD.begin(chipSelect)) { return;} delay(500); } void loop() { si7021_env data; DateTime now = RTC.now(); //byte Seconds = ((millis()+TimeLightOffOn)/1000UL)%60; //byte Minutes = (((millis()+TimeLightOffOn)/1000UL)/60UL)%60; //byte Hours = (((millis()+TimeLightOffOn)/1000UL)/3600UL)%24; if (millis() - lasttime > temptime){ sensors.requestTemperatures(); temp2 = sensors.getTempCByIndex(0); si7021_env data = sensor.getHumidityAndTemperature(); realPressure = ms5611.readPressure(); z = realPressure / 133.322; hum1=data.humidityBasisPoints-data.humidityBasisPoints/100*100; d = data.humidityBasisPoints/100; lcd.setCursor(13,0); lcd.print(temp2); lcd.print("\x99""C"" "); lcd.setCursor(10,1); lcd.print(" "); lcd.print(data.humidityBasisPoints/100); lcd.print(","); lcd.print(hum1); lcd.print(" \%"); lcd.print(" "); lcd.setCursor(10,2); lcd.print(z); lcd.print("mm Hg"); lasttime = millis (); int dav = z ; } if (millis() - times > sdtime){ File dataFile = SD.open("TEST.txt", FILE_WRITE); times = millis(); if (dataFile ) { // записываем строку в файл dataFile.print(dav); dataFile.print("mm Hg"); dataFile.print(" "); dataFile.print(temp2); dataFile.print("C"" "); dataFile.print(d); dataFile.println(" \%"" "); dataFile.close();}} lcd.setCursor(0,3); lcd.print(now.hour(), DEC); lcd.print(':'); lcd.print(now.minute(), DEC); lcd.print(" "); lcd.setCursor(10,3); lcd.print(now.year(), DEC); lcd.print('/'); lcd.print(now.month(), DEC); lcd.print('/'); lcd.print(now.day(), DEC); lcd.print(' '); }
Ну все же просто ,"периоде-двадцать–секундие", ну , и правильный взмах волшебной палочкой! Недавно, Гермиона спрашивала, как ей таймер на микроволновке перевести - помогло!
@Garry_Poter, почему решили, что данные пишутся каждую секунду? В файл не пишется метка времени, но двадцатисекундный интервал вроде правильно написан.
В этом фрагменте точно нет ошибки? Код (C++): ... if (millis() - lasttime > temptime){ ... lcd.print(z); lcd.print("mm Hg"); int dav = z ; } ... if (millis() - times > sdtime){ ... if (dataFile ) { // записываем строку в файл dataFile.print(dav); ... Если первое условие не выполнено, а второе выполнено, чему равна переменная dev?