У меня есть переменное «значение», содержащее последнее сообщение, полученное от последовательного порта. У меня есть многострочный текстовый блок «txtOutput», который отображает все сообщения, полученные из последовательного интерфейса. У меня также есть оператор if, который фильтрует определенное сообщение, чтобы сделать что-то, что я разместил под txtOutput_TextChanged, чтобы обновлять число в textBox6 каждый раз, когда появляется новое сообщение.Фильтровать двойные сообщения от серийного
int turns = 0;
private void txtOutput_TextChanged(object sender, EventArgs e)
{
if (value == 1)
{
textBox6.text = turns.ToString();
turns ++;
}}
Я получаю сообщение «1» от последовательного порта, подключенного к микропроцессору, когда микровыключатель щелкнул. Микровыключатель контролирует вращение двигателя, который вращается очень медленно.
Моя цель состоит в том, чтобы иметь правильную систему подсчета, прежде чем использовать ее для дальнейшей реализации счетчика RPM. Проблема, с которой я столкнулся сейчас, заключается в том, что часто микропереключатель удерживается слишком долго (от 50 до 100 микросекунд), и я получаю несколько последовательных сообщений (2 или 3) из серийного номера, и я заканчиваю подсчет большего числа оборотов, чем реальных. Я обеспечил некоторую задержку на стороне микроконтроллера, но я не могу много играть с ним, иначе на разных скоростях я получаю проблемы. Есть ли способ рассмотреть только одно сообщение, полученное из последовательного, когда и если они идут последовательно одного и того же типа внутри, скажем, 1 секунда?
Я был бы признателен за некоторые идеи и образцы отрывков. Спасибо
Ну ..... я бы не ставил вопрос о данном разделе, если я думаю, что есть больше возможностей на языке микропроцессора для решения проблема. Я думаю, что у C# гораздо больше возможностей и ресурсов для управления определенной функцией, чтобы избежать описанной проблемы. – FeliceM
Максимальная скорость двигателя составляет 12 оборотов в минуту, а минимальная - 0,5 в минуту. Я планирую запустить таймер на 1 секунду, когда появится новое сообщение и сохранит его в массиве. Затем через одну секунду возьмите последнее сообщение массива и рассмотрите его для плюс 1 оборот, сбросьте массив и дождитесь следующего. Таким образом, я должен иметь возможность фильтровать последовательные сообщения, вызванные длительным отключением коммутатора. Лучшая идея? – FeliceM
Спасибо, я попытаюсь реализовать что-то вокруг кода, который вы предложили.Выглядит неплохо и может помочь мне также решить другие проблемы, которые я испытываю с ложными сообщениями из-за шума во время переходных процессов. – FeliceM