#include "I2Cdev.h"
#include "MPU6050.h"//https://github.com/ElectronicCats/mpu6050
#include "Wire.h"
#include <Adafruit_NeoPixel.h>//https://github.com/adafruit/Adafruit_NeoPixel
MPU6050 accelgyro;
Adafruit_NeoPixel tape(10, 2, NEO_GRB + NEO_KHZ800);//10個、D2ピン、タイプ
int ax, ay, az, tmp;//各軸の加速度+作業用tmp
int lax, lay, laz;//前回lastの加速度3軸
uint32_t last_change;//前回の変化値
word cnt;//色変化のタイミング用カウンタ
uint32_t col[] = {0xff0000, 0xff8000, 0xffff00, 0xff00, 0xffff, 0xff, 0x8000ff, 0xff80ff};//虹7色+ピンク
byte col_num;//上記の色番号
void led(byte num) {//その色番号で10LED光らせる
for (byte i = 0; i < 10; i++)tape.setPixelColor(i, col[num]);
tape.show();
}
void setup() {
tape.begin();
Wire.begin();
accelgyro.initialize();
}
void loop() {
accelgyro.getMotion6(&ax, &ay, &az, &tmp, &tmp, &tmp);
uint32_t change = abs(ax - lax) + abs(ay - lay) + abs(az - laz);//各軸の変化の和
if (change + last_change > 1000) {//振っているのなら
if (cnt == 0) {
led(col_num);
col_num = (col_num + 1) % 7;
}
if (++cnt == 10)cnt = 0;
} else {//振っていないなら
led(7);
cnt = 0;
}
lax = ax;//今回の値を保存
lay = ay;
laz = az;
last_change = change;
delay(100);
}