void flickerDim(uint16_t position) {
  if(chanceOneIn(50)){
    setLedColor(position, brighten8(getLedColor(position), 1));
  } else {
    setLedColor(position, dim256(getLedColor(position), 4));
  }
}
bool checkForCollision(uint16_t position) {
  if(getLedColor(position) == RED && getLedColor(position+1) != BLACK) {
    return true;
  } else if(getLedColor(position) == BLUE && getLedColor(position-1) != BLACK) {
    return true;
  } else {
    return false;
  }
}
uint16_t twinkleTwinkle(uint16_t tick, uint32_t color, uint8_t cycles) {
  for (uint16_t i=0; i<NUM_LEDS; i++) {
    if(getLedColor(i) > BLACK) {
      setLedColor(i, dim256(getLedColor(i), map(cycles, NUM_CYCLES, 0, 10, 100)));
    } else if (chanceOneIn(map(cycles, NUM_CYCLES, 0, 500, 10))) {
      setLedColor(i, getRandomColor());
    }
  }

  return 1;
}
void moveAllPixelsBackward(uint32_t color) {
  for (int i = 0; i < NUM_LEDS; i++) {
    if (getLedColor(i) == color) {
      movePixel(i, -1);
    }
  }
}
void moveAllPixelsForward(uint32_t color) {
  for (int i = NUM_LEDS-1; i >= 0; i--) {
    if (getLedColor(i) == color) {
      movePixel(i, 1);
    }
  }
}
uint16_t competitivePixels(uint16_t tick, uint32_t color) {
  uint8_t speed;

  for (uint16_t i=0; i<NUM_LEDS; i++) {
    if(getLedColor(i) > BLACK) {
      speed = getLedColor(i) % 5;
      setLedColor(i + speed, getLedColor(i));
      setLedColor(i, BLACK);
      i = i + speed;
    } else if(i == 0 && chanceOneIn(100)) {
      setLedColor(i, getRandomColor());
    }
  }

  return 1;
}
void movePixel(int position, int moveBy) {
  int targetPosition = position + moveBy;

  if(targetPosition >= 0 && targetPosition < NUM_LEDS) {
    setLedColor(targetPosition, getLedColor(position));
  }

  setLedColor(position, BLACK);
}
示例#8
0
文件: osd.c 项目: mmiers/betaflight
void osdOpenMenu(void)
{
    if (inMenu)
        return;

    if (feature(FEATURE_LED_STRIP))
        featureLedstrip = 1;

    if (feature(FEATURE_BLACKBOX))
        featureBlackbox = 1;

#if defined(VTX) || defined(USE_RTC6705)
    if (feature(FEATURE_VTX))
        featureVtx = 1;
#endif // VTX || USE_RTC6705

#ifdef VTX
    vtxBand = masterConfig.vtxBand;
    vtxChannel = masterConfig.vtx_channel + 1;
#endif // VTX

#ifdef USE_RTC6705
    vtxBand = masterConfig.vtx_channel / 8;
    vtxChannel = masterConfig.vtx_channel % 8 + 1;
#endif // USE_RTC6705

    osdRows = max7456GetRowsCount();
    inMenu = true;
    refreshTimeout = 0;
    max7456ClearScreen();
    currentMenu = &menuMain[0];
    osdResetAlarms();
    osdChangeScreen(currentMenu);
#ifdef LED_STRIP
    getLedColor();
#endif // LED_STRIP
}
uint16_t tinyExplosions(uint16_t tick, uint32_t color) {

  for (uint16_t i=0; i<NUM_LEDS; i++) {
    if (isDimmedMagenta(getLedColor(i))) {
      flickerDim(i);
    }
  }

  drawAllCollisions();
  moveAllPixelsForward(RED);
  drawAllCollisions();
  moveAllPixelsBackward(BLUE);

  // put in new pixels at the end of the strip
  if(chanceOneIn(300)) {
    setLedColor(0, RED);
  }

  if(chanceOneIn(300)) {
    setLedColor(NUM_LEDS-1, BLUE);
  }

  return 1;
}