#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define Pin 6
#define NumPixels 7
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--;
}
}
}
}#include <stdio.h>
#include <tchar.h>
#include <windows.h>
int main()
{
HANDLE comPort = CreateFile(_T("COM3"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
// シリアルポートを開き、ハンドルを取得(※10番以上のCOMポート名は _T("\\\\.\\COM10") としないと認識してくれない)
DCB dcb; // シリアルポートの構成情報が入る構造体
GetCommState(comPort, &dcb); // 現在の設定値を読み込み
dcb.BaudRate = 115200; // 速度
dcb.ByteSize = 8; // データ長
dcb.Parity = NOPARITY; // パリティ
dcb.StopBits = ONESTOPBIT; // ストップビット長
dcb.fOutxCtsFlow = FALSE; // 送信時CTSフロー
dcb.fRtsControl = RTS_CONTROL_ENABLE; // RTSフロー
SetCommState(comPort, &dcb); // 変更した設定値を書き込み
Sleep(3000); // とりあえず安定させるために待つ.
static unsigned char a[] = {
0xf1, 0xf3, 0x00, 0x00, 3, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0xf2 // [1 0 0] [0 1 0] [0 0 1]
// 電力さえ心配なければ[255 0 0]などでももちろんいいが、1でも十分に視認できるほど明るい.
};
DWORD n;
WriteFile(comPort, a, sizeof a, &n, NULL);
CloseHandle(comPort);
}