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