Borda de Subida não funciona

Estou querendo controlar o brilho de uma lampada usando o Arduino
A questão que queria fazer a interrupção nada borda de subida.
Mudando para RISING a lampada só esta ficando ligada, não variando o brilho. Tem algo de errado com o código?

#include <TimerOne.h>

#define PINO_PASSAGEM_ZERO 2
#define PINO_SAIDA_LAMPADA 8
#define PINO_BOTAO_MAIS 4

#define DELTA_BRILHO_BTN 10

int brilho = 0;
long tempo_acionamento = 0;
bool travamento_btn_mais = false;

void calcula_tempo(){
tempo_acionamento = (long)((100 - brilho) * 83.3333);
}

void liga_lampada(){
digitalWrite(PINO_SAIDA_LAMPADA, HIGH);
Timer1.detachInterrupt();

}
void passagem_zero(){
if(brilho > 0 && brilho < 100){
digitalWrite(PINO_SAIDA_LAMPADA, LOW);
Timer1.attachInterrupt(liga_lampada, tempo_acionamento);
}
}

void setup() {
pinMode(PINO_PASSAGEM_ZERO, INPUT);
pinMode(PINO_BOTAO_MAIS, INPUT);

pinMode(PINO_SAIDA_LAMPADA, OUTPUT);

calcula_tempo();

//Inicializa o temporizador
Timer1.initialize();

//Executa a função passagem_zero na borda de subida
attachInterrupt(digitalPinToInterrupt(PINO_PASSAGEM_ZERO), passagem_zero, RISING);

}

void loop() {
if(digitalRead(PINO_BOTAO_MAIS) == HIGH){
if(travamento_btn_mais == false){
brilho += DELTA_BRILHO_BTN;
if(brilho > 90){
brilho = 100;
//digitalWrite(PINO_SAIDA_LAMPADA, HIGH);
}
calcula_tempo();
travamento_btn_mais = true;
}
}
else{
travamento_btn_mais = false;
}
}

Se eu estou a entender bem a sua ideia, se a lâmpada está a ser ligada é porque a o programa está a executar a rotina de interrupção externa, portanto a subida está a ser detectada. Sendo assim, o problema é que a lâmpada não está a ser desligada, ou seja, ou o tempo é muito grande, ou então, a rotina de interrupção do timer não está a ser executada. A minha sugestão é que execute uma depuração enviando para a porta série o valor do tempo de accionamento e/ou fazendo piscar um LED cada vez que entra dentro da rotina de interrupção do timer. Já agora, tem a certeza que o valor de 8.3 segundos está correcto?

Então.
Meu calculo foi assim.
A frequência da rede é 60Hz
Se consideramos o numero de vez q passa por zero temos 120Hz
Q da 0.00833s
A função Timer1.attachInterrupt tem como entrada o tempo em microsegundos
temos então 8333.33

O Brilho da lampada vai de 0 a 100

tempo = (100 - brilho) /100 * 8333.33 = (100 - brilho) * 83.3333

PauloMatos:
Então.
Meu calculo foi assim.
A frequência da rede é 60Hz
Se consideramos o numero de vez q passa por zero temos 120Hz
Q da 0.00833s
A função Timer1.attachInterrupt tem como entrada o tempo em microsegundos
temos então 8333.33

O Brilho da lampada vai de 0 a 100

tempo = (100 - brilho) /100 * 8333.33 = (100 - brilho) * 83.3333

Certo. O tempo é em microsegundos, não tinha percebido isso.
De qualquer forma o resto mantém-se. Uns LED a piscar quando entra dentro do calback da interrupção externa e da interrupção do timer e fica com uma ideia do que se passa.

Ontem passei algum tempo nisto e acabei por não perceber porque é que a temporização não funcionava.

Dito isto, não olhei com muita atenção ao datasheet nem ao código da Timer1. No entanto, o propósito dessa classe era criar PWM e não usar o temporizador como um temporizador normal... logo não ajuda.