Bonjour,
je réalise un projet perso : une veilleuse pour mes chouppettes, avec un ring led 24 et le but c’est de le faire passé en orange au bout de x heures pour donner le feu vert pour se lever le matin
oui, la technologie va nous aider a dormir un peu plus longtemps (les filles sont d’accord sur le principe pour l’instant)
Je souhaite définir le nombre d’heures (ou de demi heure) en utilisant un bouton, relié sur la pin 2 pour déclencher une interruption, chaque fois que j’appuis sur le boutton je vais incrémenter un compteur, qui sera mon nombre d’heures.
Je remarque que mon bouton poussoir produit des rebonds et déclenche 3 ou 4 fois l’interruption par appuis
=> j’ai utilisé le mode pullUP sur la pin 2, et j’ai tenté les mode RISING et FALLING
en codant un “débounceur” je filtre bien les bounces, mais cependant…
au démarrage de l’Arduino nano, je remarque que l’interruption est lancé
attachInterrupt(digitalPinToInterrupt(2), push_button , LOW ); //attache l'interruption externe n°0 (poin 2) à la fonction "push_button"
voici comment les grandes lignes du prog sont codées
#define PIXEL_COUNT 24 // On définit le nombre de LED compris sur le ring
void setup()
{
strip.begin(); // Lance la connection
strip.show(); // Initialise toute les led à 'off'
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
anti_bounce_end();
}
...
int time2wakeUP;
int bounce = 1000;
unsigned long time;
void displayTime2wakeUp () //affiche le temps avant passage à l'heure de réveil
{
for (int i = 0; i < time2wakeUP ; i++)
{
strip.setPixelColor(i, 0, 0, 255);
}
strip.show();
delay(200);
}
void anti_bounce_start ()
{
//avoid bounce of push button
detachInterrupt(digitalPinToInterrupt(2));
}
void anti_bounce_end()
{
//avoid bounce of push button
delay(bounce);
attachInterrupt(digitalPinToInterrupt(2), push_button , FALLING ); //attache l'interruption externe n°0 (poin 2) à la fonction "push_button"
}
void add_one_to_timer()
{
if ( time2wakeUP < PIXEL_COUNT)
{
time2wakeUP++;
}
else
{
time2wakeUP = 0;
}
}
void push_button ()
{
Serial.println("push_button");
anti_bounce_start();
add_one_to_timer();
displayTime2wakeUp();
anti_bounce_end();
}
de temps en temps, l’interruption n’est pas lancée, mais la plus part du temps, dès que je relance l’instruction attachInterrupt, je déclenche l’interruption
je ne comprends pas pourquoi
s’agit’il d’un comportement connu ?
un temps de charge d’une capa ?
thank’s for any help
Br,
FLYhooo