#include "FS.h"
#include "SD.h"
#include "SPI.h"
#include<esp_now.h>
#include<WiFi.h>
float incomingAccX, incomingAccY, incomingAccZ;

typedef struct struct_message{
  float AccX;
  float AccY;
  float AccZ;
} struct_message;

struct_message incomingReadings;

// Callback when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
  memcpy(&incomingReadings, incomingData, sizeof(incomingReadings));
    incomingAccX = incomingReadings.AccX;
    incomingAccY = incomingReadings.AccY;
    incomingAccZ = incomingReadings.AccZ;
}

void setup(){
    WiFi.mode(WIFI_STA);
    // Init ESP-NOW
    if (esp_now_init() != ESP_OK) {
      return;
    }
    if(!SD.begin()){
      return;
    }
// Register for a callback function that will be called when data is received
    esp_now_register_recv_cb(OnDataRecv);
}
void loop(){
  uint8_t cardType = SD.cardType();
    if(cardType == CARD_NONE){
        return;
    }
    appendFile(SD, "/AccX.txt", incomingAccX);
    appendFile_char(SD, "/AccX.txt", ",");
   
    appendFile(SD, "/AccY.txt", incomingAccY);
    appendFile_char(SD, "/AccY.txt", ",");
       
    appendFile(SD, "/AccZ.txt", incomingAccZ);
    appendFile_char(SD, "/AccZ.txt", ",");
}

void appendFile(fs::FS &fs, const char * path, float message){ // changed the argument type to int16_t

    File file = fs.open(path, FILE_APPEND);

    file.print(message)

    file.close();
}
void appendFile_char(fs::FS &fs, const char * path, const char * message){ // added an 'appendFile_char' function to append ',' as data separators

    File file = fs.open(path, FILE_APPEND);

    file.print(message)
  
    file.close();
}