Neopixel: Sketch wont work - Problem with delay?

Hey guys,

in the following sketch seems to be a problem and I have no clue why!

With colorWipe everything works well and the whole sketch runs through, everything as it should be.

Changing colorWipe to colorWipeUP and colorWipeUP runs for one time and then nothing is happening. The LED-Strip stays on with red.

colorWipe und colorWipeUP only differentiate in it counting.

So where is the problem? Any help will be very appreciated!

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel strip = Adafruit_NeoPixel(150, 8, NEO_GRB + NEO_KHZ800);

int calibrationTime = 10;         

long unsigned int lowIn;         
long unsigned int pause = 5000;  

boolean lockLow = true;
boolean takeLowTime;  

int pirPin = 7;
int ledPin = 8; 

void setup(){
  strip.begin();
  strip.show();
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(pirPin, LOW);
  
  for(int i = 0; i < calibrationTime; i++){
    delay(1000);
  }
}

void loop() {
  if(digitalRead(pirPin) == HIGH){
    digitalWrite(ledPin, HIGH);
    colorWipe(strip.Color(255, 0, 0), 50);
    rainbowCycle(20);
    delay(100);
    
  if(lockLow){
    lockLow = false;
    }
    takeLowTime = true;
  }

  if(digitalRead(pirPin) == LOW){
    digitalWrite(ledPin, LOW);
    
  if(takeLowTime){
    colorWipe(strip.Color(0, 0, 0), 20);
    lowIn = millis();
    takeLowTime = false;
  }
        
       if(!lockLow && millis() - lowIn > pause){
           lockLow = true;                        
           }
       }
  }

void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}   

void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void colorWipeUP(uint32_t c, uint8_t wait) {
  for(uint16_t i=strip.numPixels()-1; i >= 0; i--) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

A unit16_t variable is an unsigned interger, therefore it is always going to be greater than or equal to 0. That for loop never ends.