Запись на сд карту данных из массива

Тема в разделе "Arduino & Shields", создана пользователем Com731, 8 фев 2019.

  1. Com731

    Com731 Нуб

    Привет, можете помочь с глупым вопросом? Я получаю по wifi массив uint8_t buffer. Нужно записать его на сд карту.
    Если сделать так, то в файлик сохраняется просто 0.
    Код (C++):
    dataString += String(buffer[128], len);
    saveSD();
     
    Как сделать это правильно?
     
  2. Asper Daffy

    Asper Daffy Иксперд

    А можно на код посмотреть?
     
    Com731 нравится это.
  3. Com731

    Com731 Нуб

    Говнокод наверное еще тот
    Код (C++):
    #include <SPI.h>
    #include <SD.h>
    #include "ESP8266.h"
    #include "TroykaRTC.h"
    #include <Wire.h>

    #define SD_CS_PIN  9
    #define SSID        "COM731SWIFI2"
    #define PASSWORD    "BABAKAPPA"
    #define LEN_TIME 12
    #define LEN_DATE 12
    #define LEN_DOW 12

    ESP8266 wifi(Serial1);
    String dataString = "";
    uint8_t buffer[128] = {0};
    RTC clock;
    char time[LEN_TIME];
    char date[LEN_DATE];
    char weekDay[LEN_DOW];
    void saveSD()
    {
      File dataFile = SD.open("datalog.txt", FILE_WRITE);
        dataFile;
        dataFile.println(dataString);
        dataFile.close();
        Serial.println("Save OK");
    }
    void setup(void)
    {
      Serial1.begin(115200);
        Serial.begin(9600);
        clock.begin();
        clock.set(__TIMESTAMP__);
      SD.begin(SD_CS_PIN);
        wifi.setOprToStationSoftAP();
        if (wifi.joinAP(SSID, PASSWORD)) {
            Serial.print("Join AP success\r\n");
            Serial.print("IP: ");
            Serial.println(wifi.getLocalIP().c_str());  
        } else {
            Serial.print("Join AP failure\r\n");
        }
        wifi.enableMUX();
        wifi.startTCPServer(8090);
        wifi.setTCPServerTimeout(10);
    }
    void loop(void)
    {
      uint8_t mux_id;
      uint32_t len = wifi.recv(mux_id, buffer, sizeof(buffer), 100);
      dataString = "";
        if(buffer, len == 1){
             // digitalWrite(8,HIGH);
             //dataString += "Door open";
            // dataString += " ";
             //dataString += "Тут время";
             //saveSD();
             delay(120);
             len = wifi.recv(mux_id, buffer, sizeof(buffer), 100);
             clock.read();
             clock.getTimeStamp(time, date, weekDay);
             dataString += String(buffer[128], len);
           
             dataString += " ";
              dataString += String(time);
             saveSD();
             Serial.print(String(buffer[128], len));
             Serial.print("]\r\n");
            }
           
            }

     
     
  4. Asper Daffy

    Asper Daffy Иксперд

    Ну, если ты уверен, что получаешь текст, а не что-то другое, то попробуй вместо
    dataString += String(buffer[128], len);
    написать
    buffer[len] = 0;
    dataString += buffer;
     
    Com731 нравится это.
  5. Com731

    Com731 Нуб

    Не компилится
     
  6. Asper Daffy

    Asper Daffy Иксперд

    Ну, поставь перед buffer (char *).

    А вообще, если не компилится, всегда показывай как вставил и текст сообщения.
     
    Com731 нравится это.
  7. Com731

    Com731 Нуб

    Код (C++):
     dataString += char(buffer[128], len);
    Если так, то выводит непонятный символ
    upload_2019-2-9_13-20-39.png
     
  8. Asper Daffy

    Asper Daffy Иксперд

    Блин, ну я же Вам писал как делать! Чего бред-то писать?

    dataString += (char *) buffer;

    Если не компилируется, то
    1. код
    2. текст сообщения об ошибке

    Без этого я прекращаю разговор.
     
    Com731 нравится это.
  9. Com731

    Com731 Нуб

    Да! Получилось! Спасибо, надо будет где нибудь почитать про массивы на c