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; } }