Phidgets™ programming framework
IAT 351
Week 8 Lecture/Lab 1
04.03.2008
Phidgets | IAT351 | 04.03.2008
summary :
• traditional physical UI examples problems
• phidgets goals definition architecture API java API programming applications
• references bibliography programming resources
Phidgets | IAT351 | 04.03.2008
traditional physical UI :examples
Walking pad (DIUF)
Phidgets | IAT351 | 04.03.2008
traditional physical UI :examples
Lego Mindstorms
Phidgets | IAT351 | 04.03.2008
traditional physical UI :examples
SmartHome
Phidgets | IAT351 | 04.03.2008
Motivation
• Pertaining to ubiquitous computing (ubicomp), two areas are relevant:
Context-aware computing
Tangible user interfaces
Phidgets | IAT351 | 04.03.2008
What remains hard?
• Sensing…
• Actuation…
• We’ll get back to how Phidgets address this
Phidgets | IAT351 | 04.03.2008
What is Context?
• Any information that can be used to characterize the situation of an entity• Who, what, where, when
• Why is it important? information, usually implicit, that applications do not have access to It’s input that you don’t get in a GUI
Phidgets | IAT351 | 04.03.2008
How to Use Context
• To present relevant information to someone Mobile tour guide
• To perform an action automatically Print to nearest printer
• To show an action that use can choose Want to phone the number in this email?
Phidgets | IAT351 | 04.03.2008
Case Study: tour guides
• Very popular theme Location is an easy piece of context
• G. Abowd et al. Cyberguide: A mobile context-aware tour guide. Balzer/ACM Wireless Networks, Vol. 3(5), 1997, pp. 421-433.
Phidgets | IAT351 | 04.03.2008
Simple Example: In/Out Board
Phidgets | IAT351 | 04.03.2008
Simple Example: In/Out Board
Face Recognition
LocationWidget
LocationWidget
In/Out Board
Smart Card Reader
ID to NameInterpreter
Phidgets | IAT351 | 04.03.2008
Tangible User Interfaces
• Hiroshi Ishii (MIT)
Tangible Bits • physical form to digital information
Tangible User Interfaces • physical objects, surfaces, and spaces that act as tangible embodiments of
digital information
Phidgets | IAT351 | 04.03.2008
Triangles
• Pieces are connected together to trigger digital events influence the progress of a non-linear story organize media elements in order to create their own story space
Phidgets | IAT351 | 04.03.2008
LumiTouch
• Two interactive picture frames
User’s touching of a local frame translates to a glow on remote frame
She’s thinking of him He’s thinking of her
Phidgets | IAT351 | 04.03.2008
Tangible Video Browser
• Tokens are used to: Act as container for videos Select a video Navigate within the video
Phidgets | IAT351 | 04.03.2008
What remains hard?
• Well…everything according to the paper
While an exciting new area, everyday programmers still face considerable hurdles if they wish to create even simple physical user interfaces. Perhaps the biggest--but we believe easily solved---obstacle is the sheer difficulty of developing and combining physical devices and interfacing them to conventional programming languages.
Phidgets | IAT351 | 04.03.2008
Why is this hard?
• Steps Acquisition Representation Interpretation Storage Delivery Reaction
• Most of these steps repeated in all development.
Phidgets | IAT351 | 04.03.2008
Related Work
• Tools for working with physical input/output devices
• iRX Board
• Digital I/O boards
• Tini boards
Phidgets | IAT351 | 04.03.2008
traditional physical UI :problems
1. Electronics (Difficult to write/debug w/o actual devices)2. missing API3. unsuited API (wrong abstraction level)4. commercial target (oriented to different markets)5. lack of simulation capabilities
• Hard to build
Phidgets | IAT351 | 04.03.2008
Goals
• Simple so developers concentrate on overall use, modification, and recombination
• Easy for average programmer
Phidgets | IAT351 | 04.03.2008
phidgets :goals
• simple devices• easy to program
… just as widgets make GUIs easy to develop, so could phidgets make the new generation of physical user interfaces
easy to develop.
Phidgets | IAT351 | 04.03.2008
phidgets :definition
• widget (1931) small mechanical device (today) ‘windows gadget’
• phidget (aka phydget) ‘physical widget’
Phidgets | IAT351 | 04.03.2008
phidgets :definition
Phidgets™, or physical widgets, are building blocks that help a developer construct physical user interfaces.
Phidgets | IAT351 | 04.03.2008
phidgets :architecture
Device
Device manager
API
Simulation
Phidget
Phidgets | IAT351 | 04.03.2008
phidgets :architecture
Device
Device manager
API
Simulation
Phidgets | IAT351 | 04.03.2008
phidgets :API
Int CountPhidget[] Item
OnAttach()OnDetach()OnError()
DeviceTypeIsAttached
SerialNumber
Phidget-specific properties, e.g.
NumMotorsPhidget-specific
events, e.g.OnTag
Generic phidget
Specific phidget
Phidgets manager
actuator
sensor
Phidgets | IAT351 | 04.03.2008
phidgets :java API
Phidgets | IAT351 | 04.03.2008
phidgets :java API
Phidgets | IAT351 | 04.03.2008
phidgets :programming (output)
Phidget COM Object
Application
creates
Device
opens
sets
sets
Phidgets | IAT351 | 04.03.2008
phidgets :programming (input)
Phidget COM Object
Listener
Application
creates
Device
opens
readsfire events
starts
Phidgets | IAT351 | 04.03.2008
Handling the Phidget
• 3 important basic events• ATTACH (USB connected) OnAttach(),attached()• DETACH (USB disconnected) OnDetach(),detached()• ERROR (help!) OnError(), error()
• Standard Java approach of listeners and adapters
• Specific events for each type of device E.g. rfid.OnTag() for detecting an RFID tag in range
Phidgets | IAT351 | 04.03.2008
phidgets :programming
Implement OnEvent methods
Create OS ObjectAttach Listener
Open connection to device
Extend adapter
Start listening
Phidgets | IAT351 | 04.03.2008
public class OpenIFKitExample
});}System.out.println("error event for " + ee);public void error(ErrorEvent ee) {ik.addErrorListener(new ErrorListener() {});}System.out.println("detachment of " + ae);public void detached(DetachEvent ae) {ik.addDetachListener(new DetachListener() {});}System.out.println("attachment of " + ae);public void attached(AttachEvent ae) {ik.addAttachListener(new AttachListener() {ik = new InterfaceKitPhidget();
System.out.println(Phidget.getLibraryVersion());
InterfaceKitPhidget ik;public static final void main(String args[]) throws Exception {
{
Basic listeners
Phidgets | IAT351 | 04.03.2008
ik.addInputChangeListener(new InputChangeListener() {public void inputChanged(InputChangeEvent oe) {System.out.println(oe);}});
ik.addOutputChangeListener(new OutputChangeListener() {public void outputChanged(OutputChangeEvent oe) {System.out.println(oe);}});
ik.addSensorChangeListener(new SensorChangeListener() {public void sensorChanged(SensorChangeEvent se) {System.out.println(se);}});
IK listeners
Phidgets | IAT351 | 04.03.2008
ik.openAny();System.out.println("waiting for InterfaceKit attachment...");ik.waitForAttachment();
System.out.println(ik.getDeviceName());
Thread.sleep(500);
ik.getOutputCount()Ik.getSensorCount()
ik.getOutputState(i);ik.setOutputState(i,<true/false>);
Ik.getSensorRawValue(i)Ik.getSensorValue(i)
Waits until a device is plugged in
Phidgets | IAT351 | 04.03.2008
Phidgets | IAT351 | 04.03.2008
Phidgets Requirement
• Connection manager• ID• Simulation mode
Phidgets | IAT351 | 04.03.2008
Phidget Manager
• onAttach()
• onDetach()
• Count
• Item
• DeviceType
• isAttached()
• SerialNumber
Phidgets | IAT351 | 04.03.2008
Phidget Servo
• MotorPosition• NumMotors• onPositionChanged()
Phidgets | IAT351 | 04.03.2008
Attaching the interface kit
// create the interface kit objectInterfaceKitPhidget ik = new InterfaceKitPhidget();
// look for an attachmentik.openAny();
// don’t continue until an attachment is foundik.waitForAttachment();
Phidgets | IAT351 | 04.03.2008
Digital Input
• Use the wires to hook one of the switches up to a digital input and one of the grounds (on either end of the row)
• The parameter is the index of the input• The result is a boolean (true for on, false for off)
// read the value of input 3ik.getInputState(3);
Phidgets | IAT351 | 04.03.2008
Analog Input
• Parameter is index of the device• The result is a value between 0 and around 1000 (I’m guessing the
max is 1024)
// get the value of the first analog deviceik.getSensorValue(0);
Phidgets | IAT351 | 04.03.2008
Digital Output
• Boolean values are used to set the output• Each output has an index: 0 - 7• The two slots at either end are grounds
// sets output 2 to “high”ik.setOutputState(2, true);
Phidgets | IAT351 | 04.03.2008
Ugly Java Stuff: Exceptions
• Almost everything in the phidget package throws exceptions• Solution #1: add “throws Exception” at the end of every method
signature, including the main method• Solution #2: wrap phidget calls in try/catch blocks
Phidgets | IAT351 | 04.03.2008
Pausing in Java
• If you want to pause execution of your program• The parameter is time in milliseconds
// pause for 2 secondsThread.sleep(2000);
Phidgets | IAT351 | 04.03.2008
Drawbacks
• Need PC• Not mobile• Not easy to deploy
Phidgets | IAT351 | 04.03.2008
references :bibliography
• Greenberg S. and Fitchet C., Phidgets : Easy developement of physical interfaces through physical widgets. Proceedings of the ACM UIST 2001 Symposium.
• Greenberg S. and Boyle M., Customizable physical interfaces for interacting with conventional applications. Proceedings of the ACM UIST 2002 Symposium.
• www.phidgets.com, www.phidgetsusa.com• www.wikipedia.org (phidget, widget)• www.smarthome.com, www.legomindstorms.com • Laroussi Bouguila, Evequoz Florian, Michèle Courant, Béat Hirsbrunner. Active Walking
Interface for Human-Scale Virtual Environment. HCII’05.
Phidgets | IAT351 | 04.03.2008
references:programming resources
• documentation on www.phidgets.com : C_API_Manual : basic architecture
• http://phidgets.com/documentation/C_API_Manual.pdf COM_API_Manual : object model (VB)
• http://phidgets.com/documentation/COM_API_Manual.pdf Javadoc : java API, quite similar to COM
• http://phidgets.com/documentation/JavaDoc.zip For each particular phidget see its « hardware description » :
• Section labelled « Phidgets » on www.phidgets.com >> Documentation• software introduction and tutorials :
• www.phidgets.com >> Documentation• http://www.phidgetsusa.com/tutorials/tutorialhome.asp
• code examples :• www.phidgets.com >> Download >> Beta >> Examples.zip• www.phidgets.com >> Project / Examples
Top Related