Using Multiple Phidgets: Difference between revisions

From Phidgets Support
No edit summary
No edit summary
Line 30: Line 30:
===Using the Label===
===Using the Label===


Most Phidgets can be assigned a label that may be used as a human-readable way to reference them (VINT devices inherit the serial number of the hub).  In software that will be distributed, or cannot easily be modified it is useful to attach to channels based on the label of the device. This way, the device can be labelled prior to running the software, and the new device will be matched
If you want to have a human-readable way to reference your Phidget instead of an arbitrary serial number, you can use the Label feature of Phidgets. You can call the {{Code|WriteLabel}} method to permanently store the desired label in the Phidget's onboard flash. From then on, you can set the {{Code|DeviceLabel}} property of a channel before opening it. The disadvantage of Labels is that they are not available on all operating systems and languages:
 
 
Set the '''device label''' with the {{Code|DeviceLabel}} property.


* In [[OS - Windows|Windows]], label can be read on any Phidget that has a serial number, but label can only be written for Phidgets that support firmware upgrading.
* Some programming languages do not support writing to labels. See the Phidget22 API to see if it's supported in your language.
When opening by label, you would use the setDeviceLabel("mylabel") function (or similar, check the Phidget22 API) before calling Open().


Some limitations are:
Note: You should be careful when writing labels to your Phidgets in your code, because the label is stored in flash which can only be re-written around 10,000 times before it will no longer write. If your program is complex, be sure to test it thoroughly before using {{Code|WriteLabel}} to avoid accidentally burning out the flash.
* In [[OS - Windows|Windows]], label can be read on any Phidget that has a serial number, but label can only be written for Phidgets that support firmware upgrading.
* Some programming languages do not support writing to labels. See the {{Phidget22API}}.  


===Code Examples===
===Code Examples===

Revision as of 19:22, 10 April 2018

When only one Phidget is connected to a computer, it is pretty easy for a simple program to open and attach to the channels on that one Phidget; however, when the program becomes more complicated or more than one Phidget is connected, attaching to the correct channel can be more difficult.

Before opening a channel, it is important to set enough of the matching properties to ensure the desired device channel is matched. By default, the matching code in the Phidget library will match the first available device channel that is of the correct class. For example, if two temperature sensor devices are connected to a computer, it is undefined which will attach when the device serial number is not specified before the channel is opened.

The best practice is to always specify at least the device serial number and the channel ID of the device channel that should be attached to the user channel. Even when not strictly necessary, setting as many matching properties as possible can ensure that code will not break in the future.



Using the Channel ID

Each channel exported by a Phidget device has an id, normally starting at 0. The channel property must be set to ensure the device channel the Phidget software library matches is right one. If a 4-channel temperature sensor is connected, and the channel property is not specified, the matching code will attach to channel 0 if available, and the next available channel if not.

Set the channel id with the Channel property.

Using the Hub Port

VINT hubs have a number of ports that VINT devices can be connected to. To ensure the correct VINT device is attached, the hub port must be specified. If two temperature sensors are attached to the same hub, and the hub port is not specified prior to opening a channel, it is undefined which temperature sensor will be attached.

Set the hub port with the HubPort property.

Using the Serial Number

Each Phidget has a unique serial number (VINT devices inherit the serial number of the hub). When there is more than one device that exports the same channel class, the device serial number must be specified to ensure the channel on the desired device is matched. The device serial number can be found on a label on the bottom of the Phidget, or determined by reading the DeviceSerialNumber property.

Set the device serial number with the DeviceSerialNumber property.

Using the Label

If you want to have a human-readable way to reference your Phidget instead of an arbitrary serial number, you can use the Label feature of Phidgets. You can call the WriteLabel method to permanently store the desired label in the Phidget's onboard flash. From then on, you can set the DeviceLabel property of a channel before opening it. The disadvantage of Labels is that they are not available on all operating systems and languages:

  • In Windows, label can be read on any Phidget that has a serial number, but label can only be written for Phidgets that support firmware upgrading.
  • Some programming languages do not support writing to labels. See the Phidget22 API to see if it's supported in your language.

When opening by label, you would use the setDeviceLabel("mylabel") function (or similar, check the Phidget22 API) before calling Open().

Note: You should be careful when writing labels to your Phidgets in your code, because the label is stored in flash which can only be re-written around 10,000 times before it will no longer write. If your program is complex, be sure to test it thoroughly before using WriteLabel to avoid accidentally burning out the flash.

Code Examples

For example, in Java, this would be:

 ch.setDeviceSerialNumber(12345);  // match device 12345
 ch.setHubPort(4);                 // match hub port 4
 ch.setChannel(1);                 // match channel 1 port 4 dev 12345
 ch.open();                        // start matching

 //for a second device simply repeat this process
 ch1.setDeviceSerialNumber(12345); 
 ch1.setHubPort(3);
 ch1.setChannel(1);
 ch1.open();
//and so on
.
.
.

Or in C:

 Phidget_setDeviceSerialNumber((PhidgetHandle)ch, 12345);  // match device 12345
 Phidget_setHubPort((PhidgetHandle)ch, 4);                 // match hub port 4
 Phidget_setChannel((PhidgetHandle)ch, 1);                 // match channel 1 port 4 dev 12345
 Phidget_open((PhidgetHandle)ch);                         // start matching

 //for a second device simply repeat this process
 Phidget_setDeviceSerialNumber((PhidgetHandle)ch1, 12345);  
 Phidget_setHubPort((PhidgetHandle)ch1, 2);                 
 Phidget_setChannel((PhidgetHandle)ch1, 1);                 
 Phidget_open((PhidgetHandle)ch1);         
//and so on
.
.
.

Distinguishing Events

When using events, it is recommended that a different event handler be used for each channel to simplify the code and prevent programming errors. In the case where it is not practical to write an individual handler for each channel, the matching properties of the channel can be read to determine what device channel the event is from.

Prior to the channel being attached to a device channel, the matching properties will return the values that will be used to perform the match; however, once the channel is attached, the matching properties will return the physical values from the device channel. For example, if serial number has not been specified, DeviceSerialNumber would be PHIDGET_SERIALNUMBER_ANY, but once attached DeviceSerialNumber would be the serial number of the attached device.

Further Reading

Phidget Programming Basics - Here you can find the basic concepts to help you get started with making your own programs that use Phidgets.

Data Interval/Change Trigger - Learn about these two properties that control how much data comes in from your sensors.

Polling vs. Events - Your program can gather data in either a polling-driven or event-driven manner. Learn the difference to determine which is best for your application.

Logging, Exceptions, and Errors - Learn about all the tools you can use to debug your program.

Phidget Network Server - Phidgets can be controlled and communicated with over your network- either wirelessly or over ethernet.

Best Phidgets Practices - Good programming habits that will save you from common problems when writing code for your Phidgets.