Я пытаюсь прочитать расстояние от ультразвукового датчика (HC-SR04), но единственными значениями, которые я получаю, является 0 и 265.xx.Ультразвуковой датчик малины pi 2 C# .net
Я использую малиновый Pi 2 с установленным IoT Core Windows 10.
Я написал код на C#.
Это ультразвуковой датчик класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using Windows.Devices.Gpio;
namespace RaspberryPi
{
class UcSensor
{
GpioController gpio = GpioController.GetDefault();
GpioPin TriggerPin;
GpioPin EchoPin;
//Contructor
public UcSensor(int TriggerPin, int EchoPin)
{
//Setting up gpio pin's
this.TriggerPin = gpio.OpenPin(TriggerPin);
this.EchoPin = gpio.OpenPin(EchoPin);
this.TriggerPin.SetDriveMode(GpioPinDriveMode.Output);
this.EchoPin.SetDriveMode(GpioPinDriveMode.Input);
this.TriggerPin.Write(GpioPinValue.Low);
}
public double GetDistance()
{
ManualResetEvent mre = new ManualResetEvent(false);
mre.WaitOne(500);
//Send pulse
this.TriggerPin.Write(GpioPinValue.High);
mre.WaitOne(TimeSpan.FromMilliseconds(0.01));
this.TriggerPin.Write(GpioPinValue.Low);
//Recieve pusle
while (this.EchoPin.Read() == GpioPinValue.Low)
{
}
DateTime start = DateTime.Now;
while (this.EchoPin.Read() == GpioPinValue.High)
{
}
DateTime stop = DateTime.Now;
//Calculating distance
double timeBetween = (stop - start).TotalSeconds;
double distance = timeBetween * 17000;
return distance;
}
}
}
Я также написал сценарий в питоне, чтобы прочитать значения из ультразвукового датчика, а затем он работает, но в C# я не могу заставить его работать.
В нижней части можно найти в журнале отладки:
'BACKGROUNDTASKHOST.EXE' (CoreCLR: DefaultDomain): Loaded «C: \ Program Files \ WindowsApps \ Microsoft.NET.CoreRuntime.1.0_1. 0.22816.1_arm__8wekyb3d8bbwe \ mscorlib.ni.dll. Пропущенные символы загрузки. Модуль оптимизирован и включен параметр отладчика «Только мой код». 'BACKGROUNDTASKHOST.EXE' (CoreCLR: CoreCLR_UAP_Domain): загружен 'C: \ Users \ DefaultAccount \ AppData \ Local \ DevelopmentFiles \ RaspiCarVS.Debug_ARM.chris \ RaspiCar.winmd'. Загружены символы. 'BACKGROUNDTASKHOST.EXE' (CoreCLR: CoreCLR_UAP_Domain): загружен 'C: \ Users \ DefaultAccount \ AppData \ Local \ DevelopmentFiles \ RaspiCarVS.Debug_ARM.chris \ System.Runtime.dll'. Пропущенные символы загрузки. Модуль оптимизирован и включен параметр отладчика «Только мой код». 'BACKGROUNDTASKHOST.EXE' (CoreCLR: CoreCLR_UAP_Domain): загружен 'C: \ Users \ DefaultAccount \ AppData \ Local \ DevelopmentFiles \ RaspiCarVS.Debug_ARM.chris \ WinMetadata \ Windows.winmd'. Модуль был построен без символов. 'BACKGROUNDTASKHOST.EXE' (CoreCLR: CoreCLR_UAP_Domain): загружен 'C: \ Users \ DefaultAccount \ AppData \ Local \ DevelopmentFiles \ RaspiCarVS.Debug_ARM.chris \ System.Runtime.InteropServices.WindowsRuntime.dll'. Модуль был построен без символов. 'BACKGROUNDTASKHOST.EXE' (CoreCLR: CoreCLR_UAP_Domain): загружен 'C: \ Users \ DefaultAccount \ AppData \ Local \ DevelopmentFiles \ RaspiCarVS.Debug_ARM.chris \ System.Threading.dll'. Модуль был построен без символов. 'BACKGROUNDTASKHOST.EXE' (CoreCLR: CoreCLR_UAP_Domain): загружен 'C: \ Users \ DefaultAccount \ AppData \ Local \ DevelopmentFiles \ RaspiCarVS.Debug_ARM.chris \ System.Diagnostics.Debug.dll'. Пропущенные символы загрузки. Модуль оптимизирован и включен параметр отладчика «Только мой код». 'BACKGROUNDTASKHOST.EXE' (CoreCLR: CoreCLR_UAP_Domain): загружен 'C: \ Users \ DefaultAccount \ AppData \ Local \ DevelopmentFiles \ RaspiCarVS.Debug_ARM.chris \ System.Runtime.WindowsRuntime.dll'. Пропущенные символы загрузки. Модуль оптимизирован и включен параметр отладчика «Только мой код». Расстояние: 265.7457 Расстояние: 0 Расстояние: 0 Расстояние: 0 Программа '[2508] BACKGROUNDTASKHOST.EXE' вышла с кодом 0 (0x0).
У DateTime может не быть необходимого разрешения, я не играл с W10 IOT, поэтому я не знаю, что доступно (например, секундомер). У вас есть o-scope, вы можете видеть, что на самом деле делает датчик? –
'DateTime' обычно не является хорошим способом измерения времени - это может быть разрешение этого, что вызывает у вас проблемы. Вместо этого рассмотрите использование класса «StopWatch». –