volatile bool mydelay = false;
volatile int myvalue = 5000;
uint8_t last_CH1_state = 0;
const int PinDiac = 3;
// const int PinLed = 11;
enum { LedOn = HIGH, LedOff = LOW };
// -----------------------------------------------------------------------------
void setup () {
Serial.begin (9600);
PCICR |= (1 << PCIE0); //enable PCMSK0 scan
PCMSK0 |= (1 << PCINT0); //Set pin D8 trigger an interrupt on state change. Input from optocoupler
pinMode (PinDiac, OUTPUT); //Define D3 as output for the DIAC pulse
pinMode (LED_BUILTIN, OUTPUT);
digitalWrite (PinDiac, HIGH);
digitalWrite (LED_BUILTIN, LedOff);
}
// -----------------------------------------------------------------------------
void loop () {
if (Serial.available()) {
char rec = Serial.read ();
case 181:
digitalWrite (LED_BUILTIN, LedOff);
break;
case 182:
digitalWrite (LED_BUILTIN, LedOn);
break;
default:
myvalue = map (rec, 0, 180, 6700, 10);
Serial.print (" myvalue ");
Serial.println (myvalue);
break;
}
}
if (mydelay) {
delayMicroseconds (myvalue); //This delay controls the power
digitalWrite (PinDiac, HIGH);
delayMicroseconds (100);
digitalWrite (PinDiac, LOW);
mydelay = false;
}
}
// -----------------------------------------------------------------------------
ISR (PCINT0_vect) {
uint8_t currentState = PINB & B00000001;
if (currentState != last_CH1_state) {
last_CH1_state = currentState;
mydelay = true;
}
}