-
Notifications
You must be signed in to change notification settings - Fork 8
Phidgets C言語
eiichiromomma edited this page Aug 16, 2014
·
1 revision
(Phidgets) C言語
VisualC++ 2005 EEによるセンサーの利用
- Phidgets/PhidgetInterfaceKitのドライバを入手しインストール。
- サンプルソースからphidget21.libとphidget21.hを使う
- c:\local\includeにphidget21.hを置く。(VCでのインクルードパスの追加を参考にc:\local\includeをライブラリパスに)
- c:\local\libにphidget21.libを(VCでのライブラリパスの追加を参考にc:\local\libをライブラリパスに)
-
ConsoleApplicationを参考にコンソールアプリケーションのプロジェクトを作成。名前は適当に。
-
プロジェクトへのライブラリの追加を参考にphidget21.libを加える
-
ソースファイルを追加し以下のinclude分を追加
#include <phidget21.h>
以下のセンサーを接続する。 詳細はセンサーのマニュアル(PDF) 参照。
0:Temperature
1:Slider
2:Joystick X
3:Joystick Y
4:Light
5:Force
6:Touch
7:Touch
やる事は非常に単純で、初期化をした後はセンサーの出力が変わった時に発生するコールバック関数を定義するだけ。
int __stdcall IFK_SensorChangeHandler(CPhidgetInterfaceKitHandle IFK, void *userptr, int Index, int Value)
IFKは初期化で取得するハンドル。Indexが0-7のアナログ入力ポート。Valueがその値。userptrは使わない。 コールバック関数内ではswitchでセンサー毎の処理を行なう。 Valueの解釈はセンサーのマニュアル(PDF) に載っている。
#include <phidget21.h>
#include <conio.h> //_getch()
int __stdcall IFK_SensorChangeHandler(CPhidgetInterfaceKitHandle IFK, void *userptr, int Index, int Value)
{
switch(Index){
case 0: //temperature
printf("Temperature (ID:%d) is %lf\n", Index, (Value-200)/4.0);
break;
case 1: //Slider
printf("Slider (ID:%d) is %lf%%\n",Index,Value*100.0/1000.0);
break;
case 2: //Joystick X
printf("Joystick X (ID:%d) is %lf%%\n",Index,(Value-500)*100.0/500.0);
break;
case 3: //Joystick Y
printf("Joystick Y (ID:%d) is %lf%%\n",Index,(Value-500)*100.0/500.0);
break;
case 4: //Light
printf("Light (ID:%d) is %lf%%\n",Index,Value*100.0/1000.0);
break;
case 5: //Force
printf("Force (ID:%d) is %lf%%\n",Index,Value*100.0/1000.0);
break;
case 6: //Touch
if(Value<500){
printf("Touched! (ID:%d, Value:%d)\n",Index,Value);
}
break;
case 7: //Touch
if(Value<500){
printf("Touched! (ID:%d, Value:%d)\n",Index,Value);
}
break;
default:
break;
}
return 0;
}
int main(void)
{
int result;
const char *err;
CPhidgetInterfaceKitHandle IFK = 0; //ハンドルの入れ物
CPhidgetInterfaceKit_create(&IFK); //ハンドルの作成
CPhidgetInterfaceKit_set_OnSensorChange_Handler(IFK, IFK_SensorChangeHandler, NULL);//コールバック関数の登録
//接続を10秒待って、接続失敗したら終了
if(result = CPhidget_waitForAttachment((CPhidgetHandle)IFK, 10000))
{
CPhidget_getErrorDescription(result, &err);
printf("Problem waiting for attachment: %s\n", err);
return 1;
}
//コールバック関数を呼び出す感度設定。引数はハンドル、Index、閾値の順
//試行錯誤して適切な値を決める。
CPhidgetInterfaceKit_setSensorChangeTrigger(IFK,0,4); //Temperature
CPhidgetInterfaceKit_setSensorChangeTrigger(IFK,1,1); //Slider
CPhidgetInterfaceKit_setSensorChangeTrigger(IFK,2,8); //Joystick X
CPhidgetInterfaceKit_setSensorChangeTrigger(IFK,3,8); //Joystick Y
CPhidgetInterfaceKit_setSensorChangeTrigger(IFK,4,10); //Light
CPhidgetInterfaceKit_setSensorChangeTrigger(IFK,5,5); //Force
CPhidgetInterfaceKit_setSensorChangeTrigger(IFK,6,400); //Touch
CPhidgetInterfaceKit_setSensorChangeTrigger(IFK,7,400);
char c;
do{
c=(char)_getch();
}while(c!='q');//qで終了
//あとかたづけ
CPhidget_close((CPhidgetHandle)IFK);
CPhidget_delete((CPhidgetHandle)IFK);
return 0;
}
暇があったら追記の予定
- CPhidgetInterfaceKit_set_OnInputChange_Handler(IFK, IFK_InputChangeHandler, NULL);
- CPhidgetInterfaceKit_set_OnOutputChange_Handler(IFK, IFK_OutputChangeHandler, NULL);
- CPhidgetInterfaceKit_set_OnSensorChange_Handler(IFK, IFK_SensorChangeHandler, NULL);
- CPhidget_set_OnAttach_Handler((CPhidgetHandle)IFK, IFK_AttachHandler, NULL);
- CPhidget_set_OnDetach_Handler((CPhidgetHandle)IFK, IFK_DetachHandler, NULL);
- CPhidget_set_OnError_Handler((CPhidgetHandle)IFK, IFK_ErrorHandler, NULL);
- CPhidgetInterfaceKit_getNumOutputs(IFK, &numOutputs);
- CPhidgetInterfaceKit_getNumInputs(IFK, &numInputs);
- CPhidgetInterfaceKit_getNumSensors(IFK, &numSensors);
- 3ds_max
- Android
- Books
- Caffe
- Canvas
- Chainer
- CloudCompare
- colinux
- colmap
- Cygwin
- DeepLearning
- DICOM
- dlib
- docker
- Everun
- Excel
- EyeX
- FANN
- FDS
- Felica
- FreeBSD
- FreeNAS
- GAlib
- gnuplot
- JetsonNano
- JetsonTK1
- JetsonTX2
- Kinect
- LAPACK
- LaTeX
- LTspice
- M5Stack
- MacOSX
- MATLAB
- Memo
- MicroEnableIII
- Mono
- MSVC
- nano
- nvidia-docker
- ODE
- Open3D
- OpenCV
- OpenCVSharp
- OpenMVG
- OpenOffice
- OpenVSLAM
- OSG
- ParaView
- PCL
- Phidgets
- PlaidML
- PLplot
- POVRay
- PowerPoint
- Python
- R
- RaspberryPi
- Realsense
- ROS
- RSJ2011
- Ruby
- Scilab
- SHOGUN
- SUSE
- SVM
- Tensorflow
- TrueCrypt
- Ubuntu
- uEye
- Unix
- VMWarePlayer
- Vim
- VTK
- Windows
- WSL2
- 文書作成
- 文献調査
- 立体映像
- 論文メモ