/*
 * Modder:  @red9030
 * Title:   SERVO CONTROL SERIAL (RX)
 * Reference: 
*/
/*
 *****************************************************
 *    LIBRERIAS
 *****************************************************
*/
#include <ESP32Servo.h>
#include <esp_now.h>
#include <WiFi.h>
/*
 *****************************************************
 *    VARIABLES
 *****************************************************
*/
const int LED_onboard=5;
const int servoPin = 18;
Servo servo;

//Structure data for recived message
typedef struct struct_message
{
  int data_servo;
}struct_message;
struct_message dataRecived;

int Servo_pos;
/*
 *****************************************************
 *    INICIO
 *****************************************************
*/
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  servo.attach(servoPin);
  
  WiFi.mode(WIFI_STA); //We place the module in station mode

  // Init ESP-NOW
  if (esp_now_init() != ESP_OK) 
  {
    Serial.println("Error initializing ESP-NOW");
    return;
  }else{
    Serial.println("Succes: Initialized ESP-NOW");
  }
  esp_now_register_recv_cb(cb_Data_recived);
}
/*
 *****************************************************
 *    REPETICIÓN
 *****************************************************
*/
void loop() {
  if(dataRecived.data_servo != Servo_pos){
    servo.write(dataRecived.data_servo);
    delay(15);  
    Servo_pos = dataRecived.data_servo;
  }
}
/*
 *****************************************************
 *    FUNCIONES
 *****************************************************
*/
//Callback for recived data
void cb_Data_recived(const uint8_t * mac, const uint8_t *incomingData, int len) {
  memcpy(&dataRecived, incomingData, sizeof(dataRecived));
  Serial.print("Data Recived: ");
  Serial.println(dataRecived.data_servo);
  analogWrite(LED_onboard,dataRecived.data_servo);
}