Sida 1 av 1

En knapp med två funktioner.

Postat: 28 september 2012, 22:46:58
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

Re: En knapp med två funktioner.

Postat: 28 september 2012, 22:48:47
av sodjan
Du får ta tid hur länge knappen är nedtryckt.

Re: En knapp med två funktioner.

Postat: 28 september 2012, 22:51:45
av Manneh
http://www.mathertel.de/Arduino/OneButtonLibrary.aspx

Googlade "1 button 2 functions arduino" Första träffen.

Re: En knapp med två funktioner.

Postat: 28 september 2012, 22:53:38
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.

Re: En knapp med två funktioner.

Postat: 28 september 2012, 22:55:39
av Pandy
Får test.

OT ni är väldigt snabba på att svara här.

Re: En knapp med två funktioner.

Postat: 29 september 2012, 00:51:09
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.

Re: En knapp med två funktioner.

Postat: 29 september 2012, 01:51:08
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:

Re: En knapp med två funktioner.

Postat: 29 september 2012, 09:46:33
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).

Re: En knapp med två funktioner.

Postat: 29 september 2012, 10:58:46
av ElectricNooB
Aha, tack för den upplysningen! :)

Re: En knapp med två funktioner.

Postat: 29 september 2012, 13:06:40
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;
  }

Re: En knapp med två funktioner.

Postat: 29 september 2012, 13:09:44
av jesse
Ja, det var så jag menade, även om mitt inlägg kanske inte var så bra skrivet.

Re: En knapp med två funktioner.

Postat: 29 september 2012, 13:20:38
av Krille Krokodil