|
#include
#ifdef __AVR__
#include // 16 MHzのAdafruit Trinketに必要です
#endif
ボタンに接続されたデジタル入出力ピン。これは<にて駆動されるでしょう。
プルアップ抵抗器なので、スイッチが一時的にピンをグランドに引っ張ります。
・ハイからロウに移行するときに、ボタンを押すロジックが実行されます。
#define BUTTON_PIN 2
#define PIXEL_PIN 6 // NeoPixelsに接続されたデジタルI
#define PIXEL_COUNT 81 // NeoPixelsの数
私たちのNeoPixelストリップオブジェクトを宣言しましょう:
Adafruit_NeoPixelストリップ(ピクセル数、ピクセルPIN、NEO_GRB + NEO_KHZ800);
// 引数1 = NeoPixelストリップのピクセル数
引数2 = Arduinoのピン番号(ほとんどが有効です)
引数3 = ピクセルタイプのフラグ。必要に応じて合算してください。
・NEO_KHZ800 800KHzビットストリーム(ほとんどのNeoPixel製品に搭載されているWS2812 LEDを使用)
// NEO_KHZ400 400 KHz (クラシック 'v1' (v2ではない) FLORAピクセル、WS2811ドライバー)
・NEO_GRBピクセルは、GRBビットストリームに配線されています(ほとんどのNeoPixel製品)。
・NEO_RGBピクセルは、RGBビットストリーム用に配線されています(v1 FLORAピクセル、v2ではない)。
・NEO_RGBWピクセルは、RGBWビットストリーム用に配線されています(NeoPixel RGBW製品)。
ピクセル数は81です。
ブール型の旧状態はHIGHです。
ブール型の oneTime = LOW;
インテントモード = 0; // 現在アクティブなアニメーションモード、0~9
モードの数 = 4; // x-1
旧モード = モード数 + 1;
長いボタンが押されたかどうかを示す変数 long button_pressed = 0;
ボールン型変数pressedの値はLOWです。
明るさの値は254です。
//明るさを管理する
ブール型のgetDarkはLOWに設定されています。
void setup() {
Serial.begin(9600);
ピンモード(BUTTON_PIN, INPUT_PULLUP);
ストリップ.begin(); // NeoPixelストリップオブジェクトを初期化する(必須)
ストリップ.setBrightness(明るさ);
strip.show(); // 全てのピクセルを「オフ」に初期化する。
』
void loop() {
// 現在のボタン状態を取得する。
ブール型の新しい状態 = digitalRead(BUTTON_PIN);
・状態がLOWからHIGHに変わったかどうかを確認する(ボタンを押す)。
もし((新しい状態がHIGHで、古い状態がLOWならば) {
・ボタンのデバウンスのための短い遅延。
delay(20);
・デバウンス後もボタンがまだ低いかどうかを確認する。
newState = digitalRead(BUTTON_PIN);
もし(newState == HIGH)ならば、// はい、まだHIGHです
長押しか短押しかを分析開始
ボタンが押されたかどうかを確認するには、millis()関数を使用します。
プレッシュされた = HIGH;
}
}
・もしそれが押されたら、分析してください。
もし(pressed == HIGH)ならば、
・システム時間を取得する
int time_system = millis();
・押された時間を計算する
プレッシュされた時間 = タイムシステム - ボタンがプレッシュされた時間
もし((新しい状態がLOWであり)、かつ(押し続けた時間が1000秒以下である)ならば、
++)モード;
もし(mode > numOfMode)ならば、
モード = 0; // 次のモードに進み、#8の後でループを終了する。
}
・ランプがオフの場合、次のタップで再びアクティブになります
もし(明るさ == 0)ならば、
モード = 0;
明るさ = 254;
ストリップ.setBrightness(明るさ);
ストリップ.show();
}
PRESS ANALYSEを無効にする
プレッシュされた = ロウ;
そうでない場合、つまり(新しい状態がHIGHで、かつpressed_timeが1000秒以上で、かつbrightnessが0より大きい場合)には、
・暗くするか、明るくするか
もし(getDark == HIGH)ならば、
明るさ = strip.getBrightness();
もし明るさが254より小さいなら、
明るさ = 明るさ + 1;
もし(明るさが254より大きければ)
明るさ = 254;
}
ストリップ.setBrightness(明るさ);
ストリップ.show();
}
そうでない場合は、
明るさ = strip.getBrightness();
もし(明るさ > 0)ならば、
明るさ = 明るさ - 1;
もし明るさが0未満ならば、
明るさ = 0;
}
もし(明るさ == 0)ならば、
・ストリップはオフです
モード = -1;
プレッシュされた = ロウ;
}
ストリップ.setBrightness(明るさ);
ストリップ.show();
}
}
そうでない場合、つまり(新しい状態がLOWであり、かつpressed_timeが1000より大きく、かつbrightnessが0より大きい場合)には、
・暗くなった後、または照明スイッチをオンにした後の状態を管理する。
getDark = !getDark;
PRESS ANALYSEを無効にする
プレッシュされた = ロウ;
}
}
シリアル.println(mode);
もし(旧モード ≠ モード)ならば、
oneTime = HIGH;
そうでない場合は、
ワンタイム = 低;
}
もし(mode == 4)ならば、
レインボー(2, oneTime);
}
もし(mode == 3)ならば、
colorWipe(strip.Color( 0, 255, 0), 10, oneTime);
}
もし(mode == 2)ならば、
colorWipe(strip.Color( 255, 0, 255), 10, oneTime);
}
もし(mode == 1)ならば、
colorWipe(strip.Color( 0, 255, 255), 10, oneTime);
}
もし(mode == 0)ならば、
colorWipe(strip.Color( 255, 255, 255), 10, oneTime);
}
もし(mode == -1)ならば、
colorWipe(strip.Color( 0, 0, 0), 10, oneTime);
}
・最後に読んだボタンの状態を古い状態に戻します。
旧状態 = 新状態;
旧モード = モード;
遅延(5);
』
Stripのピクセルを1つずつ色で塗ります。Stripはクリアされません。
まず、そこにあるものはすべてピクセルごとにカバーされます。色を渡してください。
// (単一の「パックされた」32ビット値として。これは、呼び出すことで取得できます)
// 上記のloop()関数で示されているように、strip.Color(赤、緑、青)
そして、ピクセル間の遅延時間(ミリ秒単位)。
整数 i = 0;
void colorWipe(uint32_t color, int wait, boolean oneTime) {
もし(oneTime == HIGH)ならば、
i = 0;
}
もし(i < numPixels)ならば、
もう1ピクセル追加してください。
strip.setPixelColor(i, color); // (RAM内の)ピクセルの色を設定する
strip.show(); // ストリップを更新して一致にする
++i;
delay(wait); // 少し待つ
}
』
長い最初のピクセルヒュー = 0;
全てのストリップに沿って虹のサイクルを実行します。フレーム間の遅延時間(ミリ秒)を渡します。
void rainbow(int wait, boolean oneTime) {
もし(oneTime == HIGH)ならば、
最初のピクセルヒュー = 0;
i = 0;
}
もし(firstPixelHue < 3 * 65536)ならば、
もし(i < numPixels)ならば、
ピクセルの色相をある量だけオフセットして、1回の完全な回転を実現します。
・ストリップの長さに沿ったカラーホイール(65536の範囲)
// (strip.numPixels() ステップ):
ピクセルの色相は次のように計算されます。int pixelHue = firstPixelHue + (i * 65536L / 500);
・strip.ColorHSV() は 1 つまたは 3 つの引数を受け取ることができます。色相 (0 から 65535 まで) または
・任意で、彩度と明度(輝度)を追加してください(それぞれ0~255)。
ここでは、単一引数の色相変種だけを使用しています。結果は
// より「真実な」色を提供するために、strip.gamma32()を経由して渡されます。
各ピクセルに割り当てる前に:
ストリップ.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
++i;
そうでない場合は、
i = 0;
}
firstPixelHue += 256;
strip.show(); // 新しいコンテンツでストリップを更新する
delay(wait); // 少し待つ
そうでない場合は、
最初のピクセルヒュー = 0;
}
』
|