none
Rimuovere ritardo alla pressione di un tasto in comunicazione seriale RRS feed

  • Domanda

  • Buongiorno a tutti!

    Sono un neofita di C# e al momento sto realizzando un applicazione in windows form per il controllo di 2 motori servo tramite la pressione di un tasto da tastiera. 

    La comunicazione avviene tramite porta seriale e fin qui tutto ok. Il problema sorge nel controllo dei motori.

    Quando premo il tasto per muovere il motore nella direzione desiderata e lo mantengo premuto, il servo inizialmente ha un piccolo input poi dopo circa un secondo inizia ad girare in modo continuo

    Per usare l'intercettazione dei tasti uso questo codice:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
     {
                if (keyData == Keys.Left)
                {
                    SerialPort01.Write("L");
                }
                if (keyData == Keys.Right)
                {
                    SerialPort01.Write("R");
                }
                if (keyData == Keys.Up)
                {
                    SerialPort01.Write("U");
                }
                if (keyData == Keys.Down)
                {
                    SerialPort01.Write("D");
                }
                return base.ProcessCmdKey(ref msg, keyData);
     }

    Mi sapete aiutare? grazie

    mercoledì 16 ottobre 2019 10:01

Risposte

  • Buongiorno Marcello,

    Innanzitutto, se Stopwatch.IsHighResolution è true, Stopwatch utilizza QueryPerformanceCounter e può misurare intervalli di tempo con una risoluzione <1 ms.

    In secondo luogo, quando si tiene premuto il tasto spazio, Windows inizia a inviare ripetutamente messaggi WM_KEYDOWN e il cronometro misurerà l'intervallo tra questi messaggi. Questo intervallo è determinato dalla chiave di registro      HKCU\Control Panel\Keyboard\KeyboardSpeed.

    Il valore predefinito è 31, ovvero la velocità di ripetizione più rapida, ovvero circa 30 caratteri al secondo. Ecco perché avresti misurato intervalli di circa 1000/30 = 33 ms.

    Se lo si imposta su 0, ovvero sulla frequenza di ripetizione più lenta, ovvero circa 2 caratteri al secondo, è necessario misurare circa. Intervalli di 500 ms (non dimenticare di riavviare Windows dopo aver modificato KeyboardSpeed!).
    La velocità di un tasto premuto dipende dalla configurazione di Windows della frequenza di ripetizione del tasto. Tastiere / hardware diversi avranno anche una diversa frequenza di ritardo. Ad esempio, le tastiere cordless hanno un ritardo maggiore per ogni pressione di un tasto rispetto a una USB. Quindi ci sono tastiere per laptop (integrate), PS / 2, bluetooth, ritardi dell'adattatore (ad es. Da PS / 2 a USB), ecc.


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    mercoledì 16 ottobre 2019 10:41
    Moderatore