Помогите пожалуйста найти ошибку.

Тема в разделе "Arduino & Shields", создана пользователем Garry_Poter, 19 апр 2018.

  1. Garry_Poter

    Garry_Poter Нерд

    Здравствуйте, кто нибудь подскажет? У меня на 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(' ');
    }
     
    Последнее редактирование: 19 апр 2018
  2. SergeiL

    SergeiL Оракул Модератор

    Ну все же просто ,"периоде-двадцать–секундие", ну , и правильный взмах волшебной палочкой! :)
    Недавно, Гермиона спрашивала, как ей таймер на микроволновке перевести - помогло! :)
     
    Последнее редактирование: 19 апр 2018
  3. ZAZ-965

    ZAZ-965 Гуру

    @Garry_Poter, почему решили, что данные пишутся каждую секунду? В файл не пишется метка времени, но двадцатисекундный интервал вроде правильно написан.
     
  4. fogary

    fogary Гик

    В этом фрагменте точно нет ошибки?

    Код (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?
     
    Последнее редактирование: 20 апр 2018