Не работает код лифта
- Войдите на сайт для отправки комментариев
Ср, 25/04/2018 - 15:16
Здоврово, я делаю макет лифта, но уменя проблемы с кодом на ардуино, посмотрите.Основная проблема: дверь открыватся но я незнаю как сдела чтобы она закрывалась, я уже все перепробывал. Мне очень срочно нужно. Заранее Спасибо.
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();
}
}
}
Да, что ж за эпидемия такая? Ну, почему не почитать форум три минуты, чего ж сразу постить-то кидаться?
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Вот и очередной приступ студенческой лихорадки. Сдавать надо вчера, аж читать некогда как код вставляют.((((
Перепробый еще почитать умные книшки.
Доводчик поставь!
Злые вы. Нет что б посоветовать вставить в loop п.п. CloseDoor. А то open есть , а close нет.
Точно. Регулярно CloseDoor-айте дверь и не надо loop-ать нам меня глазами.
Я больше скажу. Запоминайте время когда Open случился и в loop через 30 секунд делайте Close. И двери всегда будут закрыты. И зайти успеете.
И клозе поактивнее так, чтобы если зад ещё в проходе, так хорошенько по нему стукнуло!
Чет мне хрустальный шар подсказывает , что скоро по новостям будут шуметь о лифте , не вышедшем на околоземную орбиту.