四层电梯 加入查看是否死机 到最顶或最下面不会在向上或向下
代码如下
//三层楼电梯代码2017-6-13-8:8 双传感 已正常运行“可在运行是随机改变楼层” unsigned int t_t=0; int l1=13;//闪烁的灯的脚 ,看是否有死机 int s = 12; //上升电机 int x = 11; //下降电机 int ting = 24; //急停 int a4 = 26; int a3 = 28; //按钮3楼 int a2 = 30; int a1 = 32; int c4=52; int c3_s = 50; int c3_x = 46; //传感器3楼到位 int c2_s = 48; int c2_x = 44; int c1=42; 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; bool l1b = false; void setup() { Serial.begin(115200); Serial.println("QQ496631085 TEL:17051329108"); Serial.println("4ceng dianti 2017-6-22"); 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); pinMode(l1, OUTPUT); digitalWrite(s, HIGH); digitalWrite(x, HIGH); } void loop() { if(t_t!=millis()/1000) {t_t=millis()/1000; l1b=~l1b; if(l1b==true) {digitalWrite(l1,LOW); } else digitalWrite(l1,HIGH); } pda(); pdc(); Serial.print(" an1:"); Serial.print(a1b); Serial.print(" 2:"); Serial.print(a2b); Serial.print(" 3:"); Serial.print(a3b); Serial.print(" 4:"); Serial.println(a4b); Serial.print(" ceng1:"); Serial.print(c1b); Serial.print(" c1_2:"); Serial.print(c1_2); Serial.print(" 2:"); Serial.print(c2b); Serial.print(" c2_3:"); Serial.print(c2_3); Serial.print(" 3:"); Serial.print(c3b); Serial.print(" c3_4:"); Serial.print(c3_4); Serial.print(" 4:"); Serial.print(c4b); Serial.print(" x_sb:"); Serial.print(x_sb); Serial.print(" x_xb:"); Serial.print(x_xb); if (digitalRead(a1)==LOW&&c1b==false) //3楼和2楼 直接去1楼 { if (c4b == true) { x_x("A1-4"); Serial.print("111114444"); //4层就是3-4从层之间 c3_4=true; } if (c3_4==true)x_x("A1-3-4"); if (c3b == true) { x_x("A1 3"); //没到2层就是2-3从层之间 c2_3=true; } if(c2_3==true)x_x("A1 2-3"); if (c2b == true) { x_x("A1-C2"); //2层就是1-2从层之间 c1_2=true; } else if (c3b == false || c2b == false|| c4b == false) { if (c1b == true) { dao1(); } else if(c1b ==false) {x_x("A1-"); } } } else if(a1b==true&&c1b==true) dao1(); //_______________________________ if (digitalRead(a2)==LOW&&c2b==false) // 去2楼 { if (c1b == true) { x_s("A2-C1");c1_2=true; Serial.println("c1_2 c1_2 c1_2"); } if (c1_2==true) x_s("A2 C1-2"); if (c3b == true || c2_3==true) { x_x("A2-C2-3"); c2_3=true; } if (c4b == true || c3_4==true) { x_x("A2-C4-C3-4");c3_4=true; ///>>>>>>>>>>>> } } else if(a2b==true&&c2b==true) dao2(); //______________________________________ if (a3b==true&&c3b==false) // 去3楼 { if (c1b == true) { x_s("c1"); c1_2=true; } if(c1_2 ==true )x_s("c1-2"); if(c2b == true) { x_s("c2-3"); c2_3=true; } if(c2_3 ==true )x_s("c2_3"); if(c3_4 ==true )x_x("cx_4"); if(c4b == true) { x_x("c4");delay(1000); c3_4=true; } else if (c1b == false || c2b == false|| c4b == false) { if (c3b == true) { dao3(); } else if(c3b ==false) {x_s("A3-C3"); } } } else if(c3b==true&&a3b==true) dao3(); //______________________________4 if (digitalRead(a4)==LOW&&c4b==false) // 去4楼 { //Serial.println("anjianpanduanzhixing....."); if (c1b == true) { x_s("A4-1"); c1_2=true; } if(c2b == true) { x_s("A4-2"); c2_3=true; } if(c3b == true) { x_s("A4-3"); c3_4=true; } else if (c1b == false || c2b == false|| c3b == false) { if (c4b == true) { dao4(); } else if(c4b ==false) {x_s("A4- else"); } } } else if(c4b==true&&a4b==true) dao4(); } void dao1(){tingzhi("DAO1");a1b=false;} void dao2(){tingzhi("DAO2");a2b=false;} void dao3(){tingzhi("DAO3");a3b=false;} void dao4(){tingzhi("DAO4");a4b=false;} //判断按键是否按下 void pda() { if(digitalRead(ting) == LOW) tingzhi("JingJI"); if (digitalRead(a4) == LOW&&digitalRead(a2) != LOW&&digitalRead(a1) != LOW&&digitalRead(a3) != LOW) {//防止多个按键按下 a4b = true;a3b=false;a2b=false;a1b=false; } if (digitalRead(a3) == LOW&&digitalRead(a2) != LOW&&digitalRead(a1) != LOW&&digitalRead(a4) != LOW) {//防止多个按键按下 a3b = true;a4b=false;a2b=false;a1b=false; } if (digitalRead(a2) == LOW&&digitalRead(a3) != LOW&&digitalRead(a1) != LOW&&digitalRead(a4) != LOW) {//防止多个按键按下 a2b = true;a1b=false;a3b=false;a4b=false; } //--------------------------- if (digitalRead(a1) == LOW&&digitalRead(a2) != LOW&&digitalRead(a3) != LOW&&digitalRead(a4) != LOW) {//防止多个按键按下 Serial.println("a1anxia"); 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; digitalWrite(s, HIGH); //停止向上 } 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; digitalWrite(x, HIGH);//停止往下 } else c1b = false; } //电机相上下运动停止 void x_s(String val) { Serial.print(val); if(x_xb==false){ digitalWrite(s, LOW);x_sb=true; } } void x_x(String val) { Serial.print(val); if(x_sb==false){ digitalWrite(x, LOW);x_xb=true; } } void t_s() { digitalWrite(s, HIGH); } void t_x() { digitalWrite(x, HIGH); } void tingzhi(String val) { Serial.print(val); digitalWrite(x, HIGH); digitalWrite(s, HIGH); a1b=false; a2b=false; a3b=false; a4b=false; x_xb=false; x_sb=false; Serial.print("------------------------------"); }