Arduino + interrupteur + Debouncing interruptions

puisque j’ai commencé à utiliser l’Arduino, j’ai aimé. Bien que j’ai trouvé une chose très compliquée avec l’Arduino qui je ne pouvais pas comprendre pourquoi il se passait jusqu'à ce jour, littéralement aujourd'hui. Qu'est-ce que c'est? Il a relié un bouton poussoir sur une broche d’interruption Arduino faire modifier certaines variables.

L’application que je travaille sur nécessite l’utilisation de 2 boutons poussoir, chacun se lier dans un Arduino (comme une interruption) et contrôler la position actuelle du moteur. J’ai 6 positions que je veux le moteur dans.

J’ai initialement mis en place mon circuit comme suit :

Le problème avec cette configuration a été lorsque le bouton est enfoncé, que l’interruption a été appelé plusieurs fois et même basculer les autres boutons. Pourquoi était-ce qui se passe ? Elle est due à partir d’un commutateur rebondir vos commentaires. Pour résoudre ce problème, vous devez modifier votre circuit autour de cette manière ci-dessous :

Ce que ce fait était lorsque le bouton est sur (= 1) le code pin est élevée et que haut. Il rebondit jamais comme auparavant.

-----

Le projet que je travaillais sur avait le schéma suivant (créé avec PSpice Student 9.1).

La configuration est la suivante :

  • BROCHE 2 - bouton poussoir 1 (augmenter la position moteur)

    • interruption 0
  • BROCHE 3 - bouton poussoir 2 (diminuer la position moteur)
    • Interrupt 1
  • BROCHE 22 - LED 1 (position 1)
  • GOUPILLE de 24 - LED 2 (position 2)
  • BROCHE 26 - 3 LED (position 3)
  • BROCHE 28 - 4 LED (poste 4)
  • BROCHE 30 - LED 5 (poste 5)
  • BROCHE 32 - 6 LED (position 6)

Ce que cette application va pour faire démarrer off en position 1, puis en tant que vous appuyez sur le bouton 1, la LED va changer basé sur la nouvelle position. J’appelle ces engins en postes. Voici le Arudino code... c’est vraiment simple.

const int led6 = 32 ;
const int DEL5 = 30 ;
const int led4 = 28 ;
const int DEL3 = 26 ;
const int led2 = 24 ;
const int led1 = 22 ;
volatile unsigned int current_gear = 1 ;

volatil timeout long = 3000 ; 3 secondes
volatils long last_change_time = 0 ;

void loop()
{
Switch(current_gear)
{
cas 1 :
digitalWrite(led1,HIGH) ;
digitalWrite(led2,LOW) ;
digitalWrite(led3,LOW) ;
digitalWrite(led4,LOW) ;
digitalWrite(led5,LOW) ;
digitalWrite(led6,LOW) ;
rupture ;
cas 2 :
digitalWrite(led1,LOW) ;
digitalWrite(led2,HIGH) ;
digitalWrite(led3,LOW) ;
digitalWrite(led4,LOW) ;
digitalWrite(led5,LOW) ;
digitalWrite(led6,LOW) ;
rupture ;
cas 3 :
digitalWrite(led1,LOW) ;
digitalWrite(led2,LOW) ;
digitalWrite(led3,HIGH) ;
digitalWrite(led4,LOW) ;
digitalWrite(led5,LOW) ;
digitalWrite(led6,LOW) ;
rupture ;
cas 4 :
digitalWrite(led1,LOW) ;
digitalWrite(led2,LOW) ;
digitalWrite(led3,LOW) ;
digitalWrite(led4,HIGH) ;
digitalWrite(led5,LOW) ;
digitalWrite(led6,LOW) ;
rupture ;
cas no 5 :
digitalWrite(led1,LOW) ;
digitalWrite(led2,LOW) ;
digitalWrite(led3,LOW) ;
digitalWrite(led4,LOW) ;
digitalWrite(led5,HIGH) ;
digitalWrite(led6,LOW) ;
rupture ;
cas 6 :
digitalWrite(led1,LOW) ;
digitalWrite(led2,LOW) ;
digitalWrite(led3,LOW) ;
digitalWrite(led4,LOW) ;
digitalWrite(led5,LOW) ;
digitalWrite(led6,HIGH) ;
rupture ;
}
}
void setup()
{
Serial.Begin(9600) ;
pinMode(led1,OUTPUT) ;
pinMode(led2,OUTPUT) ;
pinMode(led3,OUTPUT) ;
pinMode(led4,OUTPUT) ;
pinMode(led5,OUTPUT) ;
pinMode(led6,OUTPUT) ;
attachInterrupt(0,up,RISING) ; la broche numérique 2 / / up
attachInterrupt(1,down,RISING) ; la broche numérique 3 / / down
}

Sub up()
{
Serial.println ("---remontant---") ;
Serial.Print ("l’heure actuelle -") ;
Serial.println(Millis()) ;
Serial.Print ("dernier changement temps -") ;
Serial.println((long) last_change_time) ;
différence d’int = millis ()-last_change_time ;
Serial.Print ("différence -") ;
Serial.println((long) différence) ;
Serial.Print ("au seuil ? - ");
Si (différence > timeout || last_change_time == 0)
{
Serial.println("Yes") ;
}
d’autre
{
Serial.println("no") ;
}
Serial.Print ("Gear précédent =") ;
Serial.println(current_gear) ;
Si ((current_gear > 0 & & ((millis()-last_change_time)>timeout)) || last_change_time == 0)
{
Si (current_gear < = 5 & & current_gear! = 6)
{
current_gear ++ ;
last_change_time = millis() ;
}
}
Serial.Print ("nouveaux engins =") ;
Serial.println(current_gear) ;
Delay(150) ;
}
Sub down()
{
Serial.println ("---GOING DOWN---") ;
Serial.Print ("l’heure actuelle -") ;
Serial.println(Millis()) ;
Serial.Print ("dernier changement temps -") ;
Serial.println((long) last_change_time) ;
différence d’int = millis ()-last_change_time ;
Serial.Print ("différence -") ;
Serial.println((long) différence) ;
Serial.Print ("au seuil ? - ");
if(difference > timeout)
{
Serial.println("Yes") ;
}
d’autre
{
Serial.println("no") ;
}
Serial.Print ("Gear précédent =") ;
Serial.println(current_gear) ;
Si (current_gear > 0 & & ((millis()-last_change_time)>timeout))
{
int tempGear = current_gear - 1 ;
Si (tempGear! = 0)
{
current_gear--;
last_change_time = millis() ;
}
}
Serial.Print ("nouveaux engins =") ;
Serial.println(current_gear) ;
Delay(150) ;
}

Là vous l’avez, un commutateur debouncer qui fonctionne dans tous les cas. Ce tutoriel a été adapté spécifiquement pour l’Arduino ! Profitez!!

Articles Liés

Arduino Nano : Debouncing et activer/désactiver le bouton avec Visuino

Arduino Nano : Debouncing et activer/désactiver le bouton avec Visuino

Boutons reliée à Arduino peut facilement servir d'interrupteur à bascule on/off. Malheureusement les boutons ont tendance à créer des bruits qui rebondit lorsqu'ils connecter/déconnectent, rendant la fonctionnalité bascule non fiable. Le bruit peut ê
INTERRUPTEUR de contrôle sonore Arduino - interrupteur CLAP -

INTERRUPTEUR de contrôle sonore Arduino - interrupteur CLAP -

Salut tout le monde! Aujourd'hui, j'ai fait un clap interrupteur avec un module de contrôle son bricolage. Il y a quelques mois, j'ai soudé le contrôle de son Module, et aujourd'hui j'ai décidé de vérifier si cela fonctionne, et il le fait. J'ai eu u
Tutoriel 1: Arduino interrupteur lumière (non Arduino programmation nécessaire) [Débutant]

Tutoriel 1: Arduino interrupteur lumière (non Arduino programmation nécessaire) [Débutant]

dans ce Instructable destiné aux débutants dans la magie de l'Arduino, je vais vous montrer comment faire un circuit simple qui n'exige aucune programmation pour construire.  J'ai cela visé pour les enfants comme moi, qui sont étonne avec le monde de
Arduino - interrupteur à bascule, allumer un relais avec le KY-020

Arduino - interrupteur à bascule, allumer un relais avec le KY-020

Salut tout le monde! J'ai fait un autre exemple. Aujourd'hui pour le KY-020.Nous allons simplement allumer un relais pour allumer la lampe et éteindre.Suivez l'étape suivante pour le code schématique et liste de pièces.Étape 1: Code schématique et li
Arduino - interrupteur à détecteur tactile à l’aide de la KY-036

Arduino - interrupteur à détecteur tactile à l’aide de la KY-036

Salut tout le monde! Nous y revoilà!... J'ai fait un autre exemple sur un des capteurs que j'ai obtenu.Cette fois, j'ai fait un exemple pour le capteur tactile de KY-036.Suivez l'étape suivante pour le schéma et le code.Étape 1: Code schématique et l
Arduino Mini-Shields

Arduino Mini-Shields

Il s'agit d'un ensemble de simple, petit facteur de forme, mini-boucliers que j'ai créé presque par accident. J'ai fait de plus en plus d'entre eux, j'ai réalisé qu'ils pouvaient être vraiment utiles. Ce qui a commencé comme un moyen d'utiliser quelq
Bouclier d’arduino maison simple POV

Bouclier d’arduino maison simple POV

A le sergent Hartman (Full Metal Jacket) dit pendant le fusil prier « il y en a beaucoup comme lui, mais celui-ci est le mien »Étape 1: matérielEn effet, il y a beaucoup de projet comme disponibles sur internet.Celui-ci utilise un interrupteur à basc
Arduino intermédiaire : Entrées et sorties

Arduino intermédiaire : Entrées et sorties

Continuant de mon Intro d'Arduino post, ce Instructable ira sur certains sujets un peu plus avancés avec Arduino, relative au contrôle et la gestion de nombreuses entrées et sorties. La classe suivante décrit comment connecter des entrées de l'Arduin
Tachymètre optique axée sur l’Arduino

Tachymètre optique axée sur l’Arduino

plus de dix ans, j'ai mis en place une page web avec des instructions détaillées sur la construction d'un moteur électrique simple basé sur l'un de monde télévisé de le Beakman. Je l'ai appelé la page "moteur électrique de Beakman" et au fil des
Détecteur de foudre Arduino Pocket

Détecteur de foudre Arduino Pocket

Nous sommes tous aime travailler et jouer dehors. Mais je pense que quiconque accepterait qu'obtenir frappé par la foudre en s'amusant en plein air de défi n'est pas... amusant !OK, assez avec l'intro de mignon...Ce projet est venu sur le moment, alo
Antirebonds interruptions avec MPIDE partie 2: filtres RC

Antirebonds interruptions avec MPIDE partie 2: filtres RC

Hé les gars ! Êtes-vous prêt pour la deuxième partie de ma série antirebonds ?« Mais Jay!" Je t'entends demander, « Je ne savais pas il y avait une première! » Ou peut-être que vous avez dit "attends, debouncing ? Ce qui est qui?" Je ne sui
MPU-9150/9250 IMU avec Arduino Pro-Micro

MPU-9150/9250 IMU avec Arduino Pro-Micro

Avez-vous acheter un capteur 10-DOF d'aliexpress ou ebay et rencontrez des problèmes pour faire fonctionner ? J'ai téléchargé la bibliothèque de Jeff Rowberg et la sortie toujours figée après un certain temps. J'ai décidé de déboguer le code, parce q
Basculer l’interrupteur activé LED

Basculer l’interrupteur activé LED

bon après-midi ici est mon tout premier Arduino Code que j'ai écrit, vient de terminer il maintenant. Fritzing : http://fritzing.org/projects/tilt-sw...d-leds-arduinoInterrupteur à bascule ou bouton activé de LEDTours et éteindre un feu émettant diod
ChipKit fonctionnant sur Arduino Code

ChipKit fonctionnant sur Arduino Code

Dans cette introduction, je démontrerai comment utiliser Arduino programmation avec dp32 chipKit.Étape 1: Étape 1:-matériel nécessaire n'importe quelle plaque chipKitcâble micro-USBVotre ordinateur personnelÉtape 2: Téléchargement MP labo X et IDE Ar