int display_properties(CPhidgetAccelerometerHandle phid) { int serial_number, version, num_axes; const char* ptr; CPhidget_getDeviceType((CPhidgetHandle)phid, &ptr); CPhidget_getSerialNumber((CPhidgetHandle)phid, &serial_number); CPhidget_getDeviceVersion((CPhidgetHandle)phid, &version); CPhidgetAccelerometer_getAxisCount((CPhidgetAccelerometerHandle)phid, &num_axes); // initialise acceleration values ros::Time begin = ros::Time::now(); acc.acceleration.clear(); acc.stamp.clear(); for (int i = 0; i < num_axes; i++) { acc.acceleration.push_back(0); acc.stamp.push_back(begin); acc.stamp.push_back(begin); acc.stamp.push_back(begin); } ROS_INFO("%s", ptr); ROS_INFO("Serial Number: %d", serial_number); ROS_INFO("Version: %d", version); ROS_INFO("Number of axes %d", num_axes); return 0; }
//Display the properties of the attached phidget to the screen. //We will be displaying the name, serial number, version of the attached device and number of Axes on the accelerometer. int display_properties(CPhidgetHandle phid) { int serialNo, version; const char* ptr; int numAxes; CPhidget_getDeviceType(phid, &ptr); CPhidget_getSerialNumber(phid, &serialNo); CPhidget_getDeviceVersion(phid, &version); CPhidgetAccelerometer_getAxisCount((CPhidgetAccelerometerHandle)phid, &numAxes); printf("%s\n", ptr); printf("Serial Number: %10d\nVersion: %8d\n", serialNo, version); printf("Number of Axes: %i\n", numAxes); return 0; }
int accelerometer_simple() { int result, numAxes; const char *err; //Declare an accelerometer handle CPhidgetAccelerometerHandle accel = 0; //create the accelerometer object CPhidgetAccelerometer_create(&accel); //Set the handlers to be run when the device is plugged in or opened from software, unplugged or closed from software, or generates an error. CPhidget_set_OnAttach_Handler((CPhidgetHandle)accel, AttachHandler, NULL); CPhidget_set_OnDetach_Handler((CPhidgetHandle)accel, DetachHandler, NULL); CPhidget_set_OnError_Handler((CPhidgetHandle)accel, ErrorHandler, NULL); //Registers a callback that will run if the acceleration changes by more than the Acceleration trigger. //Requires the handle for the Accelerometer, the function that will be called, //and an arbitrary pointer that will be supplied to the callback function (may be NULL) CPhidgetAccelerometer_set_OnAccelerationChange_Handler(accel, accel_AccelChangeHandler, NULL); //open the acclerometer for device connections CPhidget_open((CPhidgetHandle)accel, -1); //get the program to wait for an accelerometer device to be attached printf("Waiting for accelerometer to be attached.... \n"); if((result = CPhidget_waitForAttachment((CPhidgetHandle)accel, 10000))) { CPhidget_getErrorDescription(result, &err); printf("Problem waiting for attachment: %s\n", err); return 0; } //Display the properties of the attached accelerometer device display_properties((CPhidgetHandle)accel); //read accelerometer event data printf("Reading.....\n"); //get the number of available axes on the attached accelerometer CPhidgetAccelerometer_getAxisCount(accel, &numAxes); //Most accelerometers have 2 axes so we'll pre-set their sensitivity to make the data more readable CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 0, 0.500); CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 1, 0.500); //If the accelerometer attached is a 3-axis, we'll set the sensitivity of the 3rd axis if(numAxes > 2) { CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 2, 0.500); } //wait until user input is read printf("Press any key to end\n"); getchar(); //since user input has been read, this is a signal to terminate the program so we will close the phidget and delete the object we created printf("Closing...\n"); CPhidget_close((CPhidgetHandle)accel); CPhidget_delete((CPhidgetHandle)accel); //all done, exit return 0; }
bool attach( CPhidgetAccelerometerHandle &phid, int serial_number, double sensitivity) { // create the object CPhidgetAccelerometer_create(&phid); // Set the handlers to be run when the device is // plugged in or opened from software, unplugged or // closed from software, or generates an error. CPhidget_set_OnAttach_Handler((CPhidgetHandle)phid, AttachHandler, NULL); CPhidget_set_OnDetach_Handler((CPhidgetHandle)phid, DetachHandler, NULL); CPhidget_set_OnError_Handler((CPhidgetHandle)phid, ErrorHandler, NULL); // Registers a callback that will run if the // acceleration changes by more than the Acceleration // trigger. // Requires the handle for the Accelerometer, the // function that will be called, // and an arbitrary pointer that will be supplied to // the callback function (may be NULL) CPhidgetAccelerometer_set_OnAccelerationChange_Handler(phid, accel_AccelChangeHandler, NULL); //open the device for connections CPhidget_open((CPhidgetHandle)phid, serial_number); // get the program to wait for an accelerometer // device to be attached if (serial_number == -1) { ROS_INFO("Waiting for Accelerometer Phidget to " \ "be attached...."); } else { ROS_INFO("Waiting for Accelerometer Phidget %d " \ "to be attached....", serial_number); } int result; if((result = CPhidget_waitForAttachment((CPhidgetHandle)phid, 10000))) { const char *err; CPhidget_getErrorDescription(result, &err); ROS_ERROR("Problem waiting for attachment: %s", err); return false; } else { // get the number of available axes on the // attached accelerometer int numAxes=2; CPhidgetAccelerometer_getAxisCount(phid, &numAxes); // set the sensitivity for (int i = 0; i < numAxes; i++) { CPhidgetAccelerometer_setAccelerationChangeTrigger(phid, i, sensitivity); } return true; } }