const int relay[]={PB9,PB8,PB7,PB6,PB5,PB4};
  const int sensor[]={PA0,PA1,PA2,PA3,PA4,PA5,PC14,PC15};
  const int manual_push[]={PA6,PA7,PB0};
  int manual_value[3]={0};
  const int p[]={0,2,4};
  int timer=100;


  void set_peston(bool h,int p);
  int peston_state();
  void auto_r();
  int mode();


void setup() 
{
   Serial.begin(115200);



   for(int i=0 ;i<6;i++)
   {
     pinMode(relay[i],OUTPUT);
   }
   for(int i=0 ;i<8;i++)
   {
     pinMode(sensor[i],INPUT_PULLDOWN);
   }
   for (int i=0 ; i<3;i++)
   {
    pinMode(manual_push[i],INPUT);
   }
   pinMode(PC13,OUTPUT);
   pinMode(PB12 ,INPUT_PULLDOWN);//on_off
   pinMode(PB13 ,INPUT_PULLDOWN);   //mode1
   pinMode(PB14 ,INPUT_PULLDOWN);   //mode 2
   // intial state of pestons
   set_peston(0,p[1]);
   delay(timer);
   set_peston(0,p[2]);
   delay(timer);
   set_peston(0,p[3]);




}

void loop() 
{
  if(digitalRead(PB12)==1)
  {
    if(peston_state()==0)
    {
      switch(mode())
      {
        case 0:
        Serial.println("Mode Automatic");
        while((mode()==0)&&(digitalRead(PB12)==1))
        {
        auto_r();
        }
        break;
        case 1:
        
          Serial.println("Mode Manual");
          while((mode()==1)&&(digitalRead(PB12)==1))
        {
          for(int i=0;i<3;i++)
          {
            manual_value[i]=analogRead(manual_push[i]);
            if(manual_value[i]<=1024&&manual_value[i]>=980)
            {
              digitalWrite(relay[p[i]],HIGH);
              digitalWrite(relay[p[i]+1],LOW);
            }
            else if(manual_value[i]>=0&&manual_value[i]<=50)
            {
              digitalWrite(relay[p[i]],LOW);
              digitalWrite(relay[p[i]+1],HIGH);
            }
            else
            {
              digitalWrite(relay[p[i]],LOW);
              digitalWrite(relay[p[i]+1],LOW);
            }
          }
        }
        
        break;
        case 2:
        Serial.println("Mode null");
        while((mode()==2)&&(digitalRead(PB12)==1))
        {

        }
        break;
        default:
        Serial.println("Error!");
      }
    }

  }
  else
  {
   set_peston(0,p[2]);
   delay(timer);
   set_peston(0,p[1]);
   delay(timer);
   set_peston(0,p[3]);
   Serial.println("_________________________");
   Serial.println("  Good BY !");
   Serial.println("_________________________");   
   while(digitalRead(PB12)==0)
   {

   }
  }

}

void set_peston(bool h,int p)
 {
   if (h==1)
   {
    while(1)
    {
     if(digitalRead(sensor[p+1])==1)
     {
       digitalWrite(relay[p+1],LOW);
       digitalWrite(relay[p],LOW);
       break;
     }
     else
     {
       digitalWrite(relay[p+1],HIGH);
       digitalWrite(relay[p],LOW);
     }
    }
   }
   else
   {
    while(1)
    {
     if(digitalRead(sensor[p])==1)
     {
       digitalWrite(relay[p+1],LOW);
       digitalWrite(relay[p],LOW);
       break;
     }
     else
     {
      digitalWrite(relay[p],HIGH);
      digitalWrite(relay[p+1],LOW);
     }
    }
   }
 }

 int peston_state()
{
  if(digitalRead(sensor[6])==1)
  {
    //up
    return 0;
  }
  else if(digitalRead(sensor[7])==1)
  {
    //down
    return 1;
  }
  else 
  return 3;
}
void auto_r()
{
   set_peston(0,p[1]);
   set_peston(0,p[2]);
   set_peston(0,p[3]);
   delay(timer);

   set_peston(1,p[2]);
   delay(timer);   

   set_peston(1,p[3]);
   delay(timer);  

   set_peston(1,p[1]);
   delay(timer);

   set_peston(0,p[3]);
   delay(timer); 

 digitalWrite(PC13,HIGH);
 Serial.println("pres the peston");
 while(1)
 {
 if (peston_state()==1)
 {
   digitalWrite(PC13,LOW);
   Serial.println("peston presed");
   delay(timer); 
   set_peston(0,p[2]);
  break;  
 }
 }
  return;     
}

int mode()
{
  if ((digitalRead(PB13)==1)&&(digitalRead(PB14)==0))
  {
    //mode0 automatec
    return 0;
  }
  else if ((digitalRead(PB13)==0)&&(digitalRead(PB14)==1))
  {
    //mode1 manual
    return 1;
  }
  else if ((digitalRead(PB13)==0)&&(digitalRead(PB14)==0))
  {
    //mode2 null
    return 2;
  }
  else
  {
    //error
    return 3;
  }
}
stm32:B12
stm32:B13
stm32:B14
stm32:B15
stm32:A8
stm32:A9
stm32:A10
stm32:A11
stm32:A12
stm32:A15
stm32:B3
stm32:B4
stm32:B5
stm32:B6
stm32:B7
stm32:B8
stm32:B9
stm32:5V.1
stm32:GND.1
stm32:3V3.1
stm32:GND.2
stm32:GND.3
stm32:3V3.2
stm32:R
stm32:B11
stm32:B10
stm32:B1
stm32:B0
stm32:A7
stm32:A6
stm32:A5
stm32:A4
stm32:A3
stm32:A2
stm32:A1
stm32:A0
stm32:C15
stm32:C14
stm32:C13
stm32:VBAT
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
sw1:1
sw1:2
sw1:3
sw2:1
sw2:2
sw2:3
sw3:1
sw3:2
sw3:3
sw4:1
sw4:2
sw4:3
sw5:1
sw5:2
sw5:3
sw6:1
sw6:2
sw6:3
sw7:1
sw7:2
sw7:3
led7:A
led7:C
pot1:VCC
pot1:SIG
pot1:GND
pot2:VCC
pot2:SIG
pot2:GND
pot3:VCC
pot3:SIG
pot3:GND