Skip to main content
added 563 characters in body
Source Link
void setup(){
  attachInterrupt(digitalPinToInterrupt(3), floor1, CHANGE);
}
loop(){
  liftStops();
}
void liftStops(){
  if(qlift1[f1+1] != NULL){
    while(timer<100){
      distance = (speed*timer);
      motorClockwise();
      Serial.println(distance);
      if(qlift1[f1+1] == '1' && distance == 0){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '2' && distance == 30){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '3' && distance == 60){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '4' && distance == 90){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '5' && distance == 120){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '6' && distance == 150){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }
      timer = timer+0.167;
      delay(200);
    }
  }
}
void floor1(){
  keyboardValue = analogRead(keyboardPin);
  while(keyboardValue > 5) {  // Runs when a key is pressed
    for(int i=0;i<8;i++){
      if((treshold[i] - keyboardValue) == 0){
        Serial.println(keypad[i]); // Printing the key pressed
        enQueue(keypad[i]); // Storing the key pressed in the queue
        break;
      }
    break; 
    } // end of for
  keyboardValue = 0;
  break;   
  } // end of while
}
void setup(){
  attachInterrupt(digitalPinToInterrupt(3), floor1, CHANGE);
}
loop(){
  liftStops();
}
void liftStops(){
  if(qlift1[f1+1] != NULL){
    while(timer<100){
      distance = (speed*timer);
      motorClockwise();
      Serial.println(distance);
      if(qlift1[f1+1] == '1' && distance == 0){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '2' && distance == 30){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '3' && distance == 60){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '4' && distance == 90){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '5' && distance == 120){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '6' && distance == 150){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }
      timer = timer+0.167;
      delay(200);
    }
  }
}
void setup(){
  attachInterrupt(digitalPinToInterrupt(3), floor1, CHANGE);
}
loop(){
  liftStops();
}
void liftStops(){
  if(qlift1[f1+1] != NULL){
    while(timer<100){
      distance = (speed*timer);
      motorClockwise();
      Serial.println(distance);
      if(qlift1[f1+1] == '1' && distance == 0){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '2' && distance == 30){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '3' && distance == 60){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '4' && distance == 90){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '5' && distance == 120){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '6' && distance == 150){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }
      timer = timer+0.167;
      delay(200);
    }
  }
}
void floor1(){
  keyboardValue = analogRead(keyboardPin);
  while(keyboardValue > 5) {  // Runs when a key is pressed
    for(int i=0;i<8;i++){
      if((treshold[i] - keyboardValue) == 0){
        Serial.println(keypad[i]); // Printing the key pressed
        enQueue(keypad[i]); // Storing the key pressed in the queue
        break;
      }
    break; 
    } // end of for
  keyboardValue = 0;
  break;   
  } // end of while
}
Source Link

I have solved my problem using attachInterrupt() function.The loop() runs liftStops() continuously and if there is a keyPress, it is recorded by the interrupt.

void setup(){
  attachInterrupt(digitalPinToInterrupt(3), floor1, CHANGE);
}
loop(){
  liftStops();
}
void liftStops(){
  if(qlift1[f1+1] != NULL){
    while(timer<100){
      distance = (speed*timer);
      motorClockwise();
      Serial.println(distance);
      if(qlift1[f1+1] == '1' && distance == 0){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '2' && distance == 30){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '3' && distance == 60){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '4' && distance == 90){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '5' && distance == 120){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }else if(qlift1[f1+1] == '6' && distance == 150){
        motorStop();
        deQueue();
        delay(5000);
        return;
      }
      timer = timer+0.167;
      delay(200);
    }
  }
}

If any key is pressed during delay(5000) even that gets recorded.