Variateur de lumière avec zero-cross detec en fonction de la luminosité ambiante

Bonjour,
Je dois réaliser un projet afin d'allumer une lampe halogène avec ce variateur :

J'ai une carte Arduino Uno, un interrupteur et un capteur de lumière :

J'ai besoin de ce capteur pour faire varier la luminosité de ma lampe en fonction de la luminosité ambiante et la lampe doit s'allumer progressivement pour ne pas brusquer la jument dans le box que je dois éclairer.

Le problème est que je ne parviens pas à éteindre la lampe avec mon programme et que je n'ai pas encore trouvé comment inclure une variation progressive de la lampe. Voici mon prgramme pour le moment :

unsigned char AC_LOAD = 3;
unsigned char dimming = 2;
unsigned char i;
const int I = A5;
int Int = 0;
void setup() {

  pinMode(AC_LOAD, OUTPUT);
  pinMode(I, INPUT);
  attachInterrupt(0, zero_crosss_int, RISING);
  
    Serial.begin(9600);

}

void zero_crosss_int()
{

  
  int dimtime = (100*dimming);  
  delayMicroseconds(dimtime);
  digitalWrite(AC_LOAD, HIGH);
  delayMicroseconds(10);       
  digitalWrite(AC_LOAD, LOW);
}



void loop() {

  int value = analogRead(A0);

 Int = digitalRead(I);

if (Int == HIGH) {
    dimming = map(value, 400, 800, 5, 85);
    
    delay(10);
}

if (Int == LOW) {
  dimming;
  delay(10);
}
}

je n'ai probablement pas tout précisé mais merci d'avance pour votre aide.

Tu as été sur le site que tu donnes en lien?
Tu as vu qu'ils proposent une librairie?
Tu as vu qu'il y a des exemples de code?

C'est pas vraiment ce que je recherche. J'ai d'abord réalisé un programme qui faisait varier la lumière avec un potentiomètre, puis j'ai remplacé ce dernier par un capteur de lumière. Jusque là ça fonctionnait très bien mais il faut qu'un utilisateur puisse allumer/éteindre cette lampe donc j'ai ajouté un interrupteur mais je ne vois pas comment allumer la lampe de façon progressive puis comment éteindre la lampe lorsque l'interrupteur est en low.

Si tu sais faire varier avec un potentiomètre, tu as fais le plus gros.
Lors de l’appui sur le bouton, si la lampe est éteinte au départ:

  • dimTime = diTimeMin;
  • Attendre un certain temps (temps à déterminer pour avoir un effet progressif)
  • Si dimTime < dimTimeMax alors Incrémenter dimTime
  • Boucler en 2

Pour l’extinction c’est l’inverse

Tu remarqueras que ce petit algo s’appuie sur une boucle qui doit pouvoir prendre place assez facilement dans loop() (qui est une boucle)
Pendant la phase d’allumage ou celle d’extinction, il faut peut-être prévoir que l’utilisateur peut changer d’avis et vouloir annuler la fonction en cours.