/*
 * Modder:  @red9030
 * Title:   SERVO CONTROL SERIAL (TX)
 * Reference: 
*/
/*
 *****************************************************
 *    LIBRERIAS
 *****************************************************
*/
#include <esp_now.h>
#include <WiFi.h>
/*
 *****************************************************
 *    VARIABLES
 *****************************************************
*/
#define b_yellow 19  //Button for 90º 
#define b_green 18   //Button for 180º
const int LED_onboard=5;

//MAC-ADDRESS
uint8_t receiverMacAddress[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};  //Here mac for Receptor (RX)

//Structure data for send message
typedef struct struct_message
{
  int data_servo;
}struct_message;
struct_message dataSend;
/*
 *****************************************************
 *    INICIO
 *****************************************************
*/
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(b_green, INPUT_PULLUP);
  pinMode(b_yellow, INPUT_PULLUP);

  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_send_cb(cb_Data_send); //Message Sending and Message Status

 // Register peer
  esp_now_peer_info_t peerInfo;
  memset(&peerInfo, 0, sizeof(esp_now_peer_info_t));
  memcpy(peerInfo.peer_addr, receiverMacAddress, 6);
  peerInfo.channel = 0;  
  peerInfo.encrypt = false;
  
  // Add peer        
  if (esp_now_add_peer(&peerInfo) != ESP_OK)
  {
    Serial.println("Failed to add peer");
    return;
  }else{
    Serial.println("Succes: Added peer");
  } 
}
/*
 *****************************************************
 *    REPETICIÓN
 *****************************************************
*/
void loop() {
if(!digitalRead(b_yellow)){
    dataSend.data_servo = 90;
    esp_now_send(receiverMacAddress, (uint8_t *) &dataSend, sizeof(dataSend));
    Serial.println("Rotate 90");
    delay(200);
  }
  if(!digitalRead(b_green)){
    dataSend.data_servo = 180;
    esp_now_send(receiverMacAddress, (uint8_t *) &dataSend, sizeof(dataSend));
    Serial.println("Rotate 180");
    delay(200);
  }
}
/*
 *****************************************************
 *    FUNCIONES
 *****************************************************
*/
//Callback for send data
void cb_Data_send(const uint8_t *mac_addr, esp_now_send_status_t status) {
  Serial.print("\r\nLast Packet Send Status:\t ");
  Serial.println(status);
  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Message sent" : "Message failed");
  //analogWrite(LED_onboard,);
}