write-buffer1-on-sd

nazarijtipusak080/work-with-sd-esp32/write-buffer1-on-sd

No description
write-buffer1-on-sd
@/write-buffer1-on-sd
buffer1nazarijtipusak080/buffer1/buffer1
CSport
CS (chip select) pin the SD card reader is connected to. Also known as SS (slave select).
FILEstring
File name to append to
Wpulse
Perform file open, write, flush, close cycle
write-buffer1-on-sd
buffer1
CS
FILE
W
buffer
DONE
DONEpulse
Fires when write is done
buffernazarijtipusak080/buffer1/buffer1
To use the node in your project you should have the nazarijtipusak080/work-with-sd-esp32 library installed. Use the “File → Add Library” menu item in XOD IDE if you don’t have it yet. See Using libraries for more info.

C++ implementation

#pragma XOD evaluate_on_pin disable
#pragma XOD evaluate_on_pin enable input_W
#pragma XOD error_raise enable

//{{#global}}
#include <FS.h>
#include <SD.h>
#include <SPI.h>
//{{/global}}

node {
    bool begun;

    void evaluate(Context ctx) {
        if (!isInputDirty<input_W>(ctx))
            return;

        if (!begun) {
            // Ініціалізація SPI та SD
            auto csPin = getValue<input_CS>(ctx);
            SPI.begin(18, 19, 23, csPin); // SCK, MISO, MOSI, CS
            begun = SD.begin(csPin);
        }

      if (!begun) {
            // Помилка ініціалізації
            raiseError(ctx);
            return;
        }

        // Отримання імені файлу
        char filename[16] = { 0 };
        dump(getValue<input_FILE>(ctx), filename);

        // Спроба відкрити файл для запису
        File file = SD.open(filename, FILE_WRITE);
        if (!file) {
            // Помилка відкриття файлу
           begun = false;
            raiseError(ctx);
            return;
        }

        auto _object = getValue<input_buffer1>(ctx); // buffer1

 
       
        file.seek(0);
        file.write(_object->buffer,_object->len);
        

        // Додати новий рядок та завершити
        
        file.flush();
        file.close();

        // Передати сигнал про завершення
        emitValue<output_DONE>(ctx, 1);
        emitValue<output_buffer>(ctx, _object); // convenience
    }
}