* 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]]