Interrupts, Arduino + Push Switch + Debouncing


aangezien ik ben begonnen met behulp van de Arduino heb ik vond het geweldig. Hoewel ik vond één ding zeer ingewikkeld met de Arduino die ik niet kon achterhalen waarom het gebeurde tot vandaag, letterlijk vandaag. Wat is het? Het heeft een drukknop verbonden met een Arduino interrupt pin om het wijzigen van bepaalde variabelen te maken.

De toepassing die ik ben bezig met het gebruik van 2 drukknoppen vereist, zal elk te koppelen aan een Arduino (als een interrupt) en controle van de huidige positie van de motor. Ik heb 6 posities dat ik wil de motor in.

Ik oorspronkelijk het opzetten van mijn circuit als volgt:

Het probleem met deze setup was toen de knop werd ingedrukt dat de interrupt was wordt genoemd meerdere keren en zelfs knevel voorzien van andere knoppen. Waarom is dit gebeurd? Het wordt veroorzaakt uit een switch stuiteren van feedback. Om dit te verhelpen, moet u het wijzigen van uw circuit rondom deze manier hieronder:

Wat dit deed was toen de drukknop op (= 1) de pin was hoog en alleen hoge. Het stuitert nooit rond als vroeger.

-----

Het project dat ik bezig was had het volgende schema (gemaakt met PSpice Student 9.1).

De pin-configuratie is als volgt:

  • PIN 2 - drukknop 1 (toename motor positie)

    • Interrupt 0
  • PIN 3 - drukknop 2 (verkleinen motor positie)
    • Interrupt 1
  • PIN 22 - LED 1 (positie 1)
  • PIN 24 - LED 2 (positie 2)
  • PIN 26 - LED 3 (standpunt 3)
  • PIN 28 - LED 4 (standpunt 4)
  • PIN 30 - LED 5 (positie 5)
  • PIN 32 - LED 6 (positie 6)

Wat deze toepassing gaat hiervoor uitstaat start in positie 1 vervolgens als u drukknop 1, de LED zal veranderen gebaseerd op de nieuwe positie. Ik roep deze posities tandwielen. Hier is de Arudino code... het is werkelijk ongecompliceerd.

Const int led6 = 32;
Const int led5 = 30;
Const int led4 = 28;
Const int led3 = 26;
Const int led2 = 24;
Const int led1 = 22;
volatile unsigned int current_gear = 1;

vluchtige lange timeout = 3000; 3 seconden
vluchtige lange last_change_time = 0;

void loop
{
switch(current_gear)
{
Case 1:
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
breken;
Case 2:
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
breken;
Case 3:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
breken;
Case 4:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,HIGH);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
breken;
Case 5:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,HIGH);
digitalWrite(led6,LOW);
breken;
Case 6:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,HIGH);
breken;
}
}
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); digitale pin 2 / / omhoog
attachInterrupt(1,down,RISING); digitale pen 3 / / omlaag
}

VOID up()
{
Serial.println ("---omhoog---");
Serial.Print ("huidige tijd -");
Serial.println(Millis());
Serial.Print ("laatste wijziging tijd -");
Serial.println((Long) last_change_time);
int verschil = millis ()-last_change_time;
Serial.Print ("Difference -");
Serial.println((Long) verschil);
Serial.Print ("binnen drempel? - ");
Als (verschil > timeout || last_change_time == 0)
{
Serial.println("Yes");
}
anders
{
Serial.println("no");
}
Serial.Print ("vorige versnelling =");
Serial.println(current_gear);
Als ((current_gear > 0 & & ((millis()-last_change_time)>timeout)) || last_change_time == 0)
{
Als (current_gear < = 5 & & current_gear! = 6)
{
current_gear ++;
last_change_time = millis();
}
}
Serial.Print ("nieuwe Gear =");
Serial.println(current_gear);
delay(150);
}
VOID down()
{
Serial.println ("---naar beneden---");
Serial.Print ("huidige tijd -");
Serial.println(Millis());
Serial.Print ("laatste wijziging tijd -");
Serial.println((Long) last_change_time);
int verschil = millis ()-last_change_time;
Serial.Print ("Difference -");
Serial.println((Long) verschil);
Serial.Print ("binnen drempel? - ");
if(difference > timeout)
{
Serial.println("Yes");
}
anders
{
Serial.println("no");
}
Serial.Print ("vorige versnelling =");
Serial.println(current_gear);
Als (current_gear > 0 & & ((millis()-last_change_time)>timeout))
{
int tempGear = current_gear - 1;
Als (tempGear! = 0)
{
current_gear--;
last_change_time = millis();
}
}
Serial.Print ("nieuwe Gear =");
Serial.println(current_gear);
delay(150);
}

Daar heb je het, een schakelaar debouncer dat in ieder geval zal werken. Deze tutorial was aangepast speciaal voor de Arduino! Geniet van!

Gerelateerde Artikelen

Arduino Push waarschuwingen voor deurbel, inbraakalarm, roken alarmen enz

Arduino Push waarschuwingen voor deurbel, inbraakalarm, roken alarmen enz

IoT kennisgevingen van uw deurbel, inbraakalarm, roken alarmen enz met behulp van een Arduino Uno en een Ethernet-Shield.Volledige details op mijn website hierOver Arduino Push waarschuwingsvensterMaakt gebruik van een Arduino Uno en de Ethernet-Shie
Arduino audio switch

Arduino audio switch

Ik heb binnen mijn schuilplaats een 5.1 Bose surround systeem en een paar van Yamaha NS - 10M Studio luidsprekers. Ik nodig had om ze te rijden met slechts één eindversterker, dus ik nodig een aangepaste audio schakelen tussen luidsprekers en LFE ook
Controle van uw slaapkamer verlichting met een eenvoudige DIY Push Switch

Controle van uw slaapkamer verlichting met een eenvoudige DIY Push Switch

OK, zullen we gewoon zeggen je hebt net klaar met kijken naar een enge film per zeggen, de wrok of iets. Als ik kijk een enge film loop ik in mijn kamer, zet het licht op wandeling naar mijn bed beurt mijn nachtlampje dan gaat u naar de deur om te ze
Arduino Reed Switch rietschakelaar

Arduino Reed Switch rietschakelaar

Hallo iedereen!De Reed-apparaten zijn elektronische of elektromechanische componenten die met behulp van de technologie van de reed-contacten werken, besefte voor het eerst door de bel.De Reed switch rietschakelaar contact is een lamina (normaal open
Arduino-based Switching spanningsstabilisatoren

Arduino-based Switching spanningsstabilisatoren

DC naar DC omvormers worden gebruikt voor het efficiënt DC spanning te converteren. Ze hebben een omzettingsefficiëntie van wel 95% waardoor ze handig voor LED strips, fietsverlichting, acculaders en zonne-aangedreven apparaten. Een spanning converte
Aan de slag met Arduino - verkeerslicht Switched

Aan de slag met Arduino - verkeerslicht Switched

In deze tutorial gaan we bouwen een aantal verkeerslichten (met groen, Amber en rode LEDs)We zullen een 3-wegschakelaar gebruiken om te bepalen welke licht brandt.Ter referentie is de schakelaar die we zullen gebruiken een 3-pins ON-OFF-ON schakelaar
Arduino - Tilt Switch, overschakelen op een relais met de KY-020

Arduino - Tilt Switch, overschakelen op een relais met de KY-020

Hallo mensen! Ik maakte een ander voorbeeld. Vandaag voor de KY-020.We gaan gewoon om over te schakelen op een relais naar de lamp aan en uit zetten.Voer de volgende stap voor de schematische code & onderdelenlijst.Stap 1: Schematische Code & onde
Arduino - CLAP SWITCH - SOUND CONTROL SWITCH

Arduino - CLAP SWITCH - SOUND CONTROL SWITCH

Hallo mensen! Vandaag maakte ik een klap schakelen met een DIY geluidbeheersing module. Ik gesoldeerd de Sound control Module een paar maanden geleden, en vandaag heb ik besloten om te controleren als het werkt, en het doet. Ik had een harde tijd om
Arduino energie Switch

Arduino energie Switch

U hebt ooit een briljante slim object aangebracht in uw huis. Bijvoorbeeld, jaloezieën automatische venster. Nu wilt u deze jaloezieën om automatisch te sluiten wanneer sommige andere hardware, zoals uw televisie is ingeschakeld.Met behulp van dit In
Arduino: Software debouncing in functie van de interrupt...

Arduino: Software debouncing in functie van de interrupt...

Hi everybody!Zo kort geleden ik was bezig met een Project waar ik maatregel de RPM van een van de wielen op mijn auto wilde, en daaruit Bereken de snelheid, bijhouden van de Driven afstand etc. met een Arduino.Ik wilde gebruiken van een magneet en ee
LED Dawn / Sunrise Alarm Clock, nachtlampje & veiligheid Light - Arduino compatibele

LED Dawn / Sunrise Alarm Clock, nachtlampje & veiligheid Light - Arduino compatibele

zoals de nachten geleidelijk verlengd in het najaar van 2011, ik ontdekte de geneugten van Arduino en dacht dat het zou een geweldige manier om iets dat ik voor een lange tijd wilde - een zachte manier om op een winter's ochtend wakker te worden.  He
Arduino Mini-Shields

Arduino Mini-Shields

Dit is een set van eenvoudige, kleine vorm-factor, mini-schilden die ik bijna per ongeluk gemaakt. Zoals ik meer en meer van hen gemaakt, realiseerde ik me dat ze echt nuttig zou kunnen zijn. Wat begon als een manier om te gebruiken sommige reserveon
Sable 2015 CNC Arduino + GRBL = LunchBox CNC

Sable 2015 CNC Arduino + GRBL = LunchBox CNC

Dit is mijn 2de Instructable en mijn 2de Arduino aangedreven CNC, dit keer rond ik omhoog de moeilijkheidsgraad door te besluiten om een zelf bevatte CNC eenheid door ontwerp mijn eigen elektronica behuizingen en plaatsingen.De stappen van dit Instru
Eind Stop / Switch problemen beperken

Eind Stop / Switch problemen beperken

Grenzen schakelaars of 'einde stopt' kan zoals ze zijn genoemd naar de 3D printen Gemeenschap worden lastig voor Hobby CNC en 3D print opstellingen. Vele forums discussie hebben over hoe om te stoppen met de valse triggers en allermeest naar het schi