前提・実現したいこと
焦電センサの値を取り、HIGHになった時にLEDテープが点灯、LOWになると消えるようにしたい。
色々と調べるとArduinoの内部電力だけだと負荷が大きいとのことだったので外部からACアダプターをつなげている
LEDテープはWS2812、焦電センサはPaPIRs(VZ)、Arduinoはバージョン(1.8.9)を使用している。
ここに質問の内容を詳しく書いてください。
1.コードを書いて本来センサの値から光ったり消えたりして欲しいのにずっと付いたままの状態になっているのでどうすれば正しいセンサの値を反映させられるかを知りたいです。
→センサーの値が0になった時に7つ目のLEDのみが消えるようになったのを全部消えるようにしたい
該当のソースコード
#include <Adafruit_NeoPixel.h> const int sensor = 2; //// #define PIN 6 //信号端子のピン番号 #define LED_NUM 150 //LEDの数 Adafruit_NeoPixel ledtape = Adafruit_NeoPixel(LED_NUM, PIN, NEO_GRB + NEO_KHZ800); //3つめのパラメータは使うLEDテープの制御ICがWS2812ならNEO_KHZ800 / WS2811ならNEO_KHZ400 void setup() { Serial.begin(9600); pinMode(PIN, OUTPUT); //// pinMode(sensor, INPUT); ////sensor(つまり2番のピン)は入力する場所として使います ledtape.begin(); ledtape.show(); //一旦全てOFFの状態で反映 } void loop() { int sensorState = digitalRead(sensor);//sensor(2ピン)のお知らせを読んで、「来た(HIGH)」or「来ない(LOW)」を「sensorState」と名付けた場所に入れておきます! uint16_t i, j; if(sensorState == HIGH){ for(j=0; j <256; j++) { for(i=0; i < ledtape.numPixels(); i++) { ledtape.setPixelColor(i, rotateColor((((i) * 256 / ledtape.numPixels()) + j) & 255)); } ledtape.show(); Serial.print(sensorState); delay(40); } } else{ ledtape.setPixelColor(6,0,0,0);//LEDはきえる Serial.print(sensorState); delay(40); } } //RGBの色の移り変わり関数 uint32_t rotateColor(byte WheelPos) { if(WheelPos < 85) { return ledtape.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170) { WheelPos -= 85; return ledtape.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else { WheelPos -= 170; return ledtape.Color(0, WheelPos * 3, 255 - WheelPos * 3); } }
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。