Программирование счетчика таймера в C# - PullRequest
0 голосов
/ 17 апреля 2020

Я занимаюсь разработкой приложения C#, которое должно получать данные из программного обеспечения Neurofeedback и передавать их в блок Le go NXT. Каждый раз, когда в программном обеспечении Neurofeedback достигается определенная цель, программное обеспечение передает через сокет TCP приложению C# значение 1, а если цель не достигнута, то отправляет от 0 до C#. Затем приложение C# отправляет информацию на мой автомобиль NXT (используя связь Bluetooth): если NXT получает 1, он должен двигаться; если он получает 0, то он должен немедленно остановиться.

Поскольку иногда эти значения изменяются в течение очень короткого периода времени, NXT не может ответить так быстро и точно (перемещая или останавливая свое движение) , Например: когда он изменяется от 1 до 0, а затем снова до 1, если период диапазона между 1 слишком мал, то создается впечатление, что NXT всегда движется.

Чтобы решить В этой проблеме одним из решений было бы запрограммировать «счетчик таймера»: в основном, для перемещения NXT, цель (в программном обеспечении Neurofeedback) должна соблюдаться в течение не менее 1 секунды (то есть, без прерываний - значений). меняется от 1 до 0). Другими словами, если приложение C# получает значение 1 без изменения в течение как минимум 1 секунды (или более), то оно должно приказать NXT окончательно двигаться (и продолжать двигаться, пока C# не получает значение 0). ).

Я знаю, что на формах Windows есть функция таймера, но мне не удалось запрограммировать "счетчик" из нее. Кроме того, я попытался провести некоторое исследование, но начинаю верить, что, возможно, «счетчик таймера» не лучший способ описать то, что я ищу ...

Примечание: внутри моего кирпича NXT нет кода. По сути, приложение C# (через указанную библиотеку c) передает все команды перемещения роботу NXT.

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Сохраняйте переменную времени. Каждый раз, когда отправляется 0, установите его значение на текущее время.

Запуск программы - переменная времени установлена ​​на текущее время

Каждый раз, когда получен ноль, установите переменную времени на текущее время. Отправляйте остановку движению роботу NXT.

каждый раз, когда принимается сообщение, проверяйте, превышает ли разница времени больше 1 сек c между текущим временем и переменным временем. Если это так, то отправьте команду на переход к роботу NXT.

Я бы порекомендовал иметь значение, которое можно изменить в приложении, чтобы можно было настроить время.

Сохраняйте переменную, если робот движется, тогда вам нужно только отправить остановку и начинайте движение к роботу, когда он должен переключаться между движением и отсутствием движения.

Какое устройство Neurofeedback вы используете?

0 голосов
/ 17 апреля 2020

Как насчет того, чтобы сохранить последние N команд и посмотреть, был ли какой-либо 0 в диапазоне Y, и если вы остановили движение?

Другими словами, предположим, что движение вперед является состоянием по умолчанию и отслеживать, сколько остановок (0) вы получили в последних N команд. Если он преодолевает порог (который вы определите), он останавливается и запускается снова, только если получает другой набор команд N 1.

Время, вероятно, не является тем измерением, которое вам здесь нужно, но если вы это сделаете, вы, вероятно, могли бы примените ту же логику c, которую я описал в таймере.

Сохраните все последние N команд, которые вы получили, и по умолчанию используйте для продвижения вперед. Затем создайте таймер и на каждом тике вы проверяете полученные команды и решаете, нужно ли вам продолжать движение или останавливаться.

...