Не работает код лифта

mak
Offline
Зарегистрирован: 25.04.2018

Здоврово, я делаю макет лифта, но уменя проблемы с кодом на ардуино, посмотрите.Основная проблема: дверь открыватся но я незнаю как сдела чтобы она закрывалась, я уже все перепробывал. Мне очень срочно нужно. Заранее Спасибо.

  boolean sensor_floor1;
  boolean sensor_floor2;
  boolean sensor_floor3;
  
  boolean sensor_door1;
  boolean sensor_door2;
  
  boolean button1;
  boolean butt1;
  boolean button2;
  boolean butt2;
  boolean button3;
  boolean butt3;
 
boolean currentButton = 0;
boolean lastButton = 0;
 
boolean currentButton2 = 0;
boolean lastButton2 = 0;
 
boolean currentButton3 = 0;
boolean lastButton3 = 0;
 
  #define M1  9
  #define M_1 10
  #define M2  11
  #define M_2 12
 
void setup() {
 
 //////КНОПКИ ЭТАЖЕЙ//////
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(4,INPUT_PULLUP);
 
  /////ДАТЧИКИ ДВЕРЕЙ(ОТКРЫТО - ЗАКРЫТО)//////
  pinMode(7,INPUT_PULLUP);
  pinMode(8,INPUT_PULLUP);
 
  /////ДАТЧИКИ ЭТАЖЕЙ//////////
  pinMode(14,INPUT_PULLUP);
  pinMode(15,INPUT_PULLUP);
  pinMode(16,INPUT_PULLUP);
 
  /////ДВИГАТЕЛЬ ЛИФТА///////
  pinMode(5,OUTPUT);
  pinMode(M1, OUTPUT);
  pinMode(M_1, OUTPUT);
 
  /////ДВИГАТЕЛЬ ДВЕРЕЙ/////
  pinMode(6,OUTPUT);
  pinMode(M2, OUTPUT);
  pinMode(M_2, OUTPUT);
 
}
 
void Check(){
 /* 
  button1 = !digitalRead(2);
  button2 = !digitalRead(3);
  button3 = !digitalRead(4);
  */
  sensor_door1 = digitalRead(7);
  sensor_door2 = !digitalRead(8);
  
  sensor_floor1 = !digitalRead(14);
  sensor_floor2 = !digitalRead(15);
  sensor_floor3 = !digitalRead(16);
 
}
 
//////////ФУНКЦИЯ СТОП////////
void StopCabin(){
  digitalWrite(M1, LOW);
  digitalWrite(M_1, LOW);
}
//////////ФУНКЦИЯ ВВЕРХ///////
void UpCabin(){
  digitalWrite(M1, HIGH);
  digitalWrite(M_1, LOW);
}
//////////ФУНКЦИЯ ВНИЗ////////
void DownCabin(){
  digitalWrite(M1, LOW);
  digitalWrite(M_1, HIGH);
}
//////////ФУНКЦИЯ ДВЕРЬ ОТКРЫТА///////
void CloseDoor(){
  digitalWrite(M2, HIGH);
  digitalWrite(M_2, LOW);
}
///////////ФУНКЦИЯ ДВЕРЬ ЗАКРЫТА///////
void OpenDoor(){
  digitalWrite(M2, LOW);
  digitalWrite(M_2, HIGH);
}
///////////ФУНКЦИЯ ДВЕРЬ СТОИТ/////////
void StopDoor(){
  digitalWrite(M2, LOW);
  digitalWrite(M_2, LOW);
}
 
///////////////ДВЕТРЬ ОТКРЫТА////////////////
int OpenDoor1(){
  Check();
  if(sensor_door1 == 1 && sensor_door2 == 0){
    OpenDoor();
  }else if(sensor_door1==0 && sensor_door2 == 1){
    StopDoor();
    return 0;
  }
}
 
//////////////ДВЕРЬ ЗАКРЫТА///////////////
int CloseDoor1(){
    Check();
  if(sensor_door1 == 0 && sensor_door2 == 1){
    CloseDoor();
  }else if(sensor_door1==1 && sensor_door2 == 0){
    StopDoor();
    return 0;
  }
}
 
/////////////////////ПЕРВЫЙ ЭТАЖ/////////////////////
int OneFloor(){
  if(sensor_floor1 == 0 && sensor_floor2 == 1){
    DownCabin();
  }else if(sensor_floor1 == 1 && sensor_floor2 == 0){
    StopCabin();
    OpenDoor1();
  } 
  if(sensor_floor1 == 0 && sensor_floor3 == 1){
    DownCabin();
  }else if(sensor_floor1 == 1 && sensor_floor3 == 0){
    StopCabin();
    OpenDoor1();
  }
 return 0;
}
 
/////////////////////ВТОРОЙ ЭТАЖ////////////////////////
int TwoFloor(){
  if(sensor_floor1 == 1 && sensor_floor2 == 0){
    UpCabin();
  }else if(sensor_floor1 == 0 && sensor_floor2 == 1){
    StopCabin();
    OpenDoor1();
  }
  if(sensor_floor2 == 0 && sensor_floor3 == 1){
    DownCabin();
  }else if(sensor_floor2 == 1 && sensor_floor3 == 0){
    StopCabin();
    OpenDoor1();
  }
  return 0;
}
 
///////////////////ТРЕТИЙ ЭТАЖ//////////////////
int ThreeFloor(){
  if(sensor_floor1 == 1 && sensor_floor3 == 0){
    UpCabin();
  }else if(sensor_floor1 == 0 && sensor_floor3 == 1){
    StopCabin();
    OpenDoor1();
  }
  if(sensor_floor2 == 1 && sensor_floor3 == 0){
    UpCabin();
  }else if(sensor_floor2 == 0 && sensor_floor3 == 1){
    StopCabin();
    OpenDoor1();
  }
  return 0;
}
////////////////////////////////////
boolean debounce(boolean last){
 
  boolean current = !digitalRead(2);
  if (last != current ){
    delay(5);
    current = !digitalRead(2);
  }
  return current;
}
/////////////////////////////////////////
 boolean debounce2(boolean last){
 
  boolean current2 = !digitalRead(3);
  if (last != current2){
    delay(5);
    current2 = !digitalRead(3);
  }
  return current2;
 
}
////////////////////////////////////////////////
boolean debounce3(boolean last){
 
  boolean current3 = !digitalRead(4);
  if (last != current3){
    delay(5);
    current3 = !digitalRead(4);
  }
  return current3;
 
}
 
void loop() {
  Check();
  
/////////////////////ПЕРВЫЙ ЭТАЖ/////////////////////
 currentButton = debounce(lastButton);
   if (lastButton == LOW && currentButton == HIGH)
   {
      button1 = !button1;
     
   }else{
    if(button1 == 1){
    OneFloor();
    }
    }
   
/////////////////////ВТОРОЙ ЭТАЖ////////////////////////
currentButton2 = debounce2(lastButton2);
   if (lastButton2 == LOW && currentButton2 == HIGH)
   {
      button2 = !button2;
   }else{
    if(button2 == 1){
    TwoFloor();
   }
   }
///////////////////ТРЕТИЙ ЭТАЖ//////////////////
currentButton3 = debounce3(lastButton3);
   if (lastButton3 == LOW && currentButton3 == HIGH)
   {
      button3 = !button3;
   }else{
  if(button3 == 1){
    ThreeFloor();
}
   }
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, что ж за эпидемия такая? Ну, почему не почитать форум три минуты, чего ж сразу постить-то кидаться?

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

bwn
Offline
Зарегистрирован: 25.08.2014

Вот и очередной приступ студенческой лихорадки. Сдавать надо вчера, аж читать некогда как код вставляют.((((

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Перепробый еще почитать умные книшки.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

mak пишет:
незнаю как сдела чтобы она закрывалась

Доводчик поставь!

nik182
Offline
Зарегистрирован: 04.05.2015

Злые вы. Нет что б посоветовать вставить в loop п.п. CloseDoor. А то open есть , а close нет. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Точно. Регулярно CloseDoor-айте дверь и не надо loop-ать нам меня глазами.

nik182
Offline
Зарегистрирован: 04.05.2015

Я больше скажу. Запоминайте время когда Open случился и в loop через 30 секунд делайте Close. И двери всегда будут закрыты. И зайти успеете.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

И клозе поактивнее так, чтобы если зад ещё в проходе, так хорошенько по нему стукнуло!

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Чет мне хрустальный шар подсказывает , что скоро по новостям будут шуметь о лифте , не вышедшем на околоземную орбиту.