MENU

Arduinoで作るクリスマス用点滅回路


トランジスター2SC1815を使ったLED制御です。


MOS-Fetを使ったLED制御です。


Arduino IDEのプログラムです。

/*
 LED3個の2023/10/29
 完成バージョン
 https://sea-peoples.com/
 
 led_flashi_3piece_complete.ino

*/
class flash {
  int ledPin;
  long OnTime;
  long OfTime;
  long WAITETime1;
  long WAITETime2;
  int loopcount;
  int ledState;
  int ledmove;
  int setcount;
  int led;
  unsigned long setMillis1;
  unsigned long setMillis2;

  public:
  //---------(pin w1  on off w2 loop)--------
  flash (int pin,long wate1 , long on, long off, long wate2 ,int lp ) {
    ledPin = pin;
    setcount=lp;
    pinMode(ledPin, OUTPUT);

    OnTime = on;
    OfTime = off;
    WAITETime1 = wate1;
    WAITETime2 = wate2;
    loopcount = 0;
    led=0;

    ledState = LOW;
    setMillis1 = 0;
    setMillis2 = 0;

  }
 void Update() {
    unsigned long timeMillis = millis();
    if (timeMillis - setMillis2 >= WAITETime1) {
      if (setcount > loopcount) {
        if ((ledState == LOW) && (led == 0)) {       //最初の1回目はLEDがONでスタートするように
            ledState = HIGH;  
            digitalWrite(ledPin, ledState);
            led=1;
            setMillis1 = timeMillis;
        }
        if((ledState == HIGH) && (timeMillis - setMillis1 >= OnTime)) {
          setMillis1 = timeMillis;
          ledState = LOW;
          digitalWrite(ledPin, ledState);
      
        } else {
          if ((ledState == LOW) && (timeMillis - setMillis1 >= OfTime)) {
           setMillis1 = timeMillis;
           ledState = HIGH;
                loopcount++;
           digitalWrite(ledPin, ledState);
          }
        }
      } else {
          ledState = LOW;  
          digitalWrite(ledPin, ledState);    
          if (timeMillis - setMillis1 >= WAITETime2) {
            loopcount=0;
            setMillis1 = timeMillis;
            setMillis2 = timeMillis;
            led=0;
          }
      }
    } 
  }
  void lanpoff() {
    ledmove = LOW;
    digitalWrite(ledPin , ledmove);
  }
  void lanpon() {
    digitalWrite(ledPin , LOW);
  }
};
int button = 4; // 停止ボタンピン
int swsts;
//----------pin  w1  on   off   w2   loop-------
flash led1(6,  0, 100, 100 ,  0, 1);
flash led2(7,100, 100, 100 ,  0, 1);
flash led3(8,200, 100, 100 ,  0, 1);
flash led4(LED_BUILTIN,0 , 50, 50,200,4); //基板LED

void setup() {
    pinMode(button, INPUT_PULLUP);
}

void loop() {
  int reading  = analogRead(0);
  //reading=0;
  if (reading > 100 ) {
   led1.lanpon();
   led2.lanpon();
   led3.lanpon();
  }else {
    led1.Update();
    led2.Update();
    led3.Update();
    led4.Update();
  }
}		

行100の「if (reading > 100 )」 は、昼間に点灯しない光の量(CDSから入る明るさ)を数値化したものです。設置した場所は廊下でしたので、夜でも光があります。場所によって数値を調整してください。
※ポート番号は配線により異なります。配線に合わせて設定してください。
今回にLEDはダイソーのテープライトを使います。3色で、ブルー、ホワイト、ワームホワイトです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次