#include #include #include "Adafruit_MCP23017.h" int AC_pin_mcp = 7; Ticker tick; int dim = 0; //Initial brightness level from 0 to 255, change as you like! Adafruit_MCP23017 mcp; void setup() { mcp.begin(); // use default address 0 mcp.pinMode(AC_pin_mcp, OUTPUT); Serial.begin(115200); pinMode(12, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(12), light, FALLING); //When arduino Pin 2 is FALLING from HIGH to LOW, run light procedure! } volatile int it = 0; volatile int lzc = 0; volatile int zc = 0; void light() { // noInterrupts(); tick.attach_us(990, set); it = 0; zc = millis() - lzc; // Serial.println("zc: " + String(zc)); lzc = (int)millis(); // interrupts(); } void set() { //int enter = (int)millis(); Serial.println(it);// + " -- " + String(dim) + " -- " + millis()); if (it == dim) { // Serial.println("match"); if (it < 1) { mcp.digitalWrite(AC_pin_mcp, HIGH); } else if (it > 9) { mcp.digitalWrite(AC_pin_mcp, LOW); } else if (it >= 1 && it <= 9 ) { mcp.digitalWrite(AC_pin_mcp, HIGH); delayMicroseconds(10); mcp.digitalWrite(AC_pin_mcp, LOW); } it++; } it++; // int time_=millis()-enter; //Serial.println("loop millis : " + String(time_)); } void loop() { String input = ""; while (Serial.available()) { input += (char)Serial.read(); } if (input != "" ) { dim = input.toInt(); } //Serial.println("Dim:" + String(dim)); delay(500); }