|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1960
|
[C] Algoritmo gestione Single click/Double click/Right click
Ciao a tutti, avrei bisogno di un consulto su di un algoritmo scritto per un microcontrollore (ma tanto è c, quindi la destinazione conta poco!
Vi chiederei un parere su quanto scritto e se trovate errori e me li riportaste..ve ne sarei grato! Codice:
//variabili
// tasti=variabile che tiene traccia dello stato in cui mi trovo
// tempo=semplice contatore
// hid_report_in[0]=il tasto premuto
// action_sw=indica se il tasto è premuto o meno (NEGATO!)
switch(tasti){
case 0:
//stato iniziale
mLED_1_Toggle();
hid_report_in[0]=0;
tempo=0;
if(!action_sw){
tasti=1;
tempo=0;
}
break;
case 1:
//primo click
hid_report_in[0]=0;
tempo++;
if(!action_sw){
if(tempo>=floatData[SOGLIA_CLICK]){
tempo=0;
tasti=2;
}
}
else{
tempo=0;
tasti=3;
}
break;
case 2:
// click singolo prolungato
if(!action_sw)
hid_report_in[0]=1;
else{
hid_report_in[0]=0;
tasti=0;
}
break;
case 3:
// stato intermedio tra il primo click e il secondo
tempo++;
hid_report_in[0]=0;
if(action_sw){
if(tempo>floatData[SOGLIA_DCLICK]){
// click singolo
tempo=0;
hid_report_in[0]=1;
tasti=0;
}
}
else{
tempo=0;
tasti=4;
}
break;
case 4:
tempo++;
hid_report_in[0]=0;
if(!action_sw){
if(tempo>floatData[SOGLIA_RCLICK])
tasti=5;
}
else{
// doppio click
hid_report_in[0]=1;
tasti=0;
}
break;
case 5:
// click destro
if(!action_sw)
hid_report_in[0]=2;
else{
hid_report_in[0]=0;
tasti=0;
}
}
In pratica si comporta così: finchè NON è premuto un tasto->aspetta;(stato 0) se si preme un tasto, si cambia stato e si controlla cosa vuol fare l'utente;(stato 1) se il tasto è premuto per più di SOGLIA_CLICK->click sinistro prolungato(stato 2, e al rilascio, stato 0) altrimenti verifica se si vuole fare un click veloce, doppio click o click destro (stato 3) se il tasto è rilasciato per più di SOGLIA_DCLICK->click singolo breve (e poi stato 0); altrimenti se si fa click, si verifica se si vuole fare doppio click o click destro (stato 4) Se il tasto viene rilasciato prima di SOGLIA_RCLICK->doppio click (quindi si invia un semplice click, e poi si va a stato 0); altrimenti -> click destro (stato 5) Resto in attesa di vostri pareri, e grazie per dargli un'occhiata!
__________________
My PC: Case: BeQuiet! Pure Base 500 + BeQuiet! Pure Wings 2 140mm & Noctua NF-A14 PWM front intake + BeQuiet! Pure Wings 2 140mm rear exhaust - CPU: AMD Ryzen7 5800X3D (DVID: -0.1V) - CPU Cooler: Noctua NH-D15 - MB: MSI X570 Gaming Edge WiFi - PSU: Corsair RM850 full modular - GPU: Gigabyte 2070 Super Gaming OC 3X (fallata....! Ultima modifica di TRF83 : 01-10-2010 alle 14:16. Motivo: linguaggio errato! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:32.



















