arduino 电梯控制系统3层 双传感器 可以随机改变状态 能识别在某一层

代码

//三层楼电梯代码2017-6-13-8:8  双传感 已正常运行“可在运行是随机改变楼层”

int s = 13; //上升电机
int x = 12; //下降电机

int a3 = 10; //按钮3楼
int a2 = 9;
int a1 = 8;


int ting = 6; //急停

int c3 = 4; //传感器3楼到位
int c2_s = 3;
int c2_x = 2;
int c1=5;

bool c1_2=false;//1-2层
bool c2_3=false;//2-3层

bool x_sb=false;
bool x_xb=false;//向下标志位

bool c3b = false;
bool c2_sb = false;
bool c2_xb = false;
bool c2b = false;
bool c1b = false;

bool a3b = false;
bool a2b = false;
bool a1b = false;

void setup() {
  Serial.begin(115200);
  pinMode(c3, INPUT_PULLUP);
  pinMode(c2_s, INPUT_PULLUP);
  pinMode(c2_x, INPUT_PULLUP);
  pinMode(c1, INPUT_PULLUP);
  
  pinMode(a1, INPUT_PULLUP);
  pinMode(a2, INPUT_PULLUP);
  pinMode(a3, INPUT_PULLUP);
  pinMode(ting, INPUT_PULLUP);
  pinMode(x, OUTPUT);
  pinMode(s, OUTPUT);
  digitalWrite(s, HIGH);
  digitalWrite(x, HIGH);
}

void loop() 
{
  pda();
  pdc();
  Serial.print("  1:");
  Serial.print(a1b);
  Serial.print("  2:");
  Serial.print(a2b);
  Serial.print("  3:");
  Serial.println(a3b);
  if (a1b == true&&c1b==false) //3楼和2楼  直接去1楼
  {
    if (c3b == true)
    {
       x_x();
     //没到2层就是2-3从层之间
     c2_3=true;
    }
     if (c2b == true)
    {
       x_x();
     //2层就是1-2从层之间
     c1_2=true;
    }
    else if (c3b == false || c2b == false)
    {
      if (c1b == true)
      { dao1();
      }
      else if(c1b ==false)
            {x_x();
              }
      }
      
  }
  else if(a1b==true&&c1b==true) 
        dao1();
 //_______________________________
 if (a2b == true&&c2b==false) //  去2楼
  {
    if (c1b == true || c1_2==true)
    {
      x_s();
    }
    if (c3b == true || c2_3==true)
    {
      x_x();
      
      }
  }
  else if(a2b==true&&c2b==true) 
        dao2();       
//______________________________________
if (a3b == true&&c3b==false) //  去3楼
  {
    if (c1b == true)
    {
      x_s();
      c1_2=true;
    }
    if(c2b == true)
    {
      x_s();
      c2_3=true;
    }
    else if (c1b == false || c2b == false)
    {
      if (c3b == true)
      { dao3();
      }
      else if(c3b ==false)
            {x_s();
              }
      }
  }
  else if(a3b==true&&c3b==true) 
        dao3();
        
}

void dao1(){tingzhi();a1b=false;}
void dao2(){tingzhi();a2b=false;}
void dao3(){tingzhi();a3b=false;}

//判断按键是否按下
void pda()
{
  if(digitalRead(ting) == LOW)
  tingzhi();

  if (digitalRead(a3) == LOW&&digitalRead(a2) != LOW&&digitalRead(a1) != LOW)
  {//防止多个按键按下
       tingzhi();
       a3b = true;a2b=false;a1b=false;
  }

  if (digitalRead(a2) == LOW&&digitalRead(a3) != LOW&&digitalRead(a1) != LOW)
  {//防止多个按键按下
    tingzhi();
      a2b = true;a1b=false;a3b=false;
  
  }
  //---------------------------
    if (digitalRead(a1) == LOW&&digitalRead(a2) != LOW&&digitalRead(a3) != LOW)
  {//防止多个按键按下
    Serial.println("a1anxia");
      tingzhi();
      Serial.println("a1WEIZHEN");
       a1b = true;a2b=false;a3b=false;

  }

}

//判断在那层
void pdc()
{
  if (digitalRead(c3) == LOW)
  {
    c3b = true;
    c2_3=false;
    c1_2=false;
  }
  else c3b = false;
//________________2
  if (digitalRead(c2_x) == LOW)
  {
   c2_xb=true;
  }
  else c2_xb=false;
  if(digitalRead(c2_s) == LOW)
  {
   c2_sb=true;
  }
  else c2_sb=false;
  if(c2_sb==true&&c2_xb==true)
    {c2b = true;
    c2_3=false;
    c1_2=false;
    }
  else c2b = false;
 //________________2 
  if (digitalRead(c1) == LOW)
  {
    c1b = true;
    c2_3=false;
    c1_2=false;
  }
  else c1b = false;

}

//电机相上下运动停止
void x_s() {
  if(x_xb==false){
  digitalWrite(s, LOW);x_sb=true;
  }
  
}
void x_x() {
  if(x_sb==false){

  digitalWrite(x, LOW);x_xb=true;
  }
}
void t_s() {
  digitalWrite(s, HIGH);
}
void t_x() {
  digitalWrite(x, HIGH);
}
void tingzhi() {
  digitalWrite(x, HIGH);
  digitalWrite(s, HIGH);
  a1b=false;
  a2b=false;
  a3b=false;
  x_xb=false;
  x_sb=false;
}

  

posted @ 2017-06-13 08:13  xiaohe520  阅读(83)  评论(0)    收藏  举报