#include "Arduino.h"
#include "PCF8574.h"
#include <SPI.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "Auth token";
char ssid[] = "WiFiname";
char pass[] = "Password";

PCF8574 pcf8574(0x20);
char pins[]={P0,P1,P2,P3,P4,P5,P6,P7};
int d;
int m=0;
void setup()
{
  Wire.begin(2,0);
  Blynk.begin(auth, ssid, pass);  
  for(int i=0;i<8;i++)
  {
    pcf8574.pinMode(pins[i], OUTPUT);
  }

}

void loop()
{
  Blynk.run();
  if(m==1)
  pattern1();
  else if(m==2)
  pattern2();
  else if(m==3)
  pattern3();
  else if(m==4)
  pattern4();
}

BLYNK_WRITE(V0)
{
  int interval = param.asInt(); // assigning incoming value from pin V1 to a variable
  if (interval == 0)
  {
    d=100;
  }
  if (interval == 1)
  {
    d=70;
  }
  if (interval == 2)
  {
    d=50;
  }
  if (interval == 3)
  {
    d=40;
  }
  if (interval == 4)
  {
    d=20;
  }
  if (interval == 5)
  {
    d=10;
  }
}
BLYNK_WRITE(V1)
{
m=1;
}
BLYNK_WRITE(V2)
{
m=2;
}
BLYNK_WRITE(V3)
{
m=3;
}
BLYNK_WRITE(V4)
{
m=4;
}

void pattern1()
{
  for(int i=0;i<8;i++)
  {
  pcf8574.digitalWrite(pins[i], HIGH);
  delay(d);
  pcf8574.digitalWrite(pins[i], LOW);
  delay(d);
  }

  for(int i=7;i>=0;i--)
  {
  pcf8574.digitalWrite(pins[i], HIGH);
  delay(d);
  pcf8574.digitalWrite(pins[i], LOW);
  delay(d);
  }
}

void pattern2()
{
  for(int i=0;i<8;i++)
  {
  pcf8574.digitalWrite(pins[i], HIGH);
  delay(d);
  }
  delay(500);
  for(int i=0;i<8;i++)
  {
  pcf8574.digitalWrite(pins[i], LOW);
  delay(d);
  }
  for(int i=7;i>=0;i--)
  {
  pcf8574.digitalWrite(pins[i], HIGH);
  delay(d);
  }
  delay(500);
  for(int i=7;i>=0;i--)
  {
  pcf8574.digitalWrite(pins[i], LOW);
  delay(d);
  }
}

void pattern3()
{
for(int i=0;i<8;i++)
  {
  pcf8574.digitalWrite(pins[i], HIGH);
  pcf8574.digitalWrite(pins[8-i], HIGH);
  delay(d);
  }
  for(int i=7;i>=0;i--)
  {
  pcf8574.digitalWrite(pins[i], LOW);
  pcf8574.digitalWrite(pins[7-i], LOW);
  delay(d);
  }
}

void pattern4()
{
  for(int i=7;i>=0;i--)
  {
    for(int j=0;j<=i;j++)
    {
    pcf8574.digitalWrite(pins[j], HIGH);
    delay(d);
    pcf8574.digitalWrite(pins[j], LOW);
    delay(d);
    }
  pcf8574.digitalWrite(pins[i], HIGH);
  }
}
