* OSC20240310の追加情報のページ
-(by [[K]], 2024.03.30)

--親ページ → https://khfdpl.osask.jp/wiki/?OSC20240310

** (1) Arduino側のスケッチのソースコード
 #include <Adafruit_NeoPixel.h>
 #ifdef __AVR__
   #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
 #endif
 
 #define Pin        6
 #define NumPixels  28+64 // 7*4+(*8
 #define NumPixels  28+64 // 7*4+8*8
 
 Adafruit_NeoPixel pixels(NumPixels, Pin, NEO_GRB + NEO_KHZ800);
 
 void setup() {
   Serial.begin(115200);
   pixels.begin();
 }
 
 void loop() {
   for (;;) {
     int c = Serial.read();
     if (c < 0)     { delay(3);       continue; }
     if (c == 0xf1) { pixels.clear(); continue; }
     if (c == 0xf2) { pixels.show();  continue; }
     if (c == 0xf3) {
       while (Serial.available() < 3) {}
       int i = Serial.read() << 8; i |= Serial.read(); // big endian.
       int n = Serial.read();
       while (n > 0) {
         while (Serial.available() < 3) {}
         int r = Serial.read();
         int g = Serial.read();
         int b = Serial.read();
         pixels.setPixelColor(i, pixels.Color(r, g, b));
         i++; n--;
       }
     }
   }
 }

** (2) easy-C上で動いていたLED制御アプリのソースコード

 static char *mstr[3] = { "OFF  " , "ON   ", "NIGHT" };
 static int tc[8] = { 0x000000, 0x000001, 0x000100, 0x000101, 0x010000, 0x010001, 0x010100, 0x010101 };
 static AInt32 an[7] = { 0, 0, 0, 0, 0, 0, 0x100400 }; // RGB x7
 AInt32 at[64];
 int i, j, max = 0x33, col[4], mod[4], pr = ' ';
 AWin *w = aOpenWin(256, 128, "OSC");
 AArduino ard[1]; AArduino_initPort(ard, 4);
 for (i = 0; i < 4; i++) { col[i] = max * 0x10101; mod[i] = 0; }
 for (;;) {
     for (i = 0; i < 4; i++) {
         aGrPrintf(w, 0, i * 16, 0xffffff, 0x000000, "%d: #%06x %s", i + 1, col[i], mstr[mod[i]]);
     }
     aGrPrintf(w, 0, 5 * 16, 0xffffff, 0x000000, "[%c] (NCRWMT)  max=0x%02x", pr, max);
     aWait(100);
     i = aInkey(w, 1);
     if ('a' <= i && i <= 'z') { i = i - ('a' - 'A'); }
     if (i == AWinKey_Esc || AWin_isClose(w)) break;
     if (i == 'N' || i == 'C'  || i == 'R' || i == 'W' || i == ' ') { pr = i; }
     if ('1' <= i && i <= '4') {
         i = i - '1';
         if (pr == 'C') { // カラー指定コマンド.
             printf("color[#%d]=", i + 1);
             scanf("%i", &j); col[i] = j;
             pr = ' '; mod[i] = 0;
         }
         if (pr == 'R') { // ルーレットコマンド.
             for (j = 0; j < 50; j++) {
                 AArduino_ledSet2(ard, i * 7, 7, tc[(j % 7) + 1] * max);
                 aWait(100);
             }
             col[i] = tc[aRnd(7) + 1] * max;
             pr = ' '; mod[i] = 0;
         }
         if (pr == 'W') { // 白色コマンド.
             col[i] = 0x010101 * max;
             pr = ' '; mod[i] = 0;
         }
         if (pr == ' ') { // プリフィクスなし、照明のON/OFF.
             if (mod[i] == 1) { mod[i] = 0; } else { mod[i] = 1; }
             AArduino_ledSet2(ard, i * 7, 7, col[i] * mod[i]);
         }
         if (pr == 'N') { // 常夜灯コマンド.
             AArduino_ledSet3(ard, i * 7, 7, an);
             mod[i] = 2; pr = ' ';
         }
     }
     if (i == 'M') { // 最大輝度設定コマンド.
         j = max;
         printf("max=");
         scanf("%i", &max);
         max = aSaturateInt(max, 1, 255);
         for (i = 0; i < 4; i++) {
             int r = ((col[i] >> 16) & 255) * max / j; if (r > max) { r = max; }
             int g = ((col[i] >>  8) & 255) * max / j; if (g > max) { g = max; }
             int b = ( col[i]        & 255) * max / j; if (b > max) { b = max; }
             col[i] = aRgb8(r, g, b);
             if (mod[i] == 1) {
                 AArduino_ledSet2(ard, i * 7, 7, col[i]);
             }
         }
         pr = ' ';
     }
     if (i == 'T') { // マトリクスのテストパターン表示コマンド.
         for (j = 0; j < 50; j++) {
             for (i = 0; i < 64; i++) {
                 at[i] = tc[(i + j) & 7] * max;
             }
             AArduino_ledSet3(ard, 28, 64, at);
             aWait(100);
         }
         AArduino_ledSet2(ard, 28, 64, 0x000000);
         pr = ' ';
     }
 }

** (3) 配線のための資料
-配線の際に参考にしたページ: https://kats-eye.net/info/2018/11/07/neopixel/

* こめんと欄
-掲示板をご利用ください。→[[a23_bbs]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS