Arduino knappen handledning (4 / 6 steg)

Steg 4: Skilja kort från lång pressar



Puls längd

Många enheter med få styr (t.ex. digitala klockor) pack flera funktioner per knapp.

Det är mycket användbart, spara dyrbara volym, men måste användas klokt, annars enheten kan bli intuitiv att använda.

Skilja kort från lång pressar handlar om att mäta puls längd.

Händelsen är inte längre som släpps ut på att trycka på knappen, utan på att släppa den. Detta kan påverka känslan av lyhördhet. Men tills icke-kausala enheter kan köpas, vi kan inte förutsäga varaktighet och måste därför fortsätta så.

Detta är en kombinerad händelse och statens hantering: vi upptäcka statusändring (en händelse) och längden som den resulterande staten är långvarig.

Programmering

Så måste vi införa en annan global variabel (button_pressed_counter). Observera också att händelsen har inte längre ett booleskt värde (händelse presentera eller inte, som i föregående steg), men tre stater. De definieras av en uppräkning. (Jag hade bekymmer definiera en uppräkningstyp; Arduino-specifikt problem? Så använde jag enum för att definiera konstanter).

Den första bilden av detta steg visar en lång tryckning och en kort tryck timing, med ett långt knapptryck tröskelvärde på 3 provtagningsperioder (som är alldeles för kort, men anpassade till ritningen).

Den andra bilden visar den seriella produktionen för ett långt tryck följt av två korta pressar.

Pro/nackdelar

Fint förbättrar funktionen knappen (om används klokt, att försäkra god användbarhet). Men koden börjar att växa, och få förorenad av globala variabler... Nästa steg visar den OO varianten, gjord för skalning.

Koden

––––––––––8<––––––––––

#define BUTTON_PIN 2 / / knappen

#define LONGPRESS_LEN 25 / / Min antal öglor för ett långt knapptryck
#define dröjsmål 20 / / fördröjning per slinga i ms

fasttexttypen {EV_NONE = 0, EV_SHORTPRESS, EV_LONGPRESS};

booleska button_was_pressed; tidigare tillstånd
int button_pressed_counter; Tryck på rinnande varaktighet

void setup()
{
pinMode (BUTTON_PIN, indata);
digitalWrite (BUTTON_PIN, hög); pull-up
Serial.BEGIN(9600);
button_was_pressed = false;
button_pressed_counter = 0;
}

int handle_button()
{
int händelse;
int button_now_pressed =! digitalRead(BUTTON_PIN); PIN låg -> tryckte

om (! button_now_pressed & & button_was_pressed) {
om (button_pressed_counter < LONGPRESS_LEN)
Event = EV_SHORTPRESS;
annat
Event = EV_LONGPRESS;
}
annat
Event = EV_NONE;

om (button_now_pressed)
++ button_pressed_counter;
annat
button_pressed_counter = 0;

button_was_pressed = button_now_pressed;
returnera händelse;
}

void loop()
{
hantera knappen
booleska event = handle_button();

göra andra saker
Växla (händelse) {
fall EV_NONE:
Serial.Print(".");
bryta;
fall EV_SHORTPRESS:
Serial.Print("S");
bryta;
fall EV_LONGPRESS:
Serial.Print("L");
bryta;
}

Lägg till ny rad ibland
statisk int counter = 0;
om ((++ counter & 0x3f) == 0)
Serial.println();

Delay(delay);
}

––––––––––>8––––––––––

Se Steg
Relaterade Ämnen

Arduino Robot handledning

Jag var forskande Instructable databasen för en handledning för officiella Arduino Robot, men jag kunde inte hitta en! Så arg jag denna handledning för att hjälpa andra som en smula behövde lite hjälp med sina nya Arduino Robot.Steg 1: Konfigurera di...

Arduino Basic handledning

Hej alla. Jag är Zubayer Tahmid från Bangladesh,som representerar Rajuk Uttara modell College.Idag skriver jag en mycket grundläggande handledning på Arduino. Jag har sökt en hel del i olika webbplatser surfa via internet, men jag fick inte någon tut...

Arduino-knappen aktiveras behandla Dispenser

för min digitala multimedier klass slutlig, jag skapade en behandla dispenser som aktiveras genom att dra en kedja, som startar en servomotor som snurrar ett hjul att avstå från fester till min på afrikansk grå papegojor.Steg 1: Samla materialMateria...

Begära Uber Rider med en Arduino knappen

HejOm du använder uber väldigt lik mig gör så detta instructable livet bättre. Jag har bara tre pickup platser: hem, arbete och den lokala fablab adressen: D.Det är därför jag gjorde denna knapp. Jag har en hemma och en annan på jobbet, innan de lämn...

Arduino - knappen exempel med KY-004-DÖRRKLOCKA

Hej världen! Idag gjorde jag ett exempel för modulen KY-004-knappen.Kan säga att det är en mycket irriterande Ringklocka. :) Men det fungerar. Du kan ange olika toner.Följ nästa steg för Schematisk kod & reservdelslista.Steg 1: Schematisk kod & de...

Arduino graf handledning

Denna handledning gjordes för att hjälpa dig att läsa analoga värden från arduino i ett diagram.Ibland, för att bättre förstå vad Arduino läser, skulle kunna en graf verkligen hjälpa underlätta processen.Samtidigt programmering Arduino styrelser, var...

Arduino-knappen blinkar

detta är min första instructable och jag hoppas det fungerar för er alla!Jag kommer att lära er hur man gör en krets så när knappen trycks lampan tänds!Saker som behövs9 connector kablar1 knapp1 Arduino1 10 k ohm motstånd1 lysdiod (ditt val av färg)1...

Kontrollera din lysdioder med din TV-fjärrkontroll?! || Arduino IR-handledning

I detta projekt kommer jag visa dig hur jag repurposed värdelös knapparna på min TV remote att kontrollera lysdioderna bakom min TV. Du kan också använda denna teknik för att styra alla möjliga saker med lite kodredigering. Jag kommer även prata lite...

Arduino Bangla handledning 3 - Led blinkar

অমি অসা করছি ভিডিয় টিউটোরিয়াল টা দেখার পরে অপনাদের কোন সমস্যা থাকবে না. যদি আপনারা কোন সমস্যার সম্মুখীন হন তাহলে YouTube ভিডিওর নিচে kommentar করুন এবং আমি যত তাড়াতাড়ি সম্ভব আপনাদের সাহায্য করবাে.পরবর্তী ভিডিও পেতে YouTube kanal abonnera করুন htt...

Arduino-drivna A-10 stick grepp remote w/Emergency Party knappen!

jag kom över Plama2002's "Emergency Party Button" bygga ett tag tillbaka och ville ha något liknande för min bar. Jag hade också en gammal USAF B-8 stick grepp från en A-10A som jag plockade upp i mitt tidigare liv. Jag tänkte att istället för a...

Hur du använder MQ2 Gas Sensor - Arduino handledning

MQ serien av gas sensorer Använd en liten värmare inne med en elektrokemisk sensor. De är känsliga för olika gaser och används inomhus i rumstemperatur. Resultatet är en analog signal och kan läsas med en analog ingång för Arduino.MQ-2 Gas sensoren m...

Hur ska blinka en Led - Arduino handledning

LED (Light - emitting diode) kan hittas på många collors och storlekar.Detta exempel visar den enklaste sak du kan göra med en Arduino att se fysiska produktionen: det blinkar en LED!I denna tutorial lär du också hur du använder funktionerna pinMode(...

Hur man använder en sju Segment Display - Arduino handledning

En sju Segment Display, är en form av elektronisk skärm enhet för att Visa decimala siffror som är ett alternativ till de mer komplexa matrisskrivare visar.Sju segmenterar skärmar används i digitala klockor, elektroniska elmätare, grundläggande minir...

Hur man använder en SKIFT Register - Arduino handledning

I denna tutorial får du lära dig att använda ett skift register (eller följetong till paralled controller). Det SKIFT registret kommer att ge till din Arduino en ytterligare 8 digitala utgångar, med endast 3 pins på brädanI den här guiden kommer du ö...

Hur man använder ett fotomotstånd (eller fotocell) - Arduino handledning

Ett fotomotstånd eller fotocell är en ljus-kontrollerad variabel resistor. Motståndet av ett fotomotstånd minskar med ökande infallande ljus intensitet. Ett fotomotstånd kan tillämpas i ljuskänsliga detektor kretsar och ljus - och mörk-aktiverat växl...

Hur du använder DS18B20 temperatursensor - Arduino handledning

I denna tutorial får du lära dig att använda DS18B20 temp sensor med Arduino.Temperaturen kommer att tryckas på serial bildskärmen av Codebender eller Arduino IDE.Presentationsvideo:Innan vi börjar låt oss se mer information om denna sensor.Steg 1: O...

Hur du använder Adafruit Pro prydnadssak styrelsen - Arduino handledning

I den här guiden lär du dig hur du använder Adafruit Pro prydnadssak styrelsen och hur du enkelt kan programmera det med Codebender!Denna lilla styrelse använder ATmega328p mikrokontroller, det är som en Arduino Pro Mini men med fler pins och micro i...

Hur du använder TMP36 temp sensorn - Arduino handledning

TMP35/TMP36/TMP37 är låg spänning, precision Celsius temperatursensorer. De ger en Matningsspänning som är linjärt proportionell mot Celsius (Celsius) temperatur. TMP35 / TMP36/TMP37 inte kräver någon extern kalibrering ge typisk noggrannhet ±1 ° C v...

Hur man använder den L298 Motor drivrutinsmodulen - Arduino handledning

Dubbla dubbelriktad motor drivrutinen är baserad på den mycket populära L298 dubbla H-Bridge Motor Driver IC. Denna modul kan du enkelt och självständigt styra två motorer med upp till 2A i båda riktningarna.Det är idealiskt för robotiserade applikat...