#define BLYNK_PRINT Serial

#define BLYNK_TEMPLATE_ID "TMPLvMa1trbJ"
#define BLYNK_DEVICE_NAME "TransparentHumanModel"
#define BLYNK_AUTH_TOKEN "wjQFEE9S600wMNf0A2SLidaIYMJmirB4"

#include <Servo.h>
#include <ESP8266WiFi.h> //https://www.instructables.com/Pet-Robot-Ball/
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include <BlynkSimpleEsp8266.h>

Servo neck;
Servo l_shoulder_fb;
Servo l_shoulder_lr;
Servo r_shoulder_fb;
Servo r_shoulder_lr;
Servo r_elbow; 

/*
Servo waist;
Servo l_hip;
Servo r_hip;
Servo l_knee;
Servo r_knee;*/

char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Rock";
char pass[] = "brandonisthebest";


void setup() {

  // put your setup code here, to run once
  Serial.begin(9600);
  
  Blynk.begin(auth, ssid, pass);
  
  neck.attach(D1, 544, 2400);
  l_shoulder_fb.attach(D2, 544, 2400);
  l_shoulder_lr.attach(D3, 544, 2400);
  r_shoulder_fb.attach(D4, 544, 2400);
  r_shoulder_lr.attach(D5, 544, 2400);

  l_knee.attach(D6, 544, 2400);
  r_knee.attach(D7, 544, 2400);
  
  /*
  l_elbow.write(0);
  r_elbow.attach(5);
  r_elbow.write(0);
  waist.attach(6);
  waist.write(0);
  l_hip.attach(7);
  l_hip.write(0);
  r_hip.attach(8);
  r_hip.write(0);
  l_knee.attach(9);
  l_knee.write(0);
  r_knee.attach(10);
  r_knee.write(0);*/
}

void loop() {
  Blynk.run();
  // put your main code here, to run repeatedly
  //neck.write(180)
  //delay(10000)
  //neck.write(0)
  //delay(1000);
}

BLYNK_WRITE(V0) 
{
  neck.write(param.asInt());
}

BLYNK_WRITE(V1) 
{
  l_shoulder_fb.write(param.asInt());
}

BLYNK_WRITE(V2)
{
  l_shoulder_lr.write(param.asInt());
}

BLYNK_WRITE(V3)
{
  //r_shoulder_fb.attach(D4, 544, 2400);
  //BLYNK_PRINT.print("Value: ");
  //BLYNK_PRINT.println(param.asInt());
  r_shoulder_fb.write(param.asInt());
  //delay(1000);
  //r_shoulder_fb.detach();
}

BLYNK_WRITE(V4)
{
  r_shoulder_lr.write(param.asInt());
}

BLYNK_WRITE(V5)
{
  l_knee.write(param.asInt());
}

BLYNK_WRITE(V6)
{
  r_knee.write(param.asInt());
}
