กดสวิตซ์ปุ่มแล้ว ไฟจะค่อยติดจนสว่าง โดยใช้ esp8266 + blynk + Dimmer

ใครพอจะเขียนโค้ด esp8266 + blynk + Dimmer ให้หน่อยได้ไหมครับ
พอดีจะเอาไปใช้งานในการหรี่ไฟให้กับสัตว์
โดยกดสวิตซ์ปุ่มแล้วไฟจะค่อยติดจนสว่าง พอจะปิดก็กดสวิตซ์เดิมแล้วไฟจะค่อยๆดับครับ

เชื่อมเบสิก esp8266 + Dimmer ให้ได้ก่อนนะครับมันไม่ได้ยากเลยลองดู

AC Light Dimmer Module, 1 Channel, 3.3V5V logic

Code dimmer

#include "hw_timer.h"          
const byte zcPin = 12;
const byte pwmPin = 13;  

byte fade = 1;
byte state = 1;
byte tarBrightness = 255;
byte curBrightness = 0;
byte zcState = 0; // 0 = ready; 1 = processing;
void setup() {
  Serial.begin(115200);   
  pinMode(zcPin, INPUT_PULLUP);
  pinMode(pwmPin, OUTPUT);
  attachInterrupt(zcPin, zcDetectISR, RISING);    // Attach an Interupt to Pin 2 (interupt 0) for Zero Cross Detection
  hw_timer_init(NMI_SOURCE, 0);
  hw_timer_set_func(dimTimerISR);
}

void loop() {
  // put your main code here, to run repeatedly:
    if (Serial.available()){
        int val = Serial.parseInt();
        if (val>0){
          tarBrightness =val;
          Serial.println(tarBrightness);
        }
        
    }
}


void dimTimerISR() {
    if (fade == 1) {
      if (curBrightness > tarBrightness || (state == 0 && curBrightness > 0)) {
        --curBrightness;
      }
      else if (curBrightness < tarBrightness && state == 1 && curBrightness < 255) {
        ++curBrightness;
      }
    }
    else {
      if (state == 1) {
        curBrightness = tarBrightness;
      }
      else {
        curBrightness = 0;
      }
    }
    
    if (curBrightness == 0) {
      state = 0;
      digitalWrite(pwmPin, 0);
    }
    else if (curBrightness == 255) {
      state = 1;
      digitalWrite(pwmPin, 1);
    }
    else {
      digitalWrite(pwmPin, 1);
    }
    
    zcState = 0;
}

void zcDetectISR() {
  if (zcState == 0) {
    zcState = 1;
  
    if (curBrightness < 255 && curBrightness > 0) {
      digitalWrite(pwmPin, 0);
      
      int dimDelay = 30 * (255 - curBrightness) + 400;//400
      hw_timer_arm(dimDelay);
    }
  }
}

library ที่ต้องใช้

hw_timer.zip (1.8 KB)