見出し画像

VTX周波数毎に決められた色にする

ドローンレースにおいてVTXの周波数ごとにLEDの色が決められているのに、FCで設定できない場合、外付けのマイコンでRGB LEDをコントロールするのがいいかなと思い作成しました

使い方

ATTINY85のPIN5をGNDに落とすことで色と光り方を変更するようにしています

使うLEDはこちら

防水コートなしのタイプもありますが、衝突により壊れやすいので、防水コート付きがいいと思います

使うマイコンはATtiny85 SOPパッケージ

配線

LEDの出口側の5 vとGNDをバッテリーに接続する
USBコネクターの金属の部分が接触させやすいと思います

コード

LEDの数は80にしています
8種類のモードでPIN5をGNDと接触することで
G点灯→R点灯→B点灯→W点灯→G点滅→R点滅→B点滅→W点滅
とトグルします

// Pin assign
// arduino PIN 0,button = Attiny PIN 5
// arduino PIN 4,RGB LED = ATTiny PIN 3

#include <EEPROM.h>
#include <FastLED.h>

//LEDの数
#define NUM_LEDS 80
//LED信号ピン
#define DATA_PIN 3
//ボタンのピン
#define myButton 0

CRGB leds[NUM_LEDS];

int currentColor = 0;
int rgbR = 0;
int rgbG = 0;
int rgbB = 0;

void parade() {
  int time = millis() / 100;
  for (int i = 0; i < NUM_LEDS; i++) {
    if((time % 2) == 0){
      if((i % 2) == 0){
        leds[i].setRGB(rgbR, rgbG, rgbB);    
      }else{
        leds[i].setRGB(0,0,0);
      }
    }else{
      if((i % 2) == 0){
        leds[i].setRGB(0,0,0);    
      }else{
        leds[i].setRGB(rgbR, rgbG, rgbB);
      }
    }
  }
  FastLED.show();
}

void nomal() {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i].setRGB(rgbR, rgbG, rgbB);
  }
  FastLED.show();
}

void setup() {
  currentColor = EEPROM.read(0);
  pinMode(myButton, INPUT_PULLUP);  // button
  ///////LED
  FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering
  //FastLED.setBrightness(255);
  if (currentColor < 3) {
    nomal();
  } else {
    parade();
  }
}

void loop() {
  if (digitalRead(myButton) == LOW) {
    currentColor++;
    currentColor = (currentColor > 7) ? 0 : currentColor;
    EEPROM.write(0, currentColor);
    delay(500);
  }
  rgbR = 0;
  rgbG = 0;
  rgbB = 0;
  switch (currentColor) {
    case 0:
      rgbR = 255;
      break;
    case 1:
      rgbG = 255;
      break;
    case 2:
      rgbB = 255;
      break;
    case 3:
      rgbR = 255;
      rgbG = 255;
      rgbB = 255;
      break;
    case 4:
      rgbR = 255;
      break;
    case 5:
      rgbG = 255;
      break;
    case 6:
      rgbB = 255;
      break;
    case 7:
      rgbR = 255;
      rgbG = 255;
      rgbB = 255;
      break;
  }
  if (currentColor < 4) {
    nomal();
  } else {
    parade();
  }
}

書き込み

ATTINYはブートローダーを書き込むことにより、Arduinoとして使える様になります
SOPパッケージなのでDINに変換するアダプターを使います

ArduinoIDEで書き込む際には書き込み装置を経由する必要があります
こちらを参考にしてください

この記事が気に入ったらサポートをしてみませんか?