Interrupt USB/Alim

Dans un de mes projets, j'utilise un interrupt comme suit :

volatile int Bouton = 0;
volatile unsigned long last_interrupt_time = 0;
int tempo = 250;

void setup(){
...
attachInterrupt(0, appui, RISING);
}

 void loop(){
...
}

void appui(){  
  unsigned long interrupt_time = millis();
  if (interrupt_time - last_interrupt_time > tempo){
    Bouton = 1;
  }
  last_interrupt_time = interrupt_time;  
}

Utilisation a priori normale (d'après ce que j'ai pu lire), avec un debounce pour éviter les problèmes.

Quand j'utilise mon circuit en USB, l'interrupt est très réactif : un appui même bref de quelques millisecondes est très bien détecté par le système. Quand j'utilise mon circuit sur alim 5V, l'interrupt est très peu réactif : un appui continu d'au moins 250ms (au pif, mais au moins ça) est nécessaire pour être détecté.

Vous en connaissez la raison ? Merci !

Salut,

Hardware ?

Utilisation a priori normale (d'après ce que j'ai pu lire), avec un debounce pour éviter les problèmes.

Il y a déjà eu une discussion sur le sujet il y a quelques semaines. [u]L[/u]e debounce L'anti rebond logiciel semble poser de gros problème à l'intérieur d'une interruption. La solution la plus simple et qui ne pose pas de problème est la solution [u]matérielle[/u] : un condensateur de 100 nF en parallèle sur les contacts.

Re, +1

Ca marche beaucoup mieux avec le condensateur, merci !

pas de delay() dans une interruption ;)