Controle pwm AC + Bluetooth

Olá!

Estou desenvolvendo um aplicativo para controle de luminosidade apenas para aprender. Desenvolvi o código para testes controlando apenas um LED, onde recebo informações do bluetooth para controle da luminosidade, porém quando fui tentar inserir a parte de controle de cargas AC com pwm junto ao código já existente tive problemas. Gostaria de saber se alguém pode me ajudar?
Estou utilizando sensor zero cross e um triac para disparo.

Código de controle do LED:

#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11); //TX, RX respectively
String device;
const int dev1 = 3; //PWM
int autovalue = 0;
void setup() 
{
  BT.begin(9600);
  Serial.begin(9600);
  pinMode(dev1, OUTPUT);
}

void loop() 
{
  while (BT.available()) //Check if there is an available byte to read
  {
    delay(10); //Delay added to make thing stable 
    char c = BT.read(); //Conduct a serial read
    device += c; //build the string.
  } 
  if (device.length() > 0) 
  {
    Serial.println(device); 
    
    // Slider control:
   char colour = device[0]; 
   int value = device[2]; 
  // Serial.print(" "); 
   Serial.println(value); 
   if ( colour == 'r') 
   { 
      analogWrite(dev2, value*2.55); // use value to set PWM for LED brightness 
   } 
   if (( colour == 'y')&&(autovalue<=254)) 
   { 
      autovalue++;                  //increase 1 at pwm or 0,4% of the duty cycle
      analogWrite(dev2, autovalue);
      Serial.println(autovalue);  
      delay(20);
   } 
   if (( colour == 'g')&&(1<=autovalue))  
   { 
     autovalue--;                   //decrease 1 at pwm or 0,4% of the duty cycle
     analogWrite(dev2, autovalue); 
     Serial.println(autovalue);
     delay(20); 
   } 
   if ( colour == 'b') 
   { 
     analogWrite(dev2, value); 
   }
   device=""; //Reset the variable
   } 
}

Estou tentando adicionar um código que usa a biblioteca ACPWM:

 /* AC POWER CONTROL WITH PWM AND ZERO CROSS DETECTION */
 /* AUTHOR: Dimitris El. Vassis - 2013 */

 #include <ACPWM.h>
 #define ZERO_PIN 2 //Input pin from zero cross detector
 #define PWM_PIN 9 //Output pin to TRIAC / SSR
 int SET_PIN = A0; //Analog pin for setting the dutyCycle value with a pontentiometer

 void setup()
 {
    pinMode(ZERO_PIN, INPUT);
    pinMode(PWM_PIN, OUTPUT);
    //Initialize PWM operation.
    //Mains frequency: 50Hz.
    //Zero crossing point reached whenever pulse to PIN2 changes
    //Duty cycle = 0..255. 0:always off. 255: always on. 150: 59% on.
    ACpwm.initialize(50,ZERO_PIN,CHANGE,PWM_PIN,255);
    //Latching on HIGH zero state: 3 microseconds.
    //Latching on LOW zero cross state: 5 microseconds.
    ACpwm.setLatch(3,5); 
 }

 void loop() {
    //Adjust the power with the potentiometer
    //Set the duty cycle equal to the value of the potentiometer.
    ACpwm.setDutyCycle(analogRead(SET_PIN));
 }

E que problemas é que tiveste??? Achas que sou bruxo??

PWM e AC são coisas que não ligam muito bem, principalmente sem atenção a protecções e filtragem. Se esse teu sistema funcionar, algo que vais notar em casa é que as lampadas (no tecto) vão começar a piscar na mesma frequência que o teu PWM...

Possivelmente, a televisão vai fazer interferência e se mantiveres isso ligado, eventualmente podes vir a ter problemas com os dispositivos eléctricos em casa.