Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемОлег Осминин
1 >1>1>1>1 Обработка данных от сенсоров
2 Обработчики данных с сенсоров protected override void Start() { base.Start(); _drivePort.EnableDrive(true); _drivePort.SetDriveSpeed(1, 0); Activate(Arbiter.ReceiveWithIterator(false, _dateTimePort, UpdateSensorData)); TaskQueue.EnqueueTimer(TimeSpan.FromMilliseconds(60), _dateTimePort); }
3 UpdateSensorData IEnumerator UpdateSensorData(DateTime dateTime) { var resultPort = new CompletionPort(); PostOnTaskCompletion(resultPort, UpdateColorSensor); PostOnTaskCompletion(resultPort, UpdateBrightnessSensor); PostOnTaskCompletion(resultPort, UpdateLRF); PostOnTaskCompletion(resultPort, UpdateWebCamImage); Activate(Arbiter.MultipleItemReceive(false, resultPort, 4, allComplete => { Activate(Arbiter.ReceiveWithIterator(false, _dateTimePort, UpdateSensorData)); TaskQueue.EnqueueTimer(TimeSpan.FromMilliseconds(60), _dateTimePort); })); yield break; }
4 Activate(Arbiter.MultipleItemReceive(false, resultPort, 4, allComplete – запускает новую обработку данных, после того, как была выполнена предыдущая обработка и получены четыре сообщения. PostOnTaskCompletion запускает на выполнение итератор, переданный ему в параметре, устанавливает порт, на который должен отправляться результат запуска итератора. Код, приведённый ниже запускает итератор UpdateSensorData каждые 60 миллисекунд: Activate(Arbiter.ReceiveWithIterator(false, _dateTimePort, UpdateSensorData)); EnqueueTimer – ставит в очередь на регистрацию таймер, который будет отправлять элемент DateTime на заданный порт (_dateTimePort): TaskQueue.EnqueueTimer(TimeSpan.FromMilliseconds(60), _dateTimePort);
5 UpdateSonar IEnumerator UpdateSonar() { var sensorOrFault = _simulatedSonarServicePort.Get(); yield return sensorOrFault.Choice(); if (!HasError(sensorOrFault)) { sonar.SonarState sensorState = (sonar.SonarState)sensorOrFault; if (sensorState.DistanceMeasurements != null) Console.WriteLine("Sonar: {0}", sensorState.DistanceMeasurements[0]); } yield break; }
6 Команды управления двигателями _drivePort.DriveDistance(-0.25, _driveSpeed); _drivePort.RotateDegrees(degrees, _rotateSpeed); _drivePort.EnableDrive(true); _drivePort.SetDriveSpeed(0, 0);
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.