Arduino + Push Switch + Debouncing + avbryter



eftersom jag har börjat använda Arduino jag har älskat den. Även om jag hittade en sak mycket komplicerande med Arduino som jag inte kunde räkna ut varför den var skedde fram till idag, bokstavligen idag. Vad är det? Det har anslutit en tryckknapp till en Arduino avbryta pin till göra det ändra vissa variabler.

Programmet som jag arbetar på kräver användning av 2 tryckknappar, var kommer att länka till en Arduino (som ett avbrott) och kontrollera den aktuella positionen för motorn. Jag har 6 positioner som jag vill ha motorn i.

Jag ursprungligen satt upp min krets som så:

Problemet med denna setup var när knappen trycktes avbrottet var att vara kallade flera gånger och även växla andra knappar. Varför var detta händer? Det orsakas från en switch som studsar feedback. För att åtgärda detta, måste du ändra din krets runt detta sätt nedan:

Vad detta gjorde var när knappen var (= 1) PIN-koden var hög och bara högt. Det studsar aldrig runt som förr.

-----

Det projekt som jag arbetade på hade följande schematiska (skapad med PSpice Student 9.1).

Pin-konfiguration är följande:

  • STIFT 2 - tryckknapp 1 (öka motor position)
    • avbryta 0
  • STIFT 3 - tryckknapp 2 (minska motor position)
    • avbryta 1
  • PIN 22 - LED 1 (position 1)
  • PIN 24 - LED 2 (position 2)
  • STIFT 26 - LED 3 (position 3)
  • PIN 28 - LED 4 (position 4)
  • STIFT 30 - LED 5 (position 5)
  • PIN 32 - LED 6 (position 6)

Vad denna ansökan kommer att göra är start off i position 1 då som du tryckknapp 1, LED kommer att ändra baserat på den nya positionen. Jag kallar dessa positioner redskap. Här är Arudino koden... det är verkligen rakt fram.

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;

flyktiga lång lång timeout = 3000; 3 sekunder
flyktiga lång lång last_change_time = 0;

void loop()
{
Switch(current_gear)
{
fall 1:
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
bryta;
fall 2:
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
bryta;
fall 3:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
bryta;
fall 4:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,HIGH);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
bryta;
fall 5:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,HIGH);
digitalWrite(led6,LOW);
bryta;
fall 6:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,HIGH);
bryta;
}
}
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); Digital stift 2 / / upp
attachInterrupt(1,down,RISING); Digital stift 3 / / ner
}

void up()
{
Serial.println ("---kommer---");
Serial.Print ("aktuell tid -");
Serial.println(Millis());
Serial.Print ("Senast ändra tid -");
Serial.println((Long) last_change_time);
int skillnaden = millis ()-last_change_time;
Serial.Print ("skillnad -");
Serial.println((Long) skillnad);
Serial.Print ("inom tröskel? - ");
om (skillnaden > timeout || last_change_time == 0)
{
Serial.println("yes");
}
annat
{
Serial.println("no");
}
Serial.Print ("föregående växel =");
Serial.println(current_gear);
om ((current_gear > 0 & & ((millis()-last_change_time)>timeout)) || last_change_time == 0)
{
om (current_gear < = 5 & & current_gear! = 6)
{
current_gear ++;
last_change_time = millis();
}
}
Serial.Print ("nya redskap =");
Serial.println(current_gear);
Delay(150);
}
void down()
{
Serial.println ("---kommer---");
Serial.Print ("aktuell tid -");
Serial.println(Millis());
Serial.Print ("Senast ändra tid -");
Serial.println((Long) last_change_time);
int skillnaden = millis ()-last_change_time;
Serial.Print ("skillnad -");
Serial.println((Long) skillnad);
Serial.Print ("inom tröskel? - ");
IF(Difference > timeout)
{
Serial.println("yes");
}
annat
{
Serial.println("no");
}
Serial.Print ("föregående växel =");
Serial.println(current_gear);
om (current_gear > 0 & & ((millis()-last_change_time)>timeout))
{
int tempGear = current_gear - 1;
om (tempGear! = 0)
{
current_gear--;
last_change_time = millis();
}
}
Serial.Print ("nya redskap =");
Serial.println(current_gear);
Delay(150);
}

Där har du det, en switch debouncer som fungerar i alla fall. Denna handledning har anpassats speciellt för Arduino! Njut av!!

Relaterade Ämnen

Arduino Push Notifieringar för dörrklockan, inbrottslarm, rök larm etc

IoT anmälningar från din dörrklocka, inbrottslarm, rök larm etc använder en Arduino Uno och en Ethernet Shield.Fullständig information på min hemsida härOm Arduino Push varningsrutanAnvänder en Arduino Uno och Ethernet Shield baserat på Wiznet W5100...

Arduino audio switch

Inuti min skydd har jag en 5.1 Bose surround system och ett par högtalare Yamaha NS - 10M Studio. Jag behövde för att driva dem med bara en förstärkare, så jag behövde en anpassade ljud växla mellan högtalare och LFE alltför. Jag har hittat en enkel...

Arduino Reed Switch

Hej alla!Reed enheter är elektroniska och elektromekaniska komponenter som fungerar med hjälp av teknik för reed kontakter, insåg för första gången av sätta en klocka på.Kontakta växeln Reed är en lamina (normalt öppen) som stänger i närvaro av ett m...

Arduino - klappa SWITCH - SOUND CONTROL SWITCH

Hej världen! Idag gjorde jag en klappa med en DIY ljudkontroll modul. Jag lödde ljudkontroll modul för några månader sedan, och idag bestämde jag mig att kolla om det fungerar, och det gör. Jag hade svårt att få ett annat värde än 0 och sedan hittat...

Arduino - Tilt Switch, koppla på ett relä med KY-020

Hej världen! Jag gjorde ett annat exempel. Idag för KY-020.Vi kommer helt enkelt att slå på ett relä till vända lampan på och av.Följ nästa steg för den schematiska kod & reservdelslista.Steg 1: Schematisk kod & reservdelslista.Delar till listan.A...

Arduino energi Switch

En dag kanske du har gjort ett lysande smart objekt i ditt hus. Till exempel Persienner automatiska. Nu du dessa persienner att stängas automatiskt när några andra hårdvara, som TV: n slås på.Med detta Instructable gör att du kan skapa en energi moni...

Arduino Light Switch

I den här guiden kommer vi att bygga en mycket enkel strömbrytare med en Arduino Uno, ett fotomotstånd och lite kod för att aktivera en LED och inaktivera baserat på belysningen i rummet. Så låt oss komma till saken!Steg 1: Vad vi behöverHär är en li...

LED Dawn / Sunrise väckarklocka, nattlampa & säkerhet ljus - Arduino kompatibel

som nätterna förlängs successivt under hösten 2011, jag upptäckt glädjen med Arduino och trodde att det skulle vara ett bra sätt att genomföra något som jag har velat ha en lång stund - ett skonsamt sätt att vakna upp på en vintermorgon. Tyvärr, det...

Sable 2015 CNC + Arduino + GRBL = LunchBox CNC

Detta är min 2: a Instructable och min 2nd Arduino powered CNC, den här gången jag upp svårighetsgraden genom att besluta att göra en själv innehöll CNC enhet av design min egen elektronik kapslingar och placeringar.Stegen i detta Instructable är mer...

Arduino frekvens synthesizer med 160MHz Si5351

Detta Instructable beskriver konstruktion och drift av en fristående frekvens synt lämpliga för användning som en signalgenerator, eller för användning som den lokala oscillatorn i ett Amatörmässigt musikband sändare eller mottagare.Min prototyp bygg...

Introduktion till jag / O i ARDUINO (tryckknapp)

Datum: 3/11/2016Titel: Arduino ingångar (Digital)Svårighetsgrad: lättHej alla. Jag är här att tala om digitala ingångar i allmänhet, typer av digitala tryckknappar och digital tryckknapp programmering i arduino. En tryckknapp är en digital enhet som...

Hur man gör den enklaste bakbord Arduino Uno... NÅGONSIN! -Breduino! (& Hur ladda upp skisser rakt till det!) With Additional Hardware Options - UPDATED - JULY 2013

Steg 1: Avsnitt 1 - byggnad reglerade 5 volts strömkälla! Okay now before i start, something about my notes for my step-by-step PICTURE instructables that i Love to create:"Jag brukade märka alla mina bilder i min instructables men det verkar instruc...

Små Triac Switch

För att växla några strålkastare av min Arduino, var liten switch kretsar jag byggt runt en 39mf22 bara inte man nog att hantera den nuvarande behövs, så jag bestämde mig att bygga en switch med diskreta komponenter runt en TRIAC.Nu dessa kretsar är...

Prata med en Arduino med en iOS-enhet med Bluetooth lågenergi

detta är en enkel afternoon projekt att få din iOS enhet talar med röda bär Lab Bluetooth låg energi sköld.För detta projekt behöver duen Arduino (vi använder Leonardo)en iPhone 4s, 5, iPad 3, 4, mini, eller en iPod Touch 5: e generationen.Bluetooth...

Hur man gör den enklaste bakbord Arduino-kompatibelt Sanguino-motsvarande... NÅGONSIN! & Hur ladda upp skisser rakt till det!

Okej så titeln är faktiskt lite av en munfull lol!Ive behöva röra runt med en önskan om mer Input/Output stift än Arduino UNO och numera UNO använder en Atmega328mikrokontroller, & dess begränsade till bara 20 Input/Output pins :-(Bra om du har strul...

Flight Simulator med Arduino och Python

kontrollera alternativet Flight Simulator i Google Earth med hjälp av en Arduino och Accelerometer.Nästan flyga runt i världen; luta accelerometern framåt, bakåt, vänster och höger att styra planets Pitching och bank.Mål:* Lär dig att skicka seriella...

Stoppur & varvtid med Arduino Nano och Maxi 7219 LED Display (8 gräva X 7 Seg)

Hej alla,Detta är en mycket lätt projekt göras åt ett stoppur med Arduino Nano och Maxi 7219 LED display (8 siffror x 7 segment).Stoppuret använda denna typ av display är ny och jag kunde inte hitta något liknande.De första 4 siffrorna i displayen vi...

Switch drivs Cool(er) för 2

detta blir min första Instructable, snubblade jag över denna hemsida ca en vecka sedan eller så, och det blev genast ett beroende. Jag var nästan överväldiga eftersom jag inte kunde bestämma vilka Instructable jag ville arbeta på första; Jag hade spa...

Ansluta arduino med ethernet

Arduino Ethernet Shield kan en Arduino styrelsen att ansluta till internet. Den är baserad på Wiznet W5100 ethernet chip (datablad).Wiznet W5100 ger en nätverk (IP) stack kan både TCP och UDP. Den stöder upp till fyra samtidiga socketanslutningar. An...