arduino 2560电梯控制系统4层 可以随机改变状态 能识别在某一层

四层暂时没什么BUG:

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

int s = 37; //上升电机
int x = 39; //下降电机

int a4 = 22;
int a3 = 24; //按钮3楼
int a2 = 26;
int a1 = 28;


int ting = 6; //急停

int c4=42;
int c3_s = 44;
int c3_x = 46; //传感器3楼到位
int c2_s = 48;
int c2_x = 50;
int c1=52;

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

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

bool c4b = false;
bool c3b = false;
bool c3_sb = false;
bool c3_xb = false;
bool c2_sb = false;
bool c2_xb = false;
bool c2b = false;
bool c1b = false;

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

void setup() {
  Serial.begin(115200);
  pinMode(c4, INPUT_PULLUP);
   pinMode(c3_s, INPUT_PULLUP);
  pinMode(c3_x, 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(a4, 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.print(a3b);
   Serial.print("  4:");
  Serial.println(a4b);
    Serial.print("  1:");
  Serial.print(c1b);
     Serial.print("  2:");
  Serial.print(c2b);
     Serial.print("  3:");
  Serial.print(c3b);
     Serial.print("  4:");
  Serial.print(c4b);
  if (a1b == true&&c1b==false) //3楼和2楼  直接去1楼
  {
    if (c4b == true)
    {
       x_x();
     //4层就是3-4从层之间
     c3_4=true;
    }
    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|| c4b == 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();c1_2==true;
    }
    if (c3b == true || c2_3==true)
    {
      x_x();
      c2_3==true;
      }
    if (c4b == true || c3_4==true)
    {
      x_x();c3_4==true;
      ///>>>>>>>>>>>>
      }
      
  }
  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;
    }
      if(c4b == true)
    {
      x_x();
      c3_4=true;
    }
    else if (c1b == false || c2b == false|| c4b == false)
    {
      if (c3b == true)
      { dao3();
      }
      else if(c3b ==false)
            {x_s();
              }
      }
  }
  else if(a3b==true&&c3b==true) 
        dao3();
  //______________________________4
  if (a4b == true&&c4b==false) //  去4楼
  {
    if (c1b == true)
    {
      x_s();
      c1_2=true;
    }
    if(c2b == true)
    {
      x_s();
      c2_3=true;
    }
      if(c3b == true)
    {
      x_s();
      c3_4=true;
    }
    else if (c1b == false || c2b == false|| c3b == false)
    {
      if (c4b == true)
      { dao4();
      }
      else if(c4b ==false)
            {x_s();
              }
      }
  }
  else if(a4b==true&&c4b==true) 
        dao4();      
}

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

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

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

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

  }

}

//判断在那层
void pdc()
{
  if (digitalRead(c4) == LOW)
  {
    c4b = true;
    c2_3=false;
    c1_2=false;
    c3_4=false;
  }
  else c4b = false; 
  //___________________________3__
  if (digitalRead(c3_x) == LOW)
  {
    c3_xb = true;
  }
  else c3_xb=false;
  if (digitalRead(c3_s) == LOW)
  {
    c3_sb = true;
  }
  else c3_sb=false;
  if(c3_sb==true&&c3_xb==true)
    {c3b = true;
    c2_3=false;
    c1_2=false;
    c3_4=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;
    c3_4=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;
  a4b=false;
  x_xb=false;
  x_sb=false;
}

  

posted @ 2017-06-13 14:37  xiaohe520  阅读(3)  评论(1编辑  收藏  举报