Harigami
ログイン
anonymous Adruino IDE経由でDigiSparkのパリピセッションベース
No License PlainText
コピー
#include <Adafruit_NeoPixel.h>
#define BUTTON_PIN   2
#define PIXEL_PIN    0    //セッションベースに仕込んだGRB LED接続ピン
#define PIXEL_COUNT 12    //LEDの数=12個
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);    //NeoPoxelの諸処理

bool oldState = HIGH;  //直前のボタン状態保持
int showType = 0; //ボタン押下回数カウンタ
int x = 0;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.begin();  //必須
  strip.show();   // Initialize all pixels to 'off'
  //↓↓↓起動後の(割とどうでもいい)演出↓↓↓
  colorWipe(strip.Color(0, 0, 255), 0);//青
  for(int i=0;i<3;i++){
    colorWipe(strip.Color(0, 0, 0), 50);//黒(off)でワイプ
    delay(500);
    colorWipe(strip.Color(32, 64, 0), 50);//赤橙でワイプ
    delay(500);
  }
  colorWipe(strip.Color(0, 0, 0), 50);//黒(off)でワイプ
  delay(500);
  colorWipe(strip.Color(3, 2, 5), 0);//弱い白でワイプ
}

void loop() {
  bool newState = digitalRead(BUTTON_PIN);  //ボタン状態の取得

  if (newState == LOW && oldState == HIGH) {//ボタン押下によるHighからLowへの変化検知
    delay(20);  //押して離す僅かな間の時間稼ぎ
    newState = digitalRead(BUTTON_PIN);   //delayを経てなおLowなら「押された」とみなす
    if (newState == LOW) {
      showType++;                         //「押された」ならshowType変数を増やす
    }
      if (showType == 1){
        for(int i =0;i<5;i++){rainbowCycle(0);}
        for(int i =0;i<1;i){
        rainbow(50);
        if(digitalRead(BUTTON_PIN) == LOW){
          showType++;i++;
          colorWipe(strip.Color(127, 0, 0), 0);//緑でワイプ
          colorWipe(strip.Color(1, 1, 1), 50);
          continue;
          }
        }
       }
      if (showType >= 2){
        showType=0;                       //showType変数が一定値以上なら0にリセット
    }
  }

  // Set the last button state to the old state.
  oldState = newState;
}

//LED点灯スイッチ関数================================================================
//switchで制御しているためパターン毎にループがなされない問題あり
void startShow(int i) {
  switch(i){
    case 0: colorWipe(strip.Color(255, 255, 255), 50);    // White
            break;
    case 1: colorWipe(strip.Color(255, 0, 0), 50);  // Green
            break;
    case 2: colorWipe(strip.Color(0, 255, 0), 50);  // Red
            break;
    case 3: colorWipe(strip.Color(0, 0, 255), 50);  // Blue
            break;
    case 4: theaterChase(strip.Color(127, 127, 127), 50); // White
            break;
    case 5: theaterChase(strip.Color(127,   0,   0), 50); // Green
            break;
    case 6: theaterChase(strip.Color(  0, 127,   0), 50); // Red
            break;
    case 7: theaterChase(strip.Color(  0,   0, 127), 50); // Blue
            //rainbow(20);
            break;
    case 8: colorWipe(strip.Color(  0,   0,   0), 50);
            //rainbowCycle(5);
            break;
    case 9: theaterChaseRainbow(1);
            break;
  }
}
//LED点灯パターン関数郡==================================================================================
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}
void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
        }
        strip.show();
       
        delay(wait);
       
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off
        }
    }
  }
}

uint32_t Wheel(byte WheelPos) { //rainbow関数で使用
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}
#include <Adafruit_NeoPixel.h>
#define BUTTON_PIN   2
#define PIXEL_PIN    0    //セッションベースに仕込んだGRB LED接続ピン
#define PIXEL_COUNT 12    //LEDの数=12個
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);    //NeoPoxelの諸処理

bool oldState = HIGH;  //直前のボタン状態保持
int showType = 0; //ボタン押下回数カウンタ
int x = 0;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.begin();  //必須
  strip.show();   // Initialize all pixels to 'off'
  //↓↓↓起動後の(割とどうでもいい)演出↓↓↓
  colorWipe(strip.Color(0, 0, 255), 0);//青
  for(int i=0;i<3;i++){
    colorWipe(strip.Color(0, 0, 0), 50);//黒(off)でワイプ
    delay(500);
    colorWipe(strip.Color(32, 64, 0), 50);//赤橙でワイプ
    delay(500);
  }
  colorWipe(strip.Color(0, 0, 0), 50);//黒(off)でワイプ
  delay(500);
  colorWipe(strip.Color(3, 2, 5), 0);//弱い白でワイプ
}

void loop() {
  bool newState = digitalRead(BUTTON_PIN);  //ボタン状態の取得

  if (newState == LOW && oldState == HIGH) {//ボタン押下によるHighからLowへの変化検知
    delay(20);  //押して離す僅かな間の時間稼ぎ
    newState = digitalRead(BUTTON_PIN);   //delayを経てなおLowなら「押された」とみなす
    if (newState == LOW) {
      showType++;                         //「押された」ならshowType変数を増やす
    }
      if (showType == 1){
        for(int i =0;i<5;i++){rainbowCycle(0);}
        for(int i =0;i<1;i){
        rainbow(50);
        if(digitalRead(BUTTON_PIN) == LOW){
          showType++;i++;
          colorWipe(strip.Color(127, 0, 0), 0);//緑でワイプ
          colorWipe(strip.Color(1, 1, 1), 50);
          continue;
          }
        }
       }
      if (showType >= 2){
        showType=0;                       //showType変数が一定値以上なら0にリセット
    }
  }

  // Set the last button state to the old state.
  oldState = newState;
}

//LED点灯スイッチ関数================================================================
//switchで制御しているためパターン毎にループがなされない問題あり
void startShow(int i) {
  switch(i){
    case 0: colorWipe(strip.Color(255, 255, 255), 50);    // White
            break;
    case 1: colorWipe(strip.Color(255, 0, 0), 50);  // Green
            break;
    case 2: colorWipe(strip.Color(0, 255, 0), 50);  // Red
            break;
    case 3: colorWipe(strip.Color(0, 0, 255), 50);  // Blue
            break;
    case 4: theaterChase(strip.Color(127, 127, 127), 50); // White
            break;
    case 5: theaterChase(strip.Color(127,   0,   0), 50); // Green
            break;
    case 6: theaterChase(strip.Color(  0, 127,   0), 50); // Red
            break;
    case 7: theaterChase(strip.Color(  0,   0, 127), 50); // Blue
            //rainbow(20);
            break;
    case 8: colorWipe(strip.Color(  0,   0,   0), 50);
            //rainbowCycle(5);
            break;
    case 9: theaterChaseRainbow(1);
            break;
  }
}
//LED点灯パターン関数郡==================================================================================
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}
void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
        }
        strip.show();
       
        delay(wait);
       
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off
        }
    }
  }
}

uint32_t Wheel(byte WheelPos) { //rainbow関数で使用
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}
Adruino IDE経由でDigiSparkに転送、PL9823-F5を12個連ね組み込んだプラモデル台座(参考:https://hobby-snap.com/posts/4963)を駆動させるプログラム
現在、コメントはありません。
最初のコメンターになりませんか?