Arduino knappen handledning (5 / 6 steg)

Steg 5: Lägga till knappar, och kommer OO



Frågor trappa upp

Som vi såg i föregående steg, blir det svårt att skala upp. Det finns globala tillståndsvariabler, som kallas av vissa funktioner. Tänk dig att lägga till en 2: a knapp: mardrömmen börjar; inte tala om en 3: e knapp...

Programmering: Kommer OO (objektorienterad)

Arduino använder bearbetning språk byggts på C++, så varför inte använda några OO funktioner?

Vi måste packa dessa globala variabler i strukturer som vi kan skapa på kommer. Sådana strukturer, med tillhörande hantering funktioner kallas klasser och metoder i världens OO. En klass är bara en beskrivning av objektet, medan den effektiva minne som har allokerats för varje objekt kallas instans.

Den första bilden av detta steg visar att vi har lagt till en 2: a knapp. Den andra bilden visar nu traditionella långa/korta pressarna, arbetar självständigt mycket fint. 2. knappen har förresten, en längre long-press tröskel.

Pro/nackdelar

Denna kod blir mer komplex, vilket är normalt eftersom, när du skalförändrar, komplexiteten ökar genom ett betydande steg. Den goda nyheten är att den sedan kan stödja ett antal ytterligare knappar på komplexiteten ökar.

Bearbetning anger vissa begränsningar (t.ex. det finns ingen skapas dynamiskt: nya och ta bort operatörerna är inte tillgängliga). Som inte är dålig, eftersom vi inte vill gå vilse i några av de särskilt blodiga sidorna av C++, som (förmodligen) inte behövs i små inbyggda system som Arduino.

Säker samma kunde vara gjort i ren C, så om du behov/föredrar en C genomförande, bara be mig.

Koden

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

#define BUTTON1_PIN 2 / / knappen 1
#define BUTTON2_PIN 3 / / knappen 2

#define DEFAULT_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};

//////////////////////////////////////////////////////////////////////////////
Klassdefinitionen

klass ButtonHandler {
offentlig:
Konstruktören
ButtonHandler (int pin, int longpress_len = DEFAULT_LONGPRESS_LEN);

Initiering gjort efter konstruktion, att tillåta statiska instanser
void init();

Handler, kallas i loop()
int handle();

skyddad:
booleska was_pressed; tidigare tillstånd
int pressed_counter; Tryck på rinnande varaktighet
CONST int pin; PIN-kod som knapp är ansluten
CONST int longpress_len; longpress varaktighet
};

ButtonHandler::ButtonHandler (int p, int lp)
: pin(p), longpress_len(lp)
{
}

void ButtonHandler::init()
{
pinMode (pin, mata);
digitalWrite (pin, hög); pull-up
was_pressed = false;
pressed_counter = 0;
}

int ButtonHandler::handle()
{
int händelse;
int now_pressed =! digitalRead(pin);

om (! now_pressed & & was_pressed) {
handtag release event
om (pressed_counter < longpress_len)
Event = EV_SHORTPRESS;
annat
Event = EV_LONGPRESS;
}
annat
Event = EV_NONE;

uppdatera press kör längd
om (now_pressed)
++ pressed_counter;
annat
pressed_counter = 0;

kom ihåg stat, och vi är klar
was_pressed = now_pressed;
returnera händelse;
}

//////////////////////////////////////////////////////////////////////////////

Instansiera knappen objekt
ButtonHandler button1(BUTTON1_PIN);
ButtonHandler button2 (BUTTON2_PIN, DEFAULT_LONGPRESS_LEN * 2);

void setup()
{
Serial.BEGIN(9600);

init knappar stift; Jag antar att det är bäst att göra här
button1.init();
button2.init();
}

void print_event (const char * button_name, int händelse)
{
om (händelse)
Serial.Print(button_name);
Serial.Print(".SL"[Event]);
}

void loop()
{
hantera knappen
int event1 = button1.handle();
int event2 = button2.handle();

göra andra saker
print_event ("1", event1);
print_event ("2", event2).

Lägg till ny rad ibland
statisk int counter = 0;
om ((++ counter & 0x1f) == 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...