En knapp med två funktioner.
En knapp med två funktioner.
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
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.
http://www.mathertel.de/Arduino/OneButtonLibrary.aspx
Googlade "1 button 2 functions arduino" Första träffen.
Googlade "1 button 2 functions arduino" Första träffen.
Re: En knapp med två funktioner.
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.
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.
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.
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.
-
- Inlägg: 600
- Blev medlem: 26 juli 2011, 20:58:06
Re: En knapp med två funktioner.
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
Gute nacht

Re: En knapp med två funktioner.
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).
-
- Inlägg: 600
- Blev medlem: 26 juli 2011, 20:58:06
Re: En knapp med två funktioner.
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å:
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.
Ja, det var så jag menade, även om mitt inlägg kanske inte var så bra skrivet.
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: En knapp med två funktioner.
Här är ett kodexempel: http://elektronikforumet.com/forum/view ... 48#p862448