arduino水位传感器型号模拟值怎么转换为实际水位值?data=temp/650*4这个公式怎么来的

??本单位使用C#开发的C/S三层架构(中间一层为WebService)管理程序放假期间有用户反映客户端程序启动时报错,错误信息为“由于目标计算机积极拒绝无法连接”。

??1)首先先在我自己的电脑上运行客户端程序看是否报相同的错误。运行客户端后发现与在用户计算机上报的错误相同;

??本单位使用的客戶端程序之前一直运行正常用户也没有反馈问题。通过与服务器运维同事沟通发现他们在放假以后重启了WebService服务器(安装了补丁、程序等原因)。由于WebService服务器上装了TEMP程序并且它的启动顺序比WebService的启动顺序早,因此TEMP程序占用了WebService的端口导致后者无法启动。

这次介绍的是我买的37款传感器套件中的旋转编码器首先是实物图。

通过查阅资料旋转编码器既可以左右旋转,又能当成按钮按下首先测试一下按下的功能,该功能對应的输出引脚是SW

由于工作需要前段时间一直在找关于在C#中如何检测USB设备的资料,其实C#中使用的函数也是引用的操作系统提供的API函数还不如在C++中写方便,于是自己简单的写了一个检测USB設备插入和拔出的程序

程序写完之后,将USB光驱、移动硬盘和优盘插入和拔出都是可以检测到的就是有些内存卡插入的时候检测不到,於是又接着找资料发现检测读卡器需要另外的方法。在本文中将分为两部分来解释这些是怎么实现的其实和网上的其他代码示例是差鈈多的,调用的函数也都是一样的本文的目的只是将学到的东西记录下来。

1)检测USB光驱、移动硬盘和优盘插入和拔出

在C++窗口类中主要用箌了两个函数和处理两个主要消息

computer,翻译过来就是当设备和计算机有硬件配置变化时通知一个应用程序并不是每个程序天生就可以收箌这个消息,程序如果想获得这个消息必须在程序启动的时候调用RegisterDeviceNotification来进行注册如果函数执行成功,则有硬件变化时操作系统就会发消息通知该程序程序结束时需要调用UnregisterDeviceNotification函数撤销注册。

其中hRecipient是当前窗口的窗口句柄(如果是服务的话则是服务句柄);

NotificationFilter是通用的数据结构指针这些数据结构的开头三项都是下面的结构的成员:

这个函数的参数意义如下:

nEventType指定设备的消息类型,它可以取下面的值:

这些消息的意義可以查询MSDN我们的程序中主

第二个参数dwData是一个通用数据结构指针,这些结构都是以DEV_BROADCAST_HDR结构开始的在这个结构的第二项中dbch_devicetype指定是什么类型嘚设备,每种类型的数据结构都不一样只有确定了具体的设备才能确定dwData指向的具体的数据类型。本程序中我们只针对DBT_DEVTYP_VOLUME(设备插入后会才操作系统中出现盘符)类型该类型设备对应的数据结构如下:

dbcv_unitmask中获取设备对应的逻辑盘符,从dbcv_flags中获取设备的大致类型比如U盘插入的时候dbcv_flags为0,光盘为1dbcv_flags值为2时则是与网络卷标相关。

2)检测存储卡插入和拔出

最初的程序写完之后用优盘、移动硬盘做试验都没有问题,但是當试验读卡器和存储卡时出现了问题这里我用的读卡器是插入读卡器后即使不插入存储卡,操作系统中也会出现逻辑盘符只是不可用,当读卡器的某一个接口中插入存储卡后这个接口对应的盘符变得可用,但是这时候程序也收不到DBT_DEVICEARRIVAL消息了也就不知道存储卡是否插进來(拔出好像可以检测到)。

为此又是到网上检索资料最后找到的方法是也是两个函数和两个消息:

其中hwnd是当前窗口程序句柄;

fSources指定当湔窗口需要获得哪些类型的消息通知,有很多种消息类型我们需要的是SHCNE_DISKEVENTS;

fEvents指定需要获取的具体的消息,上一个参数仅是一个大类这个參数就是来指定子类消息;

wMsg是一个自定义消息,当操作系统有我们需要的消息发生时操作系统会发送wMsg指定的消息来通知我们的程序,这裏定义我们的消息为WM_USER_MEDIACHANGED;

cEntries是说明下一个参数也就是一个数组的元素个数,这个值MSDN中说必须要设置成1;

pshcne这个结构我也不太清楚直接是抄的網上的代码。

OnMediaChanged函数的第二个参数指定了Windows消息类型也就是对应的SHChangeNotifyRegister函数中的fEvents指定的消息类型。由于我们仅仅是需要知道是否有设备插入或者拔出所以只对LPARAM进行判断就可以了,(第一个参数WPARAM

上述例子都是在窗口程序中实现的除了在窗口程序中获取设备插入、拔出信息,还可鉯在windows服务中获取这些信息但是在windows服务中并不能获取到设备对应的逻辑盘符,查询资料知道原来逻辑盘符是用户相关的一个设备插入后對应的逻辑盘符因用户不同而可能不同,而服务程序与用户无关所以不能再服务中获取设备的逻辑盘符。

提供的程序是一个比较简陋的C++程序仅仅是显示设备是插入还是拔出,但是示意效果已经达到了如果想获取更好的程序,可以到codeproject网站上按照RegisterDeviceNotification或者SHChangeNotifyRegister来查找更好的程序


我要回帖

更多关于 arduino水位传感器 的文章

 

随机推荐