Зависание при загрузке на сдкарту

Тема в разделе "Arduino & Shields", создана пользователем Супчик, 18 мар 2018.

  1. Супчик

    Супчик Нуб

    Всем привет, после подключения библиотеки сдФАТ. поскольку стандартная библиотека не хочет сохранять файл в папке, с сдфат начал зависать весь скетч, всегда на втором проходе,
    Код (C++):


    int IRMS[3];
    choose=0;
    int voltage[3];
    clock.read();
      // сохраняем текущее время, дату и день недели в переменные
    // clock.getTimeStamp(time, date, weekDay);
            char    s[16];

      strcpy(s,  "15.11.2014");//data если часы установлены)
      // выводим в serial порт текущее время, дату и день недели

    download++;
    download1++;
    Serial.println(download);
    Serial.println(s);
    for(int i=0;i<3;i++)
    {

        // perform measurements
        emon[i].calcVI(20,100);    // 2 h.c. for buffering + 14 h.c. for measuring
        IRMS[i]=emon[i].Irms;             //extract Vrms into Variable
        voltage[i]= emon[i].Vrms;
        // convert and pack data

      }

      digitalWrite(PIN_direction_TX_RX, HIGH);//Термопары
      delay(1);
      Serial.println('R');
      delay(10);
      digitalWrite(PIN_direction_TX_RX, LOW);
      int i=0;
    if(Serial.available()){delay(100);
      while( Serial.available() && i< 21)
      {temp1[i++] = Serial.read();} temp1[i++]='\0';}
      if(i>0)
      {
       digitalWrite(PIN_direction_TX_RX, LOW);  // читаем данные с порт
       delay(10);   // Выводим что приняли с других устройств
      }
       
     
      digitalWrite(PIN_direction_TX_RX, HIGH);//Утечки
      delay(1);
      Serial.println('L');
      delay(10);
      digitalWrite(PIN_direction_TX_RX, LOW);
      int k=0;
    if(Serial.available()){delay(100);
      while( Serial.available() && k< 21)
      {leak[k++] = Serial.read();} leak[k++]='\0';}
      if(k>0)
      {
       digitalWrite(PIN_direction_TX_RX, LOW);  // читаем данные с порт
       delay(10);   // Выводим что приняли с других устройств
      }

      digitalWrite(PIN_direction_TX_RX, HIGH);// Датчики воды
      delay(1);
      Serial.println('A');
      delay(10);
      digitalWrite(PIN_direction_TX_RX, LOW);
      int j=0;
    if(Serial.available()){delay(100);
      while( Serial.available() && j< 51)
      {SensWater1[i++] = Serial.read();} SensWater1[i++]='\0';}
      if(i>0)
      {
       digitalWrite(PIN_direction_TX_RX, LOW);  // читаем данные с порт
      delay(10);   // Выводим что приняли с других устройств
      }

     
          dataString = String(time);
          dataString += " ";
          dataString += String(date);
          dataString += " ";
          dataString += String(voltage[0]);
          dataString += " ";
          dataString += String(voltage[1]);
          dataString += " ";
          dataString += String(voltage[2]);
          dataString += " ";
          dataString += String(abs(IRMS[0]));
          dataString += " ";
          dataString += String(abs(IRMS[1]));
          dataString += " ";
          dataString += String(abs(IRMS[2]));
         
         

          WaterString = String(time);
          WaterString += " ";
          WaterString += String(date);
          WaterString += " ";
          WaterString += String(SensWater1);

         

          TempString = String(time);
          TempString += " ";
          TempString += String(date);
          TempString += " ";
          TempString += " 5555reft";
         
          //TempString += temp1;

         
      // создаём файл для записи
          sprintf(buf, "%s%c%c%s%s%c%s" ,"metropolis/",s[0],s[1], month[atoi(&s[3])-1], &s[8],'P',".txt"); //P-power electro
          choose=1;
          Serial.println(buf);
          Serial.println(dataString);
          delay(100);
           
          saveSD();
          if(download>30)// установка времени передачи файла
         {
          if(doFTP())
          {
           Serial.println(F("FTP OK"));
          download=0;
          }
          else Serial.println(F("FTP FAIL"));
         }
         
          choose=2;
          Serial.println(TempString);
              sprintf(buf, "%s%c%c%s%s%c%s" ,"metropolis/",s[0],s[1], month[atoi(&s[3])-1], &s[8],'R',".txt"); //R-refrigerators
          delay(100);
          saveSD();
          if(download1>60)// установка времени передачи файла
         {
          if(doFTP())
          { Serial.println(F("FTP OK"));
           download1=0;
          }
          else Serial.println(F("FTP FAIL"));
         }
         
    Код (C++):
    void saveSD()
    {
     

    //s адресует день, &s[3] - начало месяца, &s[8] - начало последних цифр года
    //strcpy(DateChanged,buf);
       File dataFile = SD.open(buf, FILE_WRITE);
      // создаём файл для записи
    //dataFile = SD.open(buf, FILE_WRITE);
      // если файл доступен для записи
      if (dataFile) {
        // сохраняем данные
        if(choose==1)
        {
          dataFile.println(dataString);
          dataFile.close();
        }
         else if(choose==2)
        {
          dataFile.println(TempString);
          dataFile.close();
        }
         else if(choose==3)
        {
          dataFile.println(CritErrorVOLT);
          dataFile.close();
        }
        else if(choose==4)
        {
          dataFile.println(CritErrorAMP);
          dataFile.close();
        }
        else if(choose==5)
        {
          dataFile.println(leak);
          dataFile.close();
        }
       
      } else
      {
        // если файл не доступен
        Serial.print("Error opening ");
        Serial.println(buf);
      }
      delay(100);
    }
     
  2. b707

    b707 Гуру

    при компиляции сколько памяти свободных остается?