En knapp med två funktioner.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Pandy
Inlägg: 17
Blev medlem: 10 maj 2012, 17:31:08

En knapp med två funktioner.

Inlägg av Pandy »

Hej

Vill få en knapp i ett arduino system att få två "egenskaper".
Egenskap ett är att om du trycker in knappen en kort stund så ska en sak hända.
Egenskap två är att om du trycker ner knappen en längre tid ca 3s så ska knappen göra en annan ska.

Hur löser jag det?

MvH Andreas
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: En knapp med två funktioner.

Inlägg av sodjan »

Du får ta tid hur länge knappen är nedtryckt.
Manneh
Inlägg: 151
Blev medlem: 15 juli 2012, 22:52:44
Ort: Sundsvall

Re: En knapp med två funktioner.

Inlägg av Manneh »

http://www.mathertel.de/Arduino/OneButtonLibrary.aspx

Googlade "1 button 2 functions arduino" Första träffen.
X-IL
EF Sponsor
Inlägg: 8485
Blev medlem: 3 december 2008, 07:47:20
Ort: Hallstahammar

Re: En knapp med två funktioner.

Inlägg av X-IL »

Oj, har aldrig hållit på med Arduino men generellt talat:

Om knapp blivit intryckt, spara starttid s
do
vila kort tid
Om knapp ínte intryckt gå till kort tryck
Kolla om tiden uppnåtts, isf gå till långt tryck.
loop
´
Detta är grovt förenklat men andemeningen borde gå fram

EDIT: Det smarta sättet är ju annars om man har interrupt på både nedtryck och uppsläpp, och mäter tiden.
Pandy
Inlägg: 17
Blev medlem: 10 maj 2012, 17:31:08

Re: En knapp med två funktioner.

Inlägg av Pandy »

Får test.

OT ni är väldigt snabba på att svara här.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: En knapp med två funktioner.

Inlägg av jesse »

Jag hade antagligen testat knappen 25 eller 50 gånger per sekund och startat en räknare när den trycks ner första gången.
Räknaren räknar upp varje gång knappen kollas och den fortfarande är intryckt.
När knappen släpps upp, lagras räknarens värde, och man "analyserar" tiden.. lång eller kort och utför funktion därefter.

Det kommer att upplevas lite "segt" att funktionen för "kort" knapptryck inte utförs förrän knappen släppts upp igen. Det får man nog leva med.
En förbättring kan vara att en lysdiod tänds eller ett litet ljud avges när tiden passerat ett visst värde - på så vis vet användaren att gränsen är nådd och att "långt tryck"-funktionen kommer att utföras. Sådan feedback upplevs ofta väldigt positivt (annars håller man ner knappen i "blindo" och kan inte vara säker på hur länge man måste hålla ner). Alternativt så utförs "lång-tryck-funktionen" alltid t.ex. 2 sekunder efter att knappen tryckts ner, även om man skulle hålla ner den längre tid.
ElectricNooB
Inlägg: 600
Blev medlem: 26 juli 2011, 20:58:06

Re: En knapp med två funktioner.

Inlägg av ElectricNooB »

Interrupts och en timer skulle väl vara en rätt effektiv lösning? Dvs. när knappen trycks ned så får du ett ”interrupt” och kan då starta timern. När knappen sedan släppts så kollar du timern´s värde och kör en if/else och bingo du har din knapp. Det går givetvis att göra mycket enklare endast i ”kod” men då kan du inte göra så mycket annat samtidigt...

Gute nacht :sleepy:
Jonas L
Inlägg: 432
Blev medlem: 14 juli 2009, 14:28:41
Ort: Karlshamn

Re: En knapp med två funktioner.

Inlägg av Jonas L »

Flankinterrups är ett bra sätt att krångla till detta! Tänk på att få till avstudsningen etc. Korta pulser kan få spännande effekter beroende på CPUfamilj (om både stigande och fallande flank har inträffat innan interruptet körs får man antingen flankerna i fel ordning eller så försvinner den ena).
ElectricNooB
Inlägg: 600
Blev medlem: 26 juli 2011, 20:58:06

Re: En knapp med två funktioner.

Inlägg av ElectricNooB »

Aha, tack för den upplysningen! :)
Användarvisningsbild
Icecap
Inlägg: 26651
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: En knapp med två funktioner.

Inlägg av Icecap »

Vad omständligt! I nästan alla projekt har man ju en interrupt som kör, det kan vara en AD-omvandlare, en timer eller liknande. Då är det bara att läsa pinnen som brytaren sitter på och räkna hur många gångar den har blivit "träffat" i ett sammanhang.

Om man t.ex. sätter en gräns:
#define MAX_HIT 100

I en lämplig ISR skriver man då:

Kod: Markera allt

WORD Button_Counter;
BYTE Long_Push, Short_Push;
if(Port_Pinne_Med_Brytaren)
  {
  if(Button_Counter < MAX_HIT) Button_Counter++;
  else if(Button_Counter == MAX_HIT)
    {
    Long_Push = true;
    Button_Counter++;
    }
  }
else
  {
  if(Button_Counter > 1)
    { // OK, knappen har varit nertryckt o det är inte skräp
    if(Button_Counter < MAX_HIT) Short_Push = true;
    }
  Button_Counter = 0;
  }
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: En knapp med två funktioner.

Inlägg av jesse »

Ja, det var så jag menade, även om mitt inlägg kanske inte var så bra skrivet.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: En knapp med två funktioner.

Inlägg av Krille Krokodil »

Skriv svar