VTX周波数毎に決められた色にする
ドローンレースにおいてVTXの周波数ごとにLEDの色が決められているのに、FCで設定できない場合、外付けのマイコンでRGB LEDをコントロールするのがいいかなと思い作成しました
使い方
ATTINY85のPIN5をGNDに落とすことで色と光り方を変更するようにしています
使うLEDはこちら
防水コートなしのタイプもありますが、衝突により壊れやすいので、防水コート付きがいいと思います
使うマイコンはATtiny85 SOPパッケージ
配線
コード
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で書き込む際には書き込み装置を経由する必要があります
こちらを参考にしてください