<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.phidgets.com/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Burley</id>
	<title>Phidgets Support - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.phidgets.com/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Burley"/>
	<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/Special:Contributions/Burley"/>
	<updated>2026-04-09T08:36:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35306</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35306"/>
		<updated>2025-07-31T13:18:10Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Orders received before 12:00 PM Mountain Time (GMT-07:00) Monday to Friday will be shipped the same day.&lt;br /&gt;
&lt;br /&gt;
Orders containing cut-to-length parts may not ship on the same day due to the additional processing time associated with these orders.&lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
Shipping costs are calculated at checkout and presented for your review before you confirm your order. If multiple shipping options are available for your destination, all options will be listed so you can choose the one that best suits your needs.&lt;br /&gt;
&lt;br /&gt;
If you have your own UPS or FedEx account, you can use it at checkout and be billed directly by the carrier. This gives you access to a wider range of shipping options.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders that are under $50.00.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
Effective May 2, 2025, orders shipped to the United States will incur additional duties, tariffs, and brokerage fees, regardless of the order value. For more details, visit our guide about [[U.S._Tariffs | U.S. Tariffs]].&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
&lt;br /&gt;
====European Union====&lt;br /&gt;
Effective July 1, 2021, the European Union (EU) updated its Value Added Tax (VAT) regulations. All shipments to EU countries now require formal customs clearance and are subject to VAT based on the destination country.&lt;br /&gt;
&lt;br /&gt;
For goods with an intrinsic value up to €150, VAT must be collected at the time of purchase. This means for orders under $200 USD, we require prepayment of VAT and brokerage fees at checkout to ensure fast, hassle-free delivery.&lt;br /&gt;
&lt;br /&gt;
For orders over $200 USD, we provide the option to prepay all applicable import fees (including VAT and brokerage). If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
====Other Countries====&lt;br /&gt;
International shipments may be subject to import duties, taxes, and brokerage fees upon arrival in your country. These charges are determined by your local customs authorities and are the responsibility of the recipient.&lt;br /&gt;
&lt;br /&gt;
At checkout, we provide the option to prepay these fees. If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
===Tracking Your Order===&lt;br /&gt;
You can track your shipment using the tracking number sent to you by email when your order was shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If no one is available to accept the package upon delivery, UPS will attempt redelivery two more times, as per their standard procedure. If all delivery attempts fail, UPS will hold the package for 5 days before returning it to us. In such cases, we will issue a refund for your order minus the cost of shipping (both directions) and a flat $50 fee, up to the total value of the package. This policy applies both to deliveries that failed due to no one being present and to packages that were refused at the delivery address.&lt;br /&gt;
&lt;br /&gt;
===Incoterms===&lt;br /&gt;
&lt;br /&gt;
We use the following Incoterms depending on the shipping and payment arrangement:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FCA (Free Carrier):&#039;&#039;&#039; Used when shipping on the customer’s carrier account. Risk and responsibility transfer to the customer once the goods are handed over to the carrier at our facility.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DDP (Delivered Duty Paid):&#039;&#039;&#039; Used when the customer chooses to pre-pay import fees and taxes at checkout. We handle all import fees and deliver the goods to the destination address.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DAP (Delivered at Place):&#039;&#039;&#039; Used when the customer opts to pay import fees and taxes upon delivery. We deliver the goods, but the customer is responsible for paying any import fees directly to the carrier.&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All Returns Must Be Authorized===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets accepts returns of unopened products within 30 days of the date of purchase. To initiate a return, please contact us by phone or email to obtain an RMA number. Products must be shipped back to Phidgets Inc. prepaid. A refund will be issued to your credit card once we receive and inspect the returned items.  The refund excludes the cost of shipping as well as any duties or brokerage charges incurred.  &lt;br /&gt;
&lt;br /&gt;
Returns received after 30 days are subject to a restocking fee of 25% of the package&#039;s value (minimum $5.00, maximum $500).&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns beyond 90 days from the date of purchase.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We Shipped the Wrong/Incomplete Product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Holiday&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2025&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2026&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 17&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 16&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 18&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 19&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 18&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 4&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 7&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 13&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 12&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11 (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas and New Years&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Varies&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=34959</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=34959"/>
		<updated>2025-01-09T15:19:08Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Unless we are unusually busy most orders received before 12:00 PM Mountain Time - Canada (GMT-07:00) Monday to Friday will be shipped on the same day.&lt;br /&gt;
&lt;br /&gt;
Orders which contain cut to length parts may not necessarily ship same day as there is significant processing time associated with these orders.  &lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
The shipping cost is calculated at Checkout and submitted for your review before you confirm your order. When multiple shipping options are available for your destination, we will list all available options and let you choose.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders which are under $50.00.&lt;br /&gt;
&lt;br /&gt;
If you have your own account with UPS, you can use it and be billed directly by them.  In that case you have more shipping options available to you.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We use UPS Express Saver™ - Overnight delivery, and UPS Standard - 3 to 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the EU===&lt;br /&gt;
&lt;br /&gt;
Effective July 1, 2021, there were significant changes to the European Union’s Value Added Tax (VAT) rules.&lt;br /&gt;
&lt;br /&gt;
# All goods will now require formal customs clearance and are now subject to the VAT related to the country of entry.&lt;br /&gt;
# Online market places are required to charge the VAT upfront for all goods valued intrinsically up to &#039;&#039;&#039;€150&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
These requirements prevent Phidgets Inc. from shipping directly into the EU for goods less than this value.&lt;br /&gt;
&lt;br /&gt;
EU customers ordering goods on our website with a total value less the &#039;&#039;&#039;$200 USD&#039;&#039;&#039; are now encouraged to either:&lt;br /&gt;
* Increase the value of their order to over &#039;&#039;&#039;$200 USD&#039;&#039;&#039; or,&lt;br /&gt;
* Follow the link to our [[Dealers|distributors]] page and place an order through them.&lt;br /&gt;
&lt;br /&gt;
Customers within the EU can still place orders above $200USD and have them shipped directly to them within &lt;br /&gt;
the EU without going through a distributor.&lt;br /&gt;
Please note in these cases customers within the EU are responsible for the VAT. UPS will collect it upon delivery or by invoice after delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
&lt;br /&gt;
====UPS Express Saver™ - Overnight====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments under $800.00USD&#039;&#039;&#039;: we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments over $800.00USD&#039;&#039;&#039;: you are responsible for duty and taxes if applicable and will have to pay UPS directly on top of the shipping cost we put on our invoice.&lt;br /&gt;
&lt;br /&gt;
====UPS Standard - Ground 3 to 5 business days====&lt;br /&gt;
&#039;&#039;&#039;Shipments under $800.00USD&#039;&#039;&#039;: we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipment over $800.00USD&#039;&#039;&#039; UPS will collect Entry Preparation Fees directly from you when delivering the package, and for duty and taxes if applicable.  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Entry Preparation Fees&#039;&#039;&#039;&lt;br /&gt;
:*All rates are in U.S. funds&lt;br /&gt;
:*Rates do not include applicable duties or taxes&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Value for duty|| UPS Standard Service&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$0.00 to $800.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|No Charge&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$800.01 to $1,250.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$28.75&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1,250.01 to $2,500.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$40.50&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Each Additional $1,000.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1.95&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We use UPS Worldwide Express Saver™, and UPS Worldwide Expedited for international locations that cannot be reached with Express Saver.&lt;br /&gt;
&lt;br /&gt;
Goods shipped to an international destination may be subject to import duties and taxes, which are levied once the goods reach your country. Additional charges for customs clearance must be borne by you; we have no control over these charges and cannot predict what they may be. Since customs policies vary widely from country to country, you should contact your local customs office for further information.&lt;br /&gt;
&lt;br /&gt;
===Tracking your order===&lt;br /&gt;
You can track your shipment by going to www.UPS.ca and using the tracking number that was e-mailed to you when your order shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If, when the package arrives there is no one to accept delivery UPS will redeliver 2 more times.  This is standard UPS protocol.  If delivery fails they will keep the package for 5 days and then return it to us. We will then refund you the cost you paid minus the cost of shipping (both directions) and a flat $50 charge to a maximum of the total cost of the package.  This applies to packages which failed delivery due to no one being present as well as packages which were refused delivery by a person at the delivery location.&lt;br /&gt;
&lt;br /&gt;
===Import Restrictions to Russia===&lt;br /&gt;
If you are wanting to ship an order to Russia you MUST have a valid business license number in order to complete the shipment.  This must be added to your account on our website.  To modify the business number, you can go to your account page and edit the &amp;quot;Account Information&amp;quot; section.  This number will then be applied to all orders placed with that account.  The reason for this is best explained by UPS:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Customs authorities in Russia have tightened restrictions on import shipments to Russia, in particular on dutiable shipments sent to private individuals. These shipments are currently under extraordinary scrutiny in an effort to improve accuracy of the accompanying shipping documentation.  These additional requirements lead to an unprecedented number of customs holds and delays in delivery.  UPS has therefore temporarily suspended the acceptance of dutiable shipments sent to private individuals in Russia until further notice.  We regret this step and are confident that, together with the Russian customs authorities, a solution can be found. UPS continues to accept all non-dutiable document shipments to private individuals in Russia and all commercial shipments addressed to businesses.&amp;quot; [http://www.ups.com/content/hr/en/about/news/service_updates/20100526_restrictions.html]&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All returns must be authorized by Phidgets Inc.===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets will take back any unopened product for a period of 30 days from the date of purchase. Just call or e-mail us for a RMA number and ship the product back to Phidgets prepaid and we will refund your credit card as soon as we receive and inspect the returned goods.&lt;br /&gt;
&lt;br /&gt;
Products that are returned after 30 days are subject to a re-stocking charge of 25% of the package&#039;s value (minimum $5.00) to a maximum of $500.&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns after 90 days.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We shipped the wrong/incomplete product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Holiday&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2025&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2026&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 17&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 16&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 18&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 19&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 18&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 4&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 7&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 13&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 12&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11 (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas and New Years&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Varies&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=33925</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=33925"/>
		<updated>2023-08-03T15:12:02Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Unless we are unusually busy most orders received before 12:00 PM Mountain Time - Canada (GMT-07:00) Monday to Friday will be shipped on the same day.&lt;br /&gt;
&lt;br /&gt;
Orders which contain cut to length parts may not necessarily ship same day as there is significant processing time associated with these orders.  &lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
The shipping cost is calculated at Checkout and submitted for your review before you confirm your order. When multiple shipping options are available for your destination, we will list all available options and let you choose.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders which are under $50.00.&lt;br /&gt;
&lt;br /&gt;
If you have your own account with UPS, you can use it and be billed directly by them.  In that case you have more shipping options available to you.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We use UPS Express Saver™ - Overnight delivery, and UPS Standard - 3 to 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the EU===&lt;br /&gt;
&lt;br /&gt;
Effective July 1, 2021, there were significant changes to the European Union’s Value Added Tax (VAT) rules.&lt;br /&gt;
&lt;br /&gt;
# All goods will now require formal customs clearance and are now subject to the VAT related to the country of entry.&lt;br /&gt;
# Online market places are required to charge the VAT upfront for all goods valued intrinsically up to &#039;&#039;&#039;€150&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
These requirements prevent Phidgets Inc. from shipping directly into the EU for goods less than this value.&lt;br /&gt;
&lt;br /&gt;
EU customers ordering goods on our website with a total value less the &#039;&#039;&#039;$200 USD&#039;&#039;&#039; are now encouraged to either:&lt;br /&gt;
* Increase the value of their order to over &#039;&#039;&#039;$200 USD&#039;&#039;&#039; or,&lt;br /&gt;
* Follow the link to our [[Dealers|distributors]] page and place an order through them.&lt;br /&gt;
&lt;br /&gt;
Customers within the EU can still place orders above $200USD and have them shipped directly to them within &lt;br /&gt;
the EU without going through a distributor.&lt;br /&gt;
Please note in these cases customers within the EU are responsible for the VAT. UPS will collect it upon delivery or by invoice after delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
&lt;br /&gt;
====UPS Express Saver™ - Overnight====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments under $800.00USD&#039;&#039;&#039;: we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments over $800.00USD&#039;&#039;&#039;: you are responsible for duty and taxes if applicable and will have to pay UPS directly on top of the shipping cost we put on our invoice.&lt;br /&gt;
&lt;br /&gt;
====UPS Standard - Ground 3 to 5 business days====&lt;br /&gt;
&#039;&#039;&#039;Shipments under $800.00USD&#039;&#039;&#039;: we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipment over $800.00USD&#039;&#039;&#039; UPS will collect Entry Preparation Fees directly from you when delivering the package, and for duty and taxes if applicable.  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Entry Preparation Fees&#039;&#039;&#039;&lt;br /&gt;
:*All rates are in U.S. funds&lt;br /&gt;
:*Rates do not include applicable duties or taxes&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Value for duty|| UPS Standard Service&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$0.00 to $800.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|No Charge&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$800.01 to $1,250.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$28.75&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1,250.01 to $2,500.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$40.50&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Each Additional $1,000.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1.95&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We use UPS Worldwide Express Saver™, and UPS Worldwide Expedited for international locations that cannot be reached with Express Saver.&lt;br /&gt;
&lt;br /&gt;
Goods shipped to an international destination may be subject to import duties and taxes, which are levied once the goods reach your country. Additional charges for customs clearance must be borne by you; we have no control over these charges and cannot predict what they may be. Since customs policies vary widely from country to country, you should contact your local customs office for further information.&lt;br /&gt;
&lt;br /&gt;
===Tracking your order===&lt;br /&gt;
You can track your shipment by going to www.UPS.ca and using the tracking number that was e-mailed to you when your order shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If, when the package arrives there is no one to accept delivery UPS will redeliver 2 more times.  This is standard UPS protocol.  If delivery fails they will keep the package for 5 days and then return it to us. We will then refund you the cost you paid minus the cost of shipping (both directions) and a flat $50 charge to a maximum of the total cost of the package.  This applies to packages which failed delivery due to no one being present as well as packages which were refused delivery by a person at the delivery location.&lt;br /&gt;
&lt;br /&gt;
===Import Restrictions to Russia===&lt;br /&gt;
If you are wanting to ship an order to Russia you MUST have a valid business license number in order to complete the shipment.  This must be added to your account on our website.  To modify the business number, you can go to your account page and edit the &amp;quot;Account Information&amp;quot; section.  This number will then be applied to all orders placed with that account.  The reason for this is best explained by UPS:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Customs authorities in Russia have tightened restrictions on import shipments to Russia, in particular on dutiable shipments sent to private individuals. These shipments are currently under extraordinary scrutiny in an effort to improve accuracy of the accompanying shipping documentation.  These additional requirements lead to an unprecedented number of customs holds and delays in delivery.  UPS has therefore temporarily suspended the acceptance of dutiable shipments sent to private individuals in Russia until further notice.  We regret this step and are confident that, together with the Russian customs authorities, a solution can be found. UPS continues to accept all non-dutiable document shipments to private individuals in Russia and all commercial shipments addressed to businesses.&amp;quot; [http://www.ups.com/content/hr/en/about/news/service_updates/20100526_restrictions.html]&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All returns must be authorized by Phidgets Inc.===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets will take back any unopened product for a period of 30 days from the date of purchase. Just call or e-mail us for a RMA number and ship the product back to Phidgets prepaid and we will refund your credit card as soon as we receive and inspect the returned goods.&lt;br /&gt;
&lt;br /&gt;
Products that are returned after 30 days are subject to a re-stocking charge of 25% of the package&#039;s value (minimum $5.00) to a maximum of $500.&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns after 90 days.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We shipped the wrong/incomplete product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Holiday&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2023&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2024&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 20&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 19&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 7&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| March 29&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 22&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 20&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 3&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 7&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 5&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 4&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 2&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 16&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 14&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11 (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas and New Years&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Varies&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Phidget_Manager&amp;diff=33127</id>
		<title>Phidget Manager</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Phidget_Manager&amp;diff=33127"/>
		<updated>2022-03-24T16:41:16Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Overview]]&lt;br /&gt;
==General Overview==&lt;br /&gt;
&lt;br /&gt;
The Phidget Manager is an interface into the device channels available to the Phidget library.  The API is strictly asynchronous, and continuously monitors channels as they attach and detach.&lt;br /&gt;
&lt;br /&gt;
Each Phidget exports one or more device channels, and when a Phidget is plugged into a system (or becomes available over the network), a manager attach event is fired for each channel available from the Phidget.  When the Phidget is removed from the system, a manger detach event is fired for each channel that is no longer available. &lt;br /&gt;
&lt;br /&gt;
It is important to understand the concepts of &#039;&#039;&#039;attach&#039;&#039;&#039; and &#039;&#039;&#039;detach&#039;&#039;&#039; as the they relate to the manager.  A manager attach does not imply that a user channel has attached to a device channel, but that the device channel has &#039;&#039;appeared&#039;&#039;, and the device channel is now ready to be attached to a user channel.  When a user channel closes and detaches from a device channel, a manager event is not fired.  A manager &#039;&#039;&#039;detach&#039;&#039;&#039; event is fired when the Phidget is removed from the system.&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
&lt;br /&gt;
The primary function of a Phidget Manager is to fire an attach event for each new device channel when a Phidget becomes available to a system, and to fire a detach event for each device channel that is no longer available when the Phidget is removed from the system.  For example, when a 1044_0 - PhidgetSpatial is connected, a Phidget Manager would fire three attach events, one for each device channel, as illustrated below:&lt;br /&gt;
&lt;br /&gt;
[[Image:manager22.jpg|link=|850px|alt=]]&lt;br /&gt;
&lt;br /&gt;
==Using the Phidget Manager==&lt;br /&gt;
&lt;br /&gt;
Much like a Phidget channel, a Phidget Manager must be created and opened.  Refer to the {{Phidget22API}} for details.&lt;br /&gt;
&lt;br /&gt;
As soon as a manager is opened the Phidget library will fire an event for each device channel that is currently know to the system.  After those initial events, &#039;&#039;&#039;attach&#039;&#039;&#039; and &#039;&#039;&#039;detach&#039;&#039;&#039; events will be fired when new Phidgets become available or existing Phidget are removed.&lt;br /&gt;
&lt;br /&gt;
In the C programming language, it is not safe to refer to a {{Code|PhidgetHandle}} after an event handler returns, unless {{Code|Phidget_retain()}} is first called ({{Code|Phidget_open()}} and {{Code|Phidget_close()}} retain and release handlers automatically).  The {{Code|PhidgetHandle}} must be released with {{Code|Phidget_release()}} if it has been retained. The object oriented languages supported in the {{Phidget22API}} automatically retain and release handles.&lt;br /&gt;
&lt;br /&gt;
What follows is an example of how to use a manager in C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static void CCONV&lt;br /&gt;
mgrAttachHandler(PhidgetManagerHandle mgr, void *ctx, PhidgetHandle mgrch) {&lt;br /&gt;
&lt;br /&gt;
    PhidgetLog_log(&amp;quot;%P attached&amp;quot;, mgrch);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static void CCONV&lt;br /&gt;
mgrDetachHandler(PhidgetManagerHandle mgr, void *ctx, PhidgetHandle mgrch) {&lt;br /&gt;
&lt;br /&gt;
    PhidgetLog_log(&amp;quot;%P detached&amp;quot;, mgrch);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
main(int argc, char **argv) {&lt;br /&gt;
    PhidgetManagerHandle mgr;&lt;br /&gt;
&lt;br /&gt;
    PhidgetManager_create(&amp;amp;mgr);&lt;br /&gt;
&lt;br /&gt;
    PhidgetManager_setOnAttachHandler(mgr, mgrAttachHandler, NULL);&lt;br /&gt;
    PhidgetManager_setOnDetachHandler(mgr, mgrDetachHandler, NULL);&lt;br /&gt;
&lt;br /&gt;
    PhidgetManager_open(mgr);&lt;br /&gt;
&lt;br /&gt;
    /* Do something long running, like run a GUI threads */&lt;br /&gt;
 &lt;br /&gt;
    /* Now close and delete the manager */&lt;br /&gt;
    PhidgetManager_close(mgr);&lt;br /&gt;
    PhidgetManager_delete(&amp;amp;mgr);&lt;br /&gt;
    exit(0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A further example would be &amp;quot;HelloWorld&amp;quot; for most [[Programming_Resources|supported languages]] uses the Phidget Manager.&lt;br /&gt;
&lt;br /&gt;
==Opening a Manager Channel==&lt;br /&gt;
&lt;br /&gt;
A manager channel passed to a Phidget Manager attach handler is assigned all of the matching parameters for the Phidget device and the device channel the manager channel refers to; however, the manager channel is not attached to the device channel, and is not receiving data and status information from the device.&lt;br /&gt;
&lt;br /&gt;
User code may {{Code|Open()}} a manager channel, and just like a channel created by the user code, the Phidget library will begin trying to match the manager channel with a device channel.  User code may also set attach and detach handlers on the manager channel, and set change event handlers.  The manager channel can be treated exactly the same as a user channel.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Operating_System_Support&amp;diff=32938</id>
		<title>Operating System Support</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Operating_System_Support&amp;diff=32938"/>
		<updated>2021-11-26T15:38:38Z</updated>

		<summary type="html">&lt;p&gt;Burley: updated windows support&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Overview]]&lt;br /&gt;
We provide support for all major operating systems. Select your operating system from the table below and follow the &#039;&#039;Getting Started&#039;&#039; guide in order to set up your machine. If you need to access non-current versions of our drivers you can find them [{{SERVER}}/downloads/phidget22/libraries/ here]. You can find the driver changelog [{{SERVER}}/?view=changelog here].&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #f0f0f0&amp;quot; align=center &lt;br /&gt;
! Operating System || Drivers and Libraries || Direct USB Control || Remote Network Control || Supported Version&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;|&#039;&#039;&#039;Desktop OSes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Windows.png|alt=OS - Windows|24x24px|link=OS - Windows]][[OS - Windows|Windows]] &lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - Windows#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| Windows 8 or Newer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Mac-OS.png|alt=OS - macOS|24x24px|link=OS - macOS]][[OS - macOS|macOS]] &lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - macOS#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| OS X 10.5 or newer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Linux.png|alt=OS - Linux|24x24px|link=OS - Linux]][[OS - Linux|Linux]] &lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - Linux#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| Kernel 2.6 or newer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;|&#039;&#039;&#039;Mobile/Wireless OSes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Phidgets.png|alt=OS - Phidget SBC|24x24px|link=OS - Phidget SBC]][[OS - Phidget SBC|Phidget SBC]]&lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - Phidget SBC#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| All versions&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-iOS.png|alt=OS - iOS|link=OS - iOS|24x24px]][[OS - iOS|iOS]] &lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - iOS#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #E28585&amp;quot; align=center| X&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| 8.0 or newer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Android.png|alt=OS - Android|24x24px|link=OS_-_Android]] [[OS_-_Android|Android]]&lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS_-_Android#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| 4.1 (Jellybean) or newer&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Phidget_Dictionary&amp;diff=30934</id>
		<title>Phidget Dictionary</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Phidget_Dictionary&amp;diff=30934"/>
		<updated>2019-03-06T17:53:09Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Overview]]&lt;br /&gt;
==General Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Dictionary-networkserver.jpg|600px|link=|alt=]]&lt;br /&gt;
&lt;br /&gt;
The Dictionary is a Phidget channel class that exports a key-value pair database.  Dictionaries are created and made accessible by the [[Phidget Network Server]].  A Dictionary channel is created and opened like any other Phidget channel.  Matching is done using either the serial number or the label assigned to the dictionary.&lt;br /&gt;
&lt;br /&gt;
The backing pseudo-device that exports the Dictionary device channel is maintained by the [[Phidget Network Server]], and is created when the server starts.  When the server exits, the pseudo-device is deleted, and any changes made to a dictionary are lost.&lt;br /&gt;
&lt;br /&gt;
The basic functionality of a Dictionary is to maintain configuration information in a central location.  Multiple clients can attach to the same dictionary, and set handlers for &#039;&#039;add&#039;&#039;, &#039;&#039;update&#039;&#039; and &#039;&#039;delete&#039;&#039; events, making the dictionary useful for monitoring and communicating state.&lt;br /&gt;
&lt;br /&gt;
==Creating a Dictionary==&lt;br /&gt;
Dictionaries are managed by the [[Phidget Network Server]].  To create a dictionary, go to the [[Phidget Control Panel]] and click on the &#039;&#039;&#039;Network Server&#039;&#039;&#039; tab.  There are options to create and manage dictionaries.  The server must be enabled for clients to access dictionaries.&lt;br /&gt;
&lt;br /&gt;
On Linux, refer to the README for information on how to enable the dictionary feature in the [[Phidget Network Server]], and for the syntax of dictionary configuration files.&lt;br /&gt;
&lt;br /&gt;
==Using The Dictionary==&lt;br /&gt;
&lt;br /&gt;
To access a dictionary, create a channel, set the serial number or the label, and open the channel.&lt;br /&gt;
To &amp;quot;listen&amp;quot; for changes to the Dictionary,  {{Code|onAdd()}}, {{Code|onRemove()}}, and {{Code|onUpdate()}} event handlers can be set.  Refer to the {{Phidget22API}} to see the methods supported by Dictionary. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example of how you might use the dictionary in a C program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PhidgetDictionaryHandle dict;&lt;br /&gt;
char val[32];&lt;br /&gt;
&lt;br /&gt;
PhidgetDictionary_create(&amp;amp;dict);&lt;br /&gt;
&lt;br /&gt;
// Open connection to the dictionary using the serial number&lt;br /&gt;
Phidget_setDeviceSerialNumber(dict, 5000);&lt;br /&gt;
Phidget_open(dict);&lt;br /&gt;
&lt;br /&gt;
PhidgetDictionary_add(dict, &amp;quot;my_key&amp;quot;, &amp;quot;my_value&amp;quot;); // add a key that does not already exist &lt;br /&gt;
PhidgetDictionary_get(dict, &amp;quot;my_key&amp;quot;, val, sizeof (val)); // get the value back&lt;br /&gt;
printf(&amp;quot;Value: %s\n&amp;quot;,newValue);&lt;br /&gt;
&lt;br /&gt;
PhidgetDictionary_remove(dict, &amp;quot;my_key&amp;quot;); // remove the key&lt;br /&gt;
&lt;br /&gt;
Phidget_close(dict);&lt;br /&gt;
PhidgetDictionary_delete(&amp;amp;dict);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
A common mistake is to assume an event will be delivered to the channel that triggered the event.  This is not the case.  For example, when a channel adds a key, that channel&#039;s add event handler is not called.&lt;br /&gt;
&lt;br /&gt;
It is an error to {{Code|Add()}} a key that already exists in the dictionary.  {{Code|Set()}} should be used to update existing keys, creating the key if it does not already exist.&lt;br /&gt;
&lt;br /&gt;
There is no way to directly list all of the keys in a dictionary.  The {{Code|Scan()}} method allows code to access the existing keys, but only returns the number of keys that can be held in a limited sized buffer.  This interface was chosen as the dictionary could contain more keys than could reasonably be returned in a single network request.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Phidget_Dictionary&amp;diff=30933</id>
		<title>Phidget Dictionary</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Phidget_Dictionary&amp;diff=30933"/>
		<updated>2019-03-06T17:50:38Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Overview]]&lt;br /&gt;
==General Overview==&lt;br /&gt;
&lt;br /&gt;
[[Image:Dictionary-networkserver.jpg|600px|link=|alt=]]&lt;br /&gt;
&lt;br /&gt;
The Dictionary is a Phidget channel class that exports a key-value pair database.  Dictionaries are created and made accessible by the [[Phidget Network Server]].  A Dictionary channel is created and opened like any other Phidget channel.  Matching is done using either the serial number or the label assigned to the dictionary.&lt;br /&gt;
&lt;br /&gt;
The backing pseudo-device that exports the Dictionary device channel is maintained by the [[Phidget Network Server]], and is created when the server starts.  When the server exits, the pseudo-device is deleted, and any changes made to a dictionary are lost.&lt;br /&gt;
&lt;br /&gt;
The basic functionality of a Dictionary is to maintain configuration information in a central location.  Multiple clients can attach to the same dictionary, and set handlers for &#039;&#039;add&#039;&#039;, &#039;&#039;update&#039;&#039; and &#039;&#039;delete&#039;&#039; events, making the dictionary useful for monitoring and communicating state.&lt;br /&gt;
&lt;br /&gt;
==Creating a Dictionary==&lt;br /&gt;
Dictionaries are managed by the [[Phidget Network Server]].  To create a dictionary, go to the [[Phidget Control Panel]] and click on the &#039;&#039;&#039;Network Server&#039;&#039;&#039; tab.  There are options to create and manage dictionaries.  The server must be enabled for clients to access dictionaries.&lt;br /&gt;
&lt;br /&gt;
On Linux, refer to the README for information on how to enable the dictionary feature in the [[Phidget Network Server]], and for the syntax of dictionary configuration files.&lt;br /&gt;
&lt;br /&gt;
==Using The Dictionary==&lt;br /&gt;
&lt;br /&gt;
To access a dictionary, create a channel, set the serial number or the label, and open the channel.&lt;br /&gt;
To &amp;quot;listen&amp;quot; for changes to the Dictionary,  {{Code|onAdd()}}, {{Code|onRemove()}}, and {{Code|onUpdate()}} event handlers can be set.  Refer to the {{Phidget22API}} to see the methods supported by Dictionary. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example of how you might use the dictionary in a C program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PhidgetDictionaryHandle dict;&lt;br /&gt;
char val[32];&lt;br /&gt;
&lt;br /&gt;
PhidgetDictionary_create(&amp;amp;dict);&lt;br /&gt;
&lt;br /&gt;
// Open connection to the dictionary using the serial number&lt;br /&gt;
Phidget_setDeviceSerialNumber(dict, 5000);&lt;br /&gt;
Phidget_open(dict);&lt;br /&gt;
&lt;br /&gt;
PhidgetDictionary_add(dict, &amp;quot;my_key&amp;quot;, &amp;quot;my_value&amp;quot;); // add a key that does not already exist &lt;br /&gt;
PhidgetDictionary_get(dict, &amp;quot;my_key&amp;quot;, val, sizeof (val)); // get the value back&lt;br /&gt;
printf(&amp;quot;Value: %s\n&amp;quot;,newValue);&lt;br /&gt;
&lt;br /&gt;
PhidgetDictionary_remove(dict, &amp;quot;my_key&amp;quot;); // remove the key&lt;br /&gt;
&lt;br /&gt;
Phidget_close(dict);&lt;br /&gt;
PhidgetDictionary_delete(&amp;amp;dict);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
A common mistake is to assume an event will be delivered to the channel that triggered the event.  This is not the case.  For example, when a channel adds a key, that channel&#039;s add event handler is not called.&lt;br /&gt;
&lt;br /&gt;
It is an error to {{Code|Add()}} a key that already exists in the dictionary.  {{Code|Set()}} should be used to update existing keys, creating the key if it does not already exist.&lt;br /&gt;
&lt;br /&gt;
There is no way to directly list all of the keys in a dictionary.  The {{Code|Scan()}} method allows code to access the existing keys, but only returns the number of keys that can be held in a limited sized buffer.  This interface was chosen as the dictionary could contain more keys than could reasonably returned in a single network request.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Handling_Errors_and_Logging&amp;diff=30932</id>
		<title>Handling Errors and Logging</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Handling_Errors_and_Logging&amp;diff=30932"/>
		<updated>2019-03-06T17:35:57Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]{{Recommended_Flow_Links|{{Flow Page Number|{{PAGENAME}} }} }}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
You&#039;ve written your code, fixed the compiler errors, and yet, the program still isn&#039;t behaving as intended. The tools described on this page will help you further debug your program and figure out where in the code things are going wrong.&lt;br /&gt;
&lt;br /&gt;
==Errors and Error Events==&lt;br /&gt;
&lt;br /&gt;
The Phidget library uses errors and error events to communicate information about potential problems in your program. These can happen in-line in the form of an exception or error code (which generally indicate a problem in the code), and as Error Events (which generally indicate a problem with the Phidget&#039;s environment).&lt;br /&gt;
&lt;br /&gt;
===Errors from Function Calls===&lt;br /&gt;
&lt;br /&gt;
When a call to a Phidgets function fails it will throw an exception (or return an error code, depending on the language). It is important to check each function call for errors, and to catch and handle any errors.&lt;br /&gt;
&lt;br /&gt;
Common causes of this type of error are the Phidget not being attached, or one of the values provided to the function being outside the valid range.&lt;br /&gt;
&lt;br /&gt;
You can handle exceptions and return codes as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
    ch.openWaitForAttachment(5000);&lt;br /&gt;
except PhidgetException as e:&lt;br /&gt;
    print(&amp;quot;Failed to open: &amp;quot; + e.details)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
    ch.open(5000);&lt;br /&gt;
} catch (PhidgetException ex) {&lt;br /&gt;
    System.out.println(&amp;quot;Failed to open: &amp;quot; + ex.getMessage());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
    ch.Open(); //open the device&lt;br /&gt;
}&lt;br /&gt;
catch (PhidgetException ex)&lt;br /&gt;
{&lt;br /&gt;
    Console.WriteLine(&amp;quot;Failed to open: &amp;quot; + ex.Description)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
PhidgetDigitalInputHandle ch;&lt;br /&gt;
PhidgetReturnCode res;&lt;br /&gt;
...    &lt;br /&gt;
res = Phidget_openWaitForAttachment((PhidgetHandle)ch, 5000);&lt;br /&gt;
if (res != EPHIDGET_OK) {&lt;br /&gt;
    char* desc;&lt;br /&gt;
    Phidget_getErrorDescription(res, &amp;amp;desc);&lt;br /&gt;
    printf(&amp;quot;Failed to open: (%d) %s\n&amp;quot;, res, desc);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The consequences of not handling errors correctly ranges from improper behavior, to the program crashing due to an unhandled exception.  Programs should check for errors on each function call, and handle any errors.&lt;br /&gt;
&lt;br /&gt;
====Error Codes====&lt;br /&gt;
&lt;br /&gt;
A list of error codes can be found in the {{Phidget22API}}.&lt;br /&gt;
&lt;br /&gt;
===Error Events===&lt;br /&gt;
&lt;br /&gt;
Error events are asynchronously generated by Phidget devices, and by the Phidget library itself. &lt;br /&gt;
&lt;br /&gt;
These do not necessarily indicate a problem with your program, and often serve as a status update from your device that your program should know. For example, a DistanceSensor might send an OutOfRange error if it does not detect anything in its field of view, or a TemperatureSensor could send a Saturation error indicating its temperature reading is outside the valid range for the sensor.&lt;br /&gt;
&lt;br /&gt;
Error events are also fired when network errors occur, or when the library is unable to handle incoming change events quickly enough (event handlers could be too slow).&lt;br /&gt;
&lt;br /&gt;
We strongly recommend setting up an error event handler for your channels so your program can keep track of these error conditions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#Declare the event handler&lt;br /&gt;
def onErrorHandler(self, code, description):&lt;br /&gt;
    print(&amp;quot;Code: &amp;quot; + str(code))&lt;br /&gt;
    print(&amp;quot;Description: &amp;quot; + description)&lt;br /&gt;
...&lt;br /&gt;
#Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget&lt;br /&gt;
ch = DigitalInput()&lt;br /&gt;
...&lt;br /&gt;
#Assign the handler that will be called when the event occurs&lt;br /&gt;
ch.setOnErrorHandler(onErrorHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
//Declare the event listener&lt;br /&gt;
public static ErrorListener onError = new ErrorListener() {&lt;br /&gt;
    @Override&lt;br /&gt;
    public void onError(ErrorEvent e) {&lt;br /&gt;
        System.out.println(&amp;quot;Code: &amp;quot; + e.getCode());&lt;br /&gt;
        System.out.println(&amp;quot;Description: &amp;quot; + e.getDescription());&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the event listener that will be called when the event occurs&lt;br /&gt;
ch.addErrorListener(onError);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
//Declare the event handler&lt;br /&gt;
void error(object sender, Phidget22.Events.ErrorEventArgs e) {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Code: &amp;quot; + e.Code.ToString());&lt;br /&gt;
    Console.WriteLine(&amp;quot;Description: &amp;quot; + e.Description);&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the handler that will be called when the event occurs&lt;br /&gt;
ch.Error += error;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
//Declare the event handler&lt;br /&gt;
static void CCONV onErrorHandler(PhidgetHandle ph, void *ctx, Phidget_ErrorEventCode code, const char* description) {&lt;br /&gt;
    printf(&amp;quot;Code: %d\n&amp;quot;, code);&lt;br /&gt;
    printf(&amp;quot;Description: %s\n&amp;quot;, description);&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;PhidgetDigitalInputHandle&amp;quot; with the handle for your Phidget object.&lt;br /&gt;
PhidgetDigitalInputHandle ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the handler that will be called when the event occurs&lt;br /&gt;
Phidget_setOnErrorHandler((PhidgetHandle)ch, onErrorHandler, NULL);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Full descriptions of all error event codes can be found in the [[Error Event Code List]] page.&lt;br /&gt;
&lt;br /&gt;
==Logging==&lt;br /&gt;
You can enable logging to get more debugging information. This would happen at the very start of your program, before even initializing your software object or opening it. Logging lets you get feedback from the Phidget libraries about things happening behind the scenes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
Log.enable(Phidget22.LogLevel.LogLevel.PHIDGET_LOG_INFO, &amp;quot;path/to/log/file.log&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
Log.enable(LogLevel.INFO, null);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
Log.Enable(LogLevel.Info, null);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
PhidgetLog_enable(PHIDGET_LOG_INFO, NULL);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; is passed to &amp;lt;code&amp;gt;enable()&amp;lt;/code&amp;gt; in the above examples, the logging system will output to &amp;lt;code&amp;gt;STDERR&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
For a more comprehensive look at the logging system in Phidget22, you can check out the [[Logging Details]] page.&lt;br /&gt;
&lt;br /&gt;
== Other Problems ==&lt;br /&gt;
&lt;br /&gt;
If your Phidget is still not behaving as expected after handling errors and exceptions, have a look at our [[General Troubleshooting]] guide to track down the problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Flow_Navigation_Buttons|{{Flow Page Number|{{PAGENAME}} }} }}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Handling_Errors_and_Logging&amp;diff=30931</id>
		<title>Handling Errors and Logging</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Handling_Errors_and_Logging&amp;diff=30931"/>
		<updated>2019-03-06T17:35:19Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]{{Recommended_Flow_Links|{{Flow Page Number|{{PAGENAME}} }} }}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
You&#039;ve written your code, fixed the compiler errors, and yet, the program still isn&#039;t behaving as intended. The tools described on this page will help you further debug your program and figure out where in the code things are going wrong.&lt;br /&gt;
&lt;br /&gt;
==Errors and Error Events==&lt;br /&gt;
&lt;br /&gt;
The Phidget library uses errors and error events to communicate information about potential problems in your program. These can happen in-line in the form of an exception or error code (which generally indicate a problem in the code), and as Error Events (which generally indicate a problem with the Phidget&#039;s environment).&lt;br /&gt;
&lt;br /&gt;
===Errors from Function Calls===&lt;br /&gt;
&lt;br /&gt;
When a call to a Phidgets function fails it will throw an exception (or return an error code, depending on the language). It is important to check each function call for errors, and to catch and handle any errors.&lt;br /&gt;
&lt;br /&gt;
Common causes of these type of errors are the Phidget not being attached, or one of the values provided to the function being outside the valid range.&lt;br /&gt;
&lt;br /&gt;
You can handle exceptions and return codes as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
    ch.openWaitForAttachment(5000);&lt;br /&gt;
except PhidgetException as e:&lt;br /&gt;
    print(&amp;quot;Failed to open: &amp;quot; + e.details)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
    ch.open(5000);&lt;br /&gt;
} catch (PhidgetException ex) {&lt;br /&gt;
    System.out.println(&amp;quot;Failed to open: &amp;quot; + ex.getMessage());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
    ch.Open(); //open the device&lt;br /&gt;
}&lt;br /&gt;
catch (PhidgetException ex)&lt;br /&gt;
{&lt;br /&gt;
    Console.WriteLine(&amp;quot;Failed to open: &amp;quot; + ex.Description)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
PhidgetDigitalInputHandle ch;&lt;br /&gt;
PhidgetReturnCode res;&lt;br /&gt;
...    &lt;br /&gt;
res = Phidget_openWaitForAttachment((PhidgetHandle)ch, 5000);&lt;br /&gt;
if (res != EPHIDGET_OK) {&lt;br /&gt;
    char* desc;&lt;br /&gt;
    Phidget_getErrorDescription(res, &amp;amp;desc);&lt;br /&gt;
    printf(&amp;quot;Failed to open: (%d) %s\n&amp;quot;, res, desc);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The consequences of not handling errors correctly ranges from improper behavior, to the program crashing due to an unhandled exception.  Programs should check for errors on each function call, and handle any errors.&lt;br /&gt;
&lt;br /&gt;
====Error Codes====&lt;br /&gt;
&lt;br /&gt;
A list of error codes can be found in the {{Phidget22API}}.&lt;br /&gt;
&lt;br /&gt;
===Error Events===&lt;br /&gt;
&lt;br /&gt;
Error events are asynchronously generated by Phidget devices, and by the Phidget library itself. &lt;br /&gt;
&lt;br /&gt;
These do not necessarily indicate a problem with your program, and often serve as a status update from your device that your program should know. For example, a DistanceSensor might send an OutOfRange error if it does not detect anything in its field of view, or a TemperatureSensor could send a Saturation error indicating its temperature reading is outside the valid range for the sensor.&lt;br /&gt;
&lt;br /&gt;
Error events are also fired when network errors occur, or when the library is unable to handle incoming change events quickly enough (event handlers could be too slow).&lt;br /&gt;
&lt;br /&gt;
We strongly recommend setting up an error event handler for your channels so your program can keep track of these error conditions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#Declare the event handler&lt;br /&gt;
def onErrorHandler(self, code, description):&lt;br /&gt;
    print(&amp;quot;Code: &amp;quot; + str(code))&lt;br /&gt;
    print(&amp;quot;Description: &amp;quot; + description)&lt;br /&gt;
...&lt;br /&gt;
#Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget&lt;br /&gt;
ch = DigitalInput()&lt;br /&gt;
...&lt;br /&gt;
#Assign the handler that will be called when the event occurs&lt;br /&gt;
ch.setOnErrorHandler(onErrorHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
//Declare the event listener&lt;br /&gt;
public static ErrorListener onError = new ErrorListener() {&lt;br /&gt;
    @Override&lt;br /&gt;
    public void onError(ErrorEvent e) {&lt;br /&gt;
        System.out.println(&amp;quot;Code: &amp;quot; + e.getCode());&lt;br /&gt;
        System.out.println(&amp;quot;Description: &amp;quot; + e.getDescription());&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the event listener that will be called when the event occurs&lt;br /&gt;
ch.addErrorListener(onError);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
//Declare the event handler&lt;br /&gt;
void error(object sender, Phidget22.Events.ErrorEventArgs e) {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Code: &amp;quot; + e.Code.ToString());&lt;br /&gt;
    Console.WriteLine(&amp;quot;Description: &amp;quot; + e.Description);&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the handler that will be called when the event occurs&lt;br /&gt;
ch.Error += error;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
//Declare the event handler&lt;br /&gt;
static void CCONV onErrorHandler(PhidgetHandle ph, void *ctx, Phidget_ErrorEventCode code, const char* description) {&lt;br /&gt;
    printf(&amp;quot;Code: %d\n&amp;quot;, code);&lt;br /&gt;
    printf(&amp;quot;Description: %s\n&amp;quot;, description);&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;PhidgetDigitalInputHandle&amp;quot; with the handle for your Phidget object.&lt;br /&gt;
PhidgetDigitalInputHandle ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the handler that will be called when the event occurs&lt;br /&gt;
Phidget_setOnErrorHandler((PhidgetHandle)ch, onErrorHandler, NULL);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Full descriptions of all error event codes can be found in the [[Error Event Code List]] page.&lt;br /&gt;
&lt;br /&gt;
==Logging==&lt;br /&gt;
You can enable logging to get more debugging information. This would happen at the very start of your program, before even initializing your software object or opening it. Logging lets you get feedback from the Phidget libraries about things happening behind the scenes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
Log.enable(Phidget22.LogLevel.LogLevel.PHIDGET_LOG_INFO, &amp;quot;path/to/log/file.log&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
Log.enable(LogLevel.INFO, null);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
Log.Enable(LogLevel.Info, null);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
PhidgetLog_enable(PHIDGET_LOG_INFO, NULL);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; is passed to &amp;lt;code&amp;gt;enable()&amp;lt;/code&amp;gt; in the above examples, the logging system will output to &amp;lt;code&amp;gt;STDERR&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
For a more comprehensive look at the logging system in Phidget22, you can check out the [[Logging Details]] page.&lt;br /&gt;
&lt;br /&gt;
== Other Problems ==&lt;br /&gt;
&lt;br /&gt;
If your Phidget is still not behaving as expected after handling errors and exceptions, have a look at our [[General Troubleshooting]] guide to track down the problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Flow_Navigation_Buttons|{{Flow Page Number|{{PAGENAME}} }} }}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Using_Multiple_Phidgets&amp;diff=30930</id>
		<title>Using Multiple Phidgets</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Using_Multiple_Phidgets&amp;diff=30930"/>
		<updated>2019-03-06T17:30:18Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]{{Recommended_Flow_Links|{{Flow Page Number|{{PAGENAME}} }} }}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Chances are your project with Phidgets is going to involve more than one Phidget channel. Luckily, making a program that deals with multiple Phidgets is done in much the same way as making a program that only deals with one.&lt;br /&gt;
&lt;br /&gt;
This video explains the process of using multiple Phidgets in your program:&lt;br /&gt;
&amp;lt;center&amp;gt;{{#ev:youtube|c3M8d0nBP4c}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==The Basics==&lt;br /&gt;
&lt;br /&gt;
To use more than one Phidget channel in you program, simply repeat the &#039;&#039;Create&#039;&#039;, &#039;&#039;Address&#039;&#039;, and, &#039;&#039;Open&#039;&#039; process for each channel, and remember to &#039;&#039;Close&#039;&#039; them all when done. &lt;br /&gt;
&lt;br /&gt;
===Addressing Channels===&lt;br /&gt;
&lt;br /&gt;
When you are using more than one Phidget channel in your program, you are going to have to specify some addressing parameters to ensure each software channel connects to the right Phidget.&lt;br /&gt;
&lt;br /&gt;
Full descriptions of all the addressing parameters can be found on the [[Addressing Phidgets]] page.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
For example, to open two Phidgets, the code might be:&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#Set up the first channel as normal&lt;br /&gt;
ch = TemperatureSensor()&lt;br /&gt;
ch.setDeviceSerialNumber(12345)&lt;br /&gt;
ch.setHubPort(4)&lt;br /&gt;
ch.setChannel(0)&lt;br /&gt;
ch.openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
#For a second channel, simply repeat the process with different addressing information&lt;br /&gt;
ch1 = TemperatureSensor()&lt;br /&gt;
ch1.setDeviceSerialNumber(12345)&lt;br /&gt;
ch1.setHubPort(3)&lt;br /&gt;
ch1.setChannel(0)&lt;br /&gt;
ch1.openWaitForAttachment(5000)&lt;br /&gt;
 &lt;br /&gt;
#Do stuff with your Phidgets here...&lt;br /&gt;
&lt;br /&gt;
#Remember to close the channels when done&lt;br /&gt;
ch.close()&lt;br /&gt;
ch1.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
//Set up the first channel as normal&lt;br /&gt;
TemperatureSensor ch = new TemperatureSensor();&lt;br /&gt;
ch.setDeviceSerialNumber(12345);&lt;br /&gt;
ch.setHubPort(4);&lt;br /&gt;
ch.setChannel(0);&lt;br /&gt;
ch.open(5000);&lt;br /&gt;
&lt;br /&gt;
//For a second channel, simply repeat the process with different addressing information&lt;br /&gt;
TemperatureSensor ch1 = new TemperatureSensor();&lt;br /&gt;
ch1.setDeviceSerialNumber(12345); &lt;br /&gt;
ch1.setHubPort(3);&lt;br /&gt;
ch1.setChannel(0);&lt;br /&gt;
ch1.open(5000);&lt;br /&gt;
 &lt;br /&gt;
//Do stuff with your Phidgets here...&lt;br /&gt;
&lt;br /&gt;
//Remember to close the channels when done&lt;br /&gt;
ch.close();&lt;br /&gt;
ch1.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
//Set up the first channel as normal&lt;br /&gt;
TemperatureSensor ch = new TemperatureSensor();&lt;br /&gt;
ch.DeviceSerialNumber = 12345;&lt;br /&gt;
ch.HubPort = 4;&lt;br /&gt;
ch.Channel = 0;&lt;br /&gt;
ch.Open(5000);&lt;br /&gt;
&lt;br /&gt;
//For a second channel, simply repeat the process with different addressing information&lt;br /&gt;
TemperatureSensor ch1 = new TemperatureSensor();&lt;br /&gt;
ch1.DeviceSerialNumber = 12345; &lt;br /&gt;
ch1.HubPort = 3;&lt;br /&gt;
ch1.Channel = 0;&lt;br /&gt;
ch1.Open(5000);&lt;br /&gt;
 &lt;br /&gt;
//Do stuff with your Phidgets here...&lt;br /&gt;
&lt;br /&gt;
//Remember to close the channels when done&lt;br /&gt;
ch.Close();&lt;br /&gt;
ch1.Close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
//Set up the first channel as normal&lt;br /&gt;
PhidgetTemperatureSensorHandle ch;&lt;br /&gt;
PhidgetTemperatureSensor_create(&amp;amp;ch);&lt;br /&gt;
&lt;br /&gt;
Phidget_setDeviceSerialNumber((PhidgetHandle)ch, 12345);&lt;br /&gt;
Phidget_setHubPort((PhidgetHandle)ch, 4);&lt;br /&gt;
Phidget_setChannel((PhidgetHandle)ch, 0);&lt;br /&gt;
Phidget_openWaitForAttachment((PhidgetHandle)ch, 5000);&lt;br /&gt;
&lt;br /&gt;
//For a second channel, simply repeat the process with different addressing information&lt;br /&gt;
PhidgetTemperatureSensorHandle ch1;&lt;br /&gt;
PhidgetTemperatureSensor_create(&amp;amp;ch1);&lt;br /&gt;
&lt;br /&gt;
Phidget_setDeviceSerialNumber((PhidgetHandle)ch1, 12345);&lt;br /&gt;
Phidget_setHubPort((PhidgetHandle)ch1, 4);&lt;br /&gt;
Phidget_setChannel((PhidgetHandle)ch1, 0);&lt;br /&gt;
Phidget_openWaitForAttachment((PhidgetHandle)ch1, 5000);&lt;br /&gt;
 &lt;br /&gt;
//Do stuff with your Phidgets here...&lt;br /&gt;
&lt;br /&gt;
//Remember to close the channels when done&lt;br /&gt;
Phidget_close((PhidgetHandle)ch);&lt;br /&gt;
Phidget_close((PhidgetHandle)ch1);&lt;br /&gt;
PhidgetTemperatureSensor_delete(&amp;amp;ch);&lt;br /&gt;
PhidgetTemperatureSensor_delete(&amp;amp;ch1);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Similar Phidgets==&lt;br /&gt;
&lt;br /&gt;
If you have a large number of the same Phidget channel and want an easier way to keep track of them all, consider using an array to keep them all together.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#Create the array of Phidget channels&lt;br /&gt;
ch = [DigitalOutput() for i in range (0, 8)]&lt;br /&gt;
&lt;br /&gt;
for i in range (0, 8):&lt;br /&gt;
    #Address, then open the channels&lt;br /&gt;
    ch[i].openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
#Now you can access each channel by its position in the array &lt;br /&gt;
ch[0].setState(True)&lt;br /&gt;
ch[1].setState(False)&lt;br /&gt;
ch[2].setState(False)&lt;br /&gt;
ch[3].setState(True)&lt;br /&gt;
&lt;br /&gt;
for i in range (0, 8):&lt;br /&gt;
    ch[i].close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
//Create an array for your Phidget channels&lt;br /&gt;
DigitalOutput[] ch = new DigitalOutput[8];&lt;br /&gt;
&lt;br /&gt;
for(int i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
    //Create the channels&lt;br /&gt;
    ch[i] = new DigitalOutput();&lt;br /&gt;
    //Address, then open the channels&lt;br /&gt;
    ch[i].open(5000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Now you can access each channel by its position in the array &lt;br /&gt;
ch[0].setState(true);&lt;br /&gt;
ch[1].setState(false);&lt;br /&gt;
ch[2].setState(false);&lt;br /&gt;
ch[3].setState(true);&lt;br /&gt;
&lt;br /&gt;
//Close all channels when done&lt;br /&gt;
for(int i=0; i&amp;lt;8; i++) {&lt;br /&gt;
    ch[i].close();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
//Create an array for your Phidget channels&lt;br /&gt;
DigitalOutput[] ch = new DigitalOutput[8];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Open the channels&lt;br /&gt;
for(int i=0; i&amp;lt;8; i++)&lt;br /&gt;
{&lt;br /&gt;
    //Create the channels&lt;br /&gt;
    ch[i] = new DigitalOutput();&lt;br /&gt;
    //Address, then open the channels&lt;br /&gt;
    ch[i].Open(5000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Now you can access each channel by its position in the array &lt;br /&gt;
ch[0].State = true;&lt;br /&gt;
ch[1].State = false;&lt;br /&gt;
ch[2].State = false;&lt;br /&gt;
ch[3].State = true;&lt;br /&gt;
&lt;br /&gt;
//Close the channels when done&lt;br /&gt;
for(int i=0; i&amp;lt;8; i++)&lt;br /&gt;
{&lt;br /&gt;
    ch[i].Close();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
//Create an array for your Phidget channels&lt;br /&gt;
PhidgetDigitalOutputHandle ch[8];&lt;br /&gt;
&lt;br /&gt;
for (int i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
    //Create the channels&lt;br /&gt;
    PhidgetDigitalOutput_create(&amp;amp;ch[i]);&lt;br /&gt;
    //Address, then open the channels&lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)ch[i], 5000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PhidgetDigitalOutput_setState(ch[0], true);&lt;br /&gt;
PhidgetDigitalOutput_setState(ch[1], false);&lt;br /&gt;
PhidgetDigitalOutput_setState(ch[2], false);&lt;br /&gt;
PhidgetDigitalOutput_setState(ch[3], true);&lt;br /&gt;
&lt;br /&gt;
//Close the channels when done&lt;br /&gt;
for (int i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
    Phidget_close((PhidgetHandle)ch[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Distinguishing Events==&lt;br /&gt;
&lt;br /&gt;
When using [[Polling vs. Events|events]], you can either create separate events for each device, or handle multiple devices with the same event (or some combination of both).  If multiple devices use the same event handler, you can use the addressing properties of the channel to determine which Phidget channel caused the event.&lt;br /&gt;
&lt;br /&gt;
For example, for an Attach Event handler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&lt;br /&gt;
In Python, the channel that fired the event can be accessed from the event handler using the {{code|self}} parameter (the first parameter in the list).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#Declare the event handler&lt;br /&gt;
def onAttachHandler(self):&lt;br /&gt;
    #You can access the Phidget that fired the event using the &amp;quot;self&amp;quot; parameter&lt;br /&gt;
    ph = self&lt;br /&gt;
    deviceSerialNumber = ph.getDeviceSerialNumber()&lt;br /&gt;
...&lt;br /&gt;
#Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidgetch = DigitalInput()&lt;br /&gt;
...&lt;br /&gt;
#Assign the handler that will be called when the event occurs&lt;br /&gt;
ch.setOnAttachHandler(onAttachHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&lt;br /&gt;
In Java, you can call {{code|getSource()}} on the event parameter to get the Phidget that caused the event.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
//Declare the event listener&lt;br /&gt;
public static DigitalInputAttachListener onAttach = new DigitalInputAttachListener() {&lt;br /&gt;
    @Override&lt;br /&gt;
    public void onAttach(AttachEvent e) {&lt;br /&gt;
        //You can access the Phidget that fired the event by calling &amp;quot;getSource()&amp;quot;&lt;br /&gt;
        //on the event parameter.&lt;br /&gt;
        //Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
        DigitalInput ph = (DigitalInput) e.getSource();&lt;br /&gt;
        int deviceSerialNumber = ph.getDeviceSerialNumber();&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the event listener that will be called when the event occurs&lt;br /&gt;
ch.addAttachListener(onAttach);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&lt;br /&gt;
In C#, you can access the Phidget that fired the event by typecasting the {{code|sender}} parameter to the appropriate Phidget object type.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
//Declare the event handler&lt;br /&gt;
void attach(object sender, Phidget22.Events.AttachEventArgs e) {&lt;br /&gt;
    //You can access the Phidget that fired the event by typecasting &amp;quot;sender&amp;quot;&lt;br /&gt;
    //to the appropriate Phidget object type.&lt;br /&gt;
    //Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
    DigitalInput ph = ((DigitalInput)sender);&lt;br /&gt;
    int deviceSerial = ph.DeviceSerialNumber;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the handler that will be called when the event occurs&lt;br /&gt;
ch.Attach += attach;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&lt;br /&gt;
In C, you can access the Phidget that fired the event using the first parameter of the event handler.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
//Declare the event handler&lt;br /&gt;
static void CCONV onAttachHandler(PhidgetHandle ph, void *ctx) {&lt;br /&gt;
    //You can access the Phidget that fired the event by using the first parameter&lt;br /&gt;
    //of the event handler&lt;br /&gt;
    int deviceSerialNumber;&lt;br /&gt;
    Phidget_getDeviceSerialNumber(ph, &amp;amp;deviceSerialNumber);&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;PhidgetDigitalInputHandle&amp;quot; with the handle for your Phidget object.&lt;br /&gt;
PhidgetDigitalInputHandle ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the handler that will be called when the event occurs&lt;br /&gt;
Phidget_setOnAttachHandler((PhidgetHandle)ch, onAttachHandler, NULL);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Referencing Other Phidgets from Events== &lt;br /&gt;
&lt;br /&gt;
When using multiple Phidgets in the same program, you may want to access one Phidget from the within an event caused by another. There are simple ways of doing this for all languages, though the specifics depend on the programming language you are using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&lt;br /&gt;
Python is dynamically interpreted, and objects follow a less rigid structure than in other languages. To access another Phidget from an event handler, you can add the second Phidget&#039;s handle as an attribute of the Phidget object that will be triggering the event. Then, you can access the second Phidget using the corresponding attribute from the {{code|self}} parameter of the event.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
def onStateChangeHandler(self, state):&lt;br /&gt;
    #Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
    if(self.linkedOutput.getAttached()):&lt;br /&gt;
        self.linkedOutput.setState(state)&lt;br /&gt;
&lt;br /&gt;
button = DigitalInput()&lt;br /&gt;
output = DigitalOutput()&lt;br /&gt;
&lt;br /&gt;
#Addressing info here&lt;br /&gt;
&lt;br /&gt;
#Here we create an attribute of input called &amp;quot;linkedOutput&amp;quot;, and assign it the handle for output&lt;br /&gt;
button.linkedOutput = output&lt;br /&gt;
button.setOnStateChangeHandler(onStateChangeHandler)&lt;br /&gt;
&lt;br /&gt;
output.openWaitForAttachment(5000)&lt;br /&gt;
button.openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
# The rest of your code here....&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&lt;br /&gt;
In Java, chances are your event handlers are defined in the same class as the Phidget handles. In this case, you can simply reference Phidgets in the event handlers the same way as you would in the rest of your code.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
public class MultiPhidgetExample {&lt;br /&gt;
    &lt;br /&gt;
    private static DigitalInput button = null;&lt;br /&gt;
    private static DigitalOutput output = null;&lt;br /&gt;
    &lt;br /&gt;
    public static DigitalInputStateChangeListener onStateChange =&lt;br /&gt;
        new DigitalInputStateChangeListener() {&lt;br /&gt;
        @Override&lt;br /&gt;
        public void onStateChange(DigitalInputStateChangeEvent e) {&lt;br /&gt;
&lt;br /&gt;
            //Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
            if(output.getAttached() == true)&lt;br /&gt;
                output.setState(e.getState());&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            button = new DigitalInput();&lt;br /&gt;
	    output = new DigitalOutput();&lt;br /&gt;
&lt;br /&gt;
            //Set Any Addressing Parameters Here&lt;br /&gt;
&lt;br /&gt;
            button.addStateChangeListener(onStateChange);&lt;br /&gt;
&lt;br /&gt;
            output.open(5000);&lt;br /&gt;
            button.open(5000);&lt;br /&gt;
            &lt;br /&gt;
            // The rest of your code here...&lt;br /&gt;
            &lt;br /&gt;
        } catch (PhidgetException ex) {&lt;br /&gt;
            System.out.println(ex.getDescription());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&lt;br /&gt;
In C#, chances are your event handlers are defined in the same class as the Phidget handles. In this case, you can simply reference Phidgets in the event handlers the same way as you would in the rest of your code.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
namespace ConsoleApplication&lt;br /&gt;
{&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        private static DigitalInput button = null;&lt;br /&gt;
        private static DigitalOutput output = null;&lt;br /&gt;
&lt;br /&gt;
        private static void onStateChange(object sender,&lt;br /&gt;
                              DigitalInputStateChangeEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            //Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
            if (output.Attached == true)&lt;br /&gt;
                output.State = e.State;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            button = new DigitalInput();&lt;br /&gt;
            output = new DigitalOutput();&lt;br /&gt;
            &lt;br /&gt;
            //Set Any Addressing Parameters Here&lt;br /&gt;
            &lt;br /&gt;
            button.StateChange += onStateChange;&lt;br /&gt;
&lt;br /&gt;
            output.Open(5000);&lt;br /&gt;
            button.Open(5000);&lt;br /&gt;
            &lt;br /&gt;
            //The rest of your code here...&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&lt;br /&gt;
In C, all event handler declarations have a context pointer that can be pointed at any object you choose. This can be a set of relevant data, or even a Phidget handle. If you pass a Phidget handle as the context pointer for an event, you can access the passed Phidget from the event as follows:&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C&amp;gt;&lt;br /&gt;
static void CCONV onStateChangeHandler(PhidgetDigitalInputHandle pdih, void *ctx, int state) {&lt;br /&gt;
    int attached;&lt;br /&gt;
    //Extract our output handle from the context pointer&lt;br /&gt;
    PhidgetDigitalOutputHandle linkedOutput = (PhidgetDigitalOutputHandle)ctx;&lt;br /&gt;
&lt;br /&gt;
    //Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
    Phidget_getAttached((PhidgetHandle)linkedOutput, &amp;amp;attached);&lt;br /&gt;
&lt;br /&gt;
    if(attached)&lt;br /&gt;
        PhidgetDigitalOutput_setState(linkedOutput, state);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    PhidgetDigitalInputHandle button = NULL;&lt;br /&gt;
    PhidgetDigitalOutputHandle output = NULL;&lt;br /&gt;
&lt;br /&gt;
    PhidgetDigitalInput_create(&amp;amp;button);&lt;br /&gt;
    PhidgetDigitalOutput_create(&amp;amp;output);&lt;br /&gt;
    &lt;br /&gt;
    //Addressing info here&lt;br /&gt;
&lt;br /&gt;
    //Here we pass the handle for &amp;quot;output&amp;quot; as the context pointer so we can access it from the event&lt;br /&gt;
    PhidgetDigitalInput_setOnStateChangeHandler(ch, onStateChangeHandler, output);&lt;br /&gt;
    &lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)output, 5000);&lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)button, 5000);&lt;br /&gt;
&lt;br /&gt;
    //The rest of your code here...&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
JavaScript=&lt;br /&gt;
JavaScript is dynamically interpreted, and objects follow a less rigid structure than in other languages. To access another Phidget from an event handler, you can add the second Phidget&#039;s handle as a property of the Phidget object that will be triggering the event. Then, you can access the second Phidget using the corresponding property from the {{code|this}} parameter of the event.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=javaScript&amp;gt;&lt;br /&gt;
function stateChange(state) {&lt;br /&gt;
    //Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
    if(this.linkedOutput.getAttached())&lt;br /&gt;
        this.linkedOutput.setState(state);&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
    var button = new phidget22.DigitalInput();&lt;br /&gt;
    var output = new phidget22.DigitalOutput();&lt;br /&gt;
...&lt;br /&gt;
    //Here we create an attribute of input called &amp;quot;linkedOutput&amp;quot;, and assign it the handle for output&lt;br /&gt;
    button.linkedOutput = output;&lt;br /&gt;
    button.onStateChange = stateChange;&lt;br /&gt;
&lt;br /&gt;
    output.open();&lt;br /&gt;
    button.open();&lt;br /&gt;
&lt;br /&gt;
    //The rest of your code here...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What&#039;s Next?==&lt;br /&gt;
Now that you know how to use multiple Phidgets in your program, we should discuss how to find the features available to you by using the Phidget22 API.&lt;br /&gt;
&lt;br /&gt;
{{Flow_Navigation_Buttons|{{Flow Page Number|{{PAGENAME}} }} }}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Using_Multiple_Phidgets&amp;diff=30928</id>
		<title>Using Multiple Phidgets</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Using_Multiple_Phidgets&amp;diff=30928"/>
		<updated>2019-03-06T17:27:35Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]{{Recommended_Flow_Links|{{Flow Page Number|{{PAGENAME}} }} }}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Chances are your project with Phidgets is going to involve more than one Phidget channel. Luckily, making a program that deals with multiple Phidgets is done in much the same way as making a program that only deals with one.&lt;br /&gt;
&lt;br /&gt;
This video explains the process of using multiple Phidgets in your program:&lt;br /&gt;
&amp;lt;center&amp;gt;{{#ev:youtube|c3M8d0nBP4c}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==The Basics==&lt;br /&gt;
&lt;br /&gt;
To use more than one Phidget channel in you program, simply repeat the &#039;&#039;Create&#039;&#039;, &#039;&#039;Address&#039;&#039;, and, &#039;&#039;Open&#039;&#039; process for each channel, and remember to &#039;&#039;Close&#039;&#039; them all when done. &lt;br /&gt;
&lt;br /&gt;
===Addressing Channels===&lt;br /&gt;
&lt;br /&gt;
When you are using more than one Phidget channel in your program, you are going to have to specify some addressing parameters to ensure each software channel connects to the right Phidget.&lt;br /&gt;
&lt;br /&gt;
Full descriptions of all the addressing parameters can be found on the [[Addressing Phidgets]] page.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
For example, to open two Phidgets, the code might be:&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#Set up the first channel as normal&lt;br /&gt;
ch = TemperatureSensor()&lt;br /&gt;
ch.setDeviceSerialNumber(12345)&lt;br /&gt;
ch.setHubPort(4)&lt;br /&gt;
ch.setChannel(0)&lt;br /&gt;
ch.openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
#For a second channel, simply repeat the process with different addressing information&lt;br /&gt;
ch1 = TemperatureSensor()&lt;br /&gt;
ch1.setDeviceSerialNumber(12345)&lt;br /&gt;
ch1.setHubPort(3)&lt;br /&gt;
ch1.setChannel(0)&lt;br /&gt;
ch1.openWaitForAttachment(5000)&lt;br /&gt;
 &lt;br /&gt;
#Do stuff with your Phidgets here...&lt;br /&gt;
&lt;br /&gt;
#Remember to close the channels when done&lt;br /&gt;
ch.close()&lt;br /&gt;
ch1.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
//Set up the first channel as normal&lt;br /&gt;
TemperatureSensor ch = new TemperatureSensor();&lt;br /&gt;
ch.setDeviceSerialNumber(12345);&lt;br /&gt;
ch.setHubPort(4);&lt;br /&gt;
ch.setChannel(0);&lt;br /&gt;
ch.open(5000);&lt;br /&gt;
&lt;br /&gt;
//For a second channel, simply repeat the process with different addressing information&lt;br /&gt;
TemperatureSensor ch1 = new TemperatureSensor();&lt;br /&gt;
ch1.setDeviceSerialNumber(12345); &lt;br /&gt;
ch1.setHubPort(3);&lt;br /&gt;
ch1.setChannel(0);&lt;br /&gt;
ch1.open(5000);&lt;br /&gt;
 &lt;br /&gt;
//Do stuff with your Phidgets here...&lt;br /&gt;
&lt;br /&gt;
//Remember to close the channels when done&lt;br /&gt;
ch.close();&lt;br /&gt;
ch1.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
//Set up the first channel as normal&lt;br /&gt;
TemperatureSensor ch = new TemperatureSensor();&lt;br /&gt;
ch.DeviceSerialNumber = 12345;&lt;br /&gt;
ch.HubPort = 4;&lt;br /&gt;
ch.Channel = 0;&lt;br /&gt;
ch.Open(5000);&lt;br /&gt;
&lt;br /&gt;
//For a second channel, simply repeat the process with different addressing information&lt;br /&gt;
TemperatureSensor ch1 = new TemperatureSensor();&lt;br /&gt;
ch1.DeviceSerialNumber = 12345; &lt;br /&gt;
ch1.HubPort = 3;&lt;br /&gt;
ch1.Channel = 0;&lt;br /&gt;
ch1.Open(5000);&lt;br /&gt;
 &lt;br /&gt;
//Do stuff with your Phidgets here...&lt;br /&gt;
&lt;br /&gt;
//Remember to close the channels when done&lt;br /&gt;
ch.Close();&lt;br /&gt;
ch1.Close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
//Set up the first channel as normal&lt;br /&gt;
PhidgetTemperatureSensorHandle ch;&lt;br /&gt;
PhidgetTemperatureSensor_create(&amp;amp;ch);&lt;br /&gt;
&lt;br /&gt;
Phidget_setDeviceSerialNumber((PhidgetHandle)ch, 12345);&lt;br /&gt;
Phidget_setHubPort((PhidgetHandle)ch, 4);&lt;br /&gt;
Phidget_setChannel((PhidgetHandle)ch, 0);&lt;br /&gt;
Phidget_openWaitForAttachment((PhidgetHandle)ch, 5000);&lt;br /&gt;
&lt;br /&gt;
//For a second channel, simply repeat the process with different addressing information&lt;br /&gt;
PhidgetTemperatureSensorHandle ch1;&lt;br /&gt;
PhidgetTemperatureSensor_create(&amp;amp;ch1);&lt;br /&gt;
&lt;br /&gt;
Phidget_setDeviceSerialNumber((PhidgetHandle)ch1, 12345);&lt;br /&gt;
Phidget_setHubPort((PhidgetHandle)ch1, 4);&lt;br /&gt;
Phidget_setChannel((PhidgetHandle)ch1, 0);&lt;br /&gt;
Phidget_openWaitForAttachment((PhidgetHandle)ch1, 5000);&lt;br /&gt;
 &lt;br /&gt;
//Do stuff with your Phidgets here...&lt;br /&gt;
&lt;br /&gt;
//Remember to close the channels when done&lt;br /&gt;
Phidget_close((PhidgetHandle)ch);&lt;br /&gt;
Phidget_close((PhidgetHandle)ch1);&lt;br /&gt;
PhidgetTemperatureSensor_delete(&amp;amp;ch);&lt;br /&gt;
PhidgetTemperatureSensor_delete(&amp;amp;ch1);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Similar Phidgets==&lt;br /&gt;
&lt;br /&gt;
If you have a large number of the same Phidget channel and want an easier way to keep track of them all, consider using an array to keep them all together.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#Create the array of Phidget channels&lt;br /&gt;
ch = [DigitalOutput() for i in range (0, 8)]&lt;br /&gt;
&lt;br /&gt;
for i in range (0, 8):&lt;br /&gt;
    #Address, then open the channels&lt;br /&gt;
    ch[i].openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
#Now you can access each channel by its position in the array &lt;br /&gt;
ch[0].setState(True)&lt;br /&gt;
ch[1].setState(False)&lt;br /&gt;
ch[2].setState(False)&lt;br /&gt;
ch[3].setState(True)&lt;br /&gt;
&lt;br /&gt;
for i in range (0, 8):&lt;br /&gt;
    ch[i].close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
//Create an array for your Phidget channels&lt;br /&gt;
DigitalOutput[] ch = new DigitalOutput[8];&lt;br /&gt;
&lt;br /&gt;
for(int i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
    //Create the channels&lt;br /&gt;
    ch[i] = new DigitalOutput();&lt;br /&gt;
    //Address, then open the channels&lt;br /&gt;
    ch[i].open(5000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Now you can access each channel by its position in the array &lt;br /&gt;
ch[0].setState(true);&lt;br /&gt;
ch[1].setState(false);&lt;br /&gt;
ch[2].setState(false);&lt;br /&gt;
ch[3].setState(true);&lt;br /&gt;
&lt;br /&gt;
//Close all channels when done&lt;br /&gt;
for(int i=0; i&amp;lt;8; i++) {&lt;br /&gt;
    ch[i].close();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
//Create an array for your Phidget channels&lt;br /&gt;
DigitalOutput[] ch = new DigitalOutput[8];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Open the channels&lt;br /&gt;
for(int i=0; i&amp;lt;8; i++)&lt;br /&gt;
{&lt;br /&gt;
    //Create the channels&lt;br /&gt;
    ch[i] = new DigitalOutput();&lt;br /&gt;
    //Address, then open the channels&lt;br /&gt;
    ch[i].Open(5000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Now you can access each channel by its position in the array &lt;br /&gt;
ch[0].State = true;&lt;br /&gt;
ch[1].State = false;&lt;br /&gt;
ch[2].State = false;&lt;br /&gt;
ch[3].State = true;&lt;br /&gt;
&lt;br /&gt;
//Close the channels when done&lt;br /&gt;
for(int i=0; i&amp;lt;8; i++)&lt;br /&gt;
{&lt;br /&gt;
    ch[i].Close();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
//Create an array for your Phidget channels&lt;br /&gt;
PhidgetDigitalOutputHandle ch[8];&lt;br /&gt;
&lt;br /&gt;
for (int i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
    //Create the channels&lt;br /&gt;
    PhidgetDigitalOutput_create(&amp;amp;ch[i]);&lt;br /&gt;
    //Address, then open the channels&lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)ch[i], 5000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PhidgetDigitalOutput_setState(ch[0], true);&lt;br /&gt;
PhidgetDigitalOutput_setState(ch[1], false);&lt;br /&gt;
PhidgetDigitalOutput_setState(ch[2], false);&lt;br /&gt;
PhidgetDigitalOutput_setState(ch[3], true);&lt;br /&gt;
&lt;br /&gt;
//Close the channels when done&lt;br /&gt;
for (int i = 0; i &amp;lt; 8; i++) {&lt;br /&gt;
    Phidget_close((PhidgetHandle)ch[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Distinguishing Events==&lt;br /&gt;
&lt;br /&gt;
When using [[Polling vs. Events|events]], you can either create separate events for each device, or handle multiple devices with the same event (or some combination of both).  If multiple devices use the same event handler, you can use the addressing properties of the channel to determine which Phidget channel caused the event.&lt;br /&gt;
&lt;br /&gt;
For example, for an Attach Event handler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&lt;br /&gt;
In Python, the channel that fired the event can be accessed from the event handler using the {{code|self}} parameter (the first parameter in the list).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#Declare the event handler&lt;br /&gt;
def onAttachHandler(self):&lt;br /&gt;
    #You can access the Phidget that fired the event using the &amp;quot;self&amp;quot; parameter&lt;br /&gt;
    ph = self&lt;br /&gt;
    deviceSerialNumber = ph.getDeviceSerialNumber()&lt;br /&gt;
...&lt;br /&gt;
#Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidgetch = DigitalInput()&lt;br /&gt;
...&lt;br /&gt;
#Assign the handler that will be called when the event occurs&lt;br /&gt;
ch.setOnAttachHandler(onAttachHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&lt;br /&gt;
In Java, you can call {{code|getSource()}} on the event parameter to get the Phidget that caused the event.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
//Declare the event listener&lt;br /&gt;
public static DigitalInputAttachListener onAttach = new DigitalInputAttachListener() {&lt;br /&gt;
    @Override&lt;br /&gt;
    public void onAttach(AttachEvent e) {&lt;br /&gt;
        //You can access the Phidget that fired the event by calling &amp;quot;getSource()&amp;quot;&lt;br /&gt;
        //on the event parameter.&lt;br /&gt;
        //Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
        DigitalInput ph = (DigitalInput) e.getSource();&lt;br /&gt;
        int deviceSerialNumber = ph.getDeviceSerialNumber();&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the event listener that will be called when the event occurs&lt;br /&gt;
ch.addAttachListener(onAttach);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&lt;br /&gt;
In C#, you can access the Phidget that fired the event by typecasting the {{code|sender}} parameter to the appropriate Phidget object type.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
//Declare the event handler&lt;br /&gt;
void attach(object sender, Phidget22.Events.AttachEventArgs e) {&lt;br /&gt;
    //You can access the Phidget that fired the event by typecasting &amp;quot;sender&amp;quot;&lt;br /&gt;
    //to the appropriate Phidget object type.&lt;br /&gt;
    //Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
    DigitalInput ph = ((DigitalInput)sender);&lt;br /&gt;
    int deviceSerial = ph.DeviceSerialNumber;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;DigitalInput&amp;quot; with the object for your Phidget.&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the handler that will be called when the event occurs&lt;br /&gt;
ch.Attach += attach;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&lt;br /&gt;
In C, you can access the Phidget that fired the event using the first parameter of the event handler.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
//Declare the event handler&lt;br /&gt;
static void CCONV onAttachHandler(PhidgetHandle ph, void *ctx) {&lt;br /&gt;
    //You can access the Phidget that fired the event by using the first parameter&lt;br /&gt;
    //of the event handler&lt;br /&gt;
    int deviceSerialNumber;&lt;br /&gt;
    Phidget_getDeviceSerialNumber(ph, &amp;amp;deviceSerialNumber);&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
//Declare your object. Replace &amp;quot;PhidgetDigitalInputHandle&amp;quot; with the handle for your Phidget object.&lt;br /&gt;
PhidgetDigitalInputHandle ch;&lt;br /&gt;
...&lt;br /&gt;
//Assign the handler that will be called when the event occurs&lt;br /&gt;
Phidget_setOnAttachHandler((PhidgetHandle)ch, onAttachHandler, NULL);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Referencing Other Phidgets from Events== &lt;br /&gt;
&lt;br /&gt;
When using multiple Phidgets in the same program, you may want to access one Phidget from the within an event caused by another. There are simple ways of doing this for all languages, though the specifics depend on the programming language you are using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&lt;br /&gt;
Python is dynamically interpreted, and objects follow a less rigid structure than in other languages. To access another Phidget from an event handler, you can add the second Phidget&#039;s handle as an attribute of the Phidget object that will be triggering the event. Then, you can access the second Phidget using the corresponding attribute from the {{code|self}} parameter of the event.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
def onStateChangeHandler(self, state):&lt;br /&gt;
    #Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
    if(self.linkedOutput.getAttached()):&lt;br /&gt;
        self.linkedOutput.setState(state)&lt;br /&gt;
&lt;br /&gt;
button = DigitalInput()&lt;br /&gt;
output = DigitalOutput()&lt;br /&gt;
&lt;br /&gt;
#Addressing info here&lt;br /&gt;
&lt;br /&gt;
#Here we create an attribute of input called &amp;quot;linkedOutput&amp;quot;, and assign it the handle for output&lt;br /&gt;
button.linkedOutput = output&lt;br /&gt;
button.setOnStateChangeHandler(onStateChangeHandler)&lt;br /&gt;
&lt;br /&gt;
output.openWaitForAttachment(5000)&lt;br /&gt;
button.openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
# The rest of your code here....&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&lt;br /&gt;
In Java, chances are your event handlers are defined in the same class as the Phidget handles. In this case, you can simply reference Phidgets in the event handlers the same way as you would in the rest of your code.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
public class MultiPhidgetExample {&lt;br /&gt;
    &lt;br /&gt;
    private static DigitalInput button = null;&lt;br /&gt;
    private static DigitalOutput output = null;&lt;br /&gt;
    &lt;br /&gt;
    public static DigitalInputStateChangeListener onStateChange =&lt;br /&gt;
        new DigitalInputStateChangeListener() {&lt;br /&gt;
        @Override&lt;br /&gt;
        public void onStateChange(DigitalInputStateChangeEvent e) {&lt;br /&gt;
&lt;br /&gt;
            //Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
            if(output.getAttached() == true)&lt;br /&gt;
                output.setState(e.getState());&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            button = new DigitalInput();&lt;br /&gt;
			output = new DigitalOutput();&lt;br /&gt;
&lt;br /&gt;
            //Set Any Addressing Parameters Here&lt;br /&gt;
&lt;br /&gt;
            button.addStateChangeListener(onStateChange);&lt;br /&gt;
&lt;br /&gt;
            output.open(5000);&lt;br /&gt;
            button.open(5000);&lt;br /&gt;
            &lt;br /&gt;
            // The rest of your code here...&lt;br /&gt;
            &lt;br /&gt;
        } catch (PhidgetException ex) {&lt;br /&gt;
            System.out.println(ex.getDescription());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&lt;br /&gt;
In C#, chances are your event handlers are defined in the same class as the Phidget handles. In this case, you can simply reference Phidgets in the event handlers the same way as you would in the rest of your code.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
namespace ConsoleApplication&lt;br /&gt;
{&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        private static DigitalInput button = null;&lt;br /&gt;
        private static DigitalOutput output = null;&lt;br /&gt;
&lt;br /&gt;
        private static void onStateChange(object sender,&lt;br /&gt;
                              DigitalInputStateChangeEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            //Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
            if (output.Attached == true)&lt;br /&gt;
                output.State = e.State;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            button = new DigitalInput();&lt;br /&gt;
            output = new DigitalOutput();&lt;br /&gt;
            &lt;br /&gt;
            //Set Any Addressing Parameters Here&lt;br /&gt;
            &lt;br /&gt;
            button.StateChange += onStateChange;&lt;br /&gt;
&lt;br /&gt;
            output.Open(5000);&lt;br /&gt;
            button.Open(5000);&lt;br /&gt;
            &lt;br /&gt;
            //The rest of your code here...&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&lt;br /&gt;
In C, all event handler declarations have a context pointer that can be pointed at any object you choose. This can be a set of relevant data, or even a Phidget handle. If you pass a Phidget handle as the context pointer for an event, you can access the passed Phidget from the event as follows:&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C&amp;gt;&lt;br /&gt;
static void CCONV onStateChangeHandler(PhidgetDigitalInputHandle pdih, void *ctx, int state) {&lt;br /&gt;
    int attached;&lt;br /&gt;
    //Extract our output handle from the context pointer&lt;br /&gt;
    PhidgetDigitalOutputHandle linkedOutput = (PhidgetDigitalOutputHandle)ctx;&lt;br /&gt;
&lt;br /&gt;
    //Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
    Phidget_getAttached((PhidgetHandle)linkedOutput, &amp;amp;attached);&lt;br /&gt;
&lt;br /&gt;
    if(attached)&lt;br /&gt;
        PhidgetDigitalOutput_setState(linkedOutput, state);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    PhidgetDigitalInputHandle button = NULL;&lt;br /&gt;
    PhidgetDigitalOutputHandle output = NULL;&lt;br /&gt;
&lt;br /&gt;
    PhidgetDigitalInput_create(&amp;amp;button);&lt;br /&gt;
    PhidgetDigitalOutput_create(&amp;amp;output);&lt;br /&gt;
    &lt;br /&gt;
    //Addressing info here&lt;br /&gt;
&lt;br /&gt;
    //Here we pass the handle for &amp;quot;output&amp;quot; as the context pointer so we can access it from the event&lt;br /&gt;
    PhidgetDigitalInput_setOnStateChangeHandler(ch, onStateChangeHandler, output);&lt;br /&gt;
    &lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)output, 5000);&lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)button, 5000);&lt;br /&gt;
&lt;br /&gt;
    //The rest of your code here...&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
JavaScript=&lt;br /&gt;
JavaScript is dynamically interpreted, and objects follow a less rigid structure than in other languages. To access another Phidget from an event handler, you can add the second Phidget&#039;s handle as a property of the Phidget object that will be triggering the event. Then, you can access the second Phidget using the corresponding property from the {{code|this}} parameter of the event.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to make a Digital Output channel follow the state of a button:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=javaScript&amp;gt;&lt;br /&gt;
function stateChange(state) {&lt;br /&gt;
    //Be sure the other Phidget you are trying to access is attached before using it&lt;br /&gt;
    if(this.linkedOutput.getAttached())&lt;br /&gt;
        this.linkedOutput.setState(state);&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
    var button = new phidget22.DigitalInput();&lt;br /&gt;
    var output = new phidget22.DigitalOutput();&lt;br /&gt;
...&lt;br /&gt;
    //Here we create an attribute of input called &amp;quot;linkedOutput&amp;quot;, and assign it the handle for output&lt;br /&gt;
    button.linkedOutput = output;&lt;br /&gt;
    button.onStateChange = stateChange;&lt;br /&gt;
&lt;br /&gt;
    output.open();&lt;br /&gt;
    button.open();&lt;br /&gt;
&lt;br /&gt;
    //The rest of your code here...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What&#039;s Next?==&lt;br /&gt;
Now that you know how to use multiple Phidgets in your program, we should discuss how to find the features available to you by using the Phidget22 API.&lt;br /&gt;
&lt;br /&gt;
{{Flow_Navigation_Buttons|{{Flow Page Number|{{PAGENAME}} }} }}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Using_Events&amp;diff=30927</id>
		<title>Using Events</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Using_Events&amp;diff=30927"/>
		<updated>2019-03-06T17:12:04Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]{{Recommended_Flow_Links|{{Flow Page Number|{{PAGENAME}} }} }}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
If you are new to Phidgets, or event-driven programming, chances are your first instinct will be to poll for everything. Polling is the action of repeatedly checking a variable or property to see if it has changed, and is generally done in-line from the main body of your application. While this can be effective in smaller applications, this quickly becomes inefficient. You also risk missing a change your program is waiting for, if it polls for data too slowly.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
[[Image:Event_Explanation_Flowchart.png|200px|right|link={{Server}}/docs/images/2/21/Event_Explanation_Flowchart.png|thumb|&#039;&#039;&#039;Click to Enlarge&#039;&#039;&#039;]]&lt;br /&gt;
The Phidget library allows for the use of &#039;&#039;&#039;event-driven programming&#039;&#039;&#039;. This allows your program to react to certain stimuli as they happen, rather than having to constantly check for changes. By setting up event handlers, you are setting up functions that run every time the event associated with them occurs. Once they have been assigned, these functions run &#039;&#039;&#039;&#039;&#039;independently from the main body of code&#039;&#039;&#039;&#039;&#039;. For example, a &#039;&#039;&#039;State Change&#039;&#039;&#039; event handler for a {{code|DigitalInput}} channel will run every time the input state changes. Similarly, &#039;&#039;&#039;Attach&#039;&#039;&#039; and &#039;&#039;&#039;Detach&#039;&#039;&#039; events will occur when a device channel attaches to and detaches from your program (e.g. is plugged in and unplugged).&lt;br /&gt;
&lt;br /&gt;
Using events can be very useful for tasks such as recording every data point from a Phidget sensor, reacting to a button being pressed, or initializing a channel as soon as it is attached. This frees up the main body of your program from having to constantly check the status of the Phidget, which can significantly clean up many applications.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Special Considerations==&lt;br /&gt;
When using events, you must be mindful of keeping the code handling the event running as quickly as possible. If the event handler takes longer than the interval between events, this will cause the events to pile up and fall out of sync with the time they occur, and eventually start being lost.&lt;br /&gt;
&lt;br /&gt;
When using events, you will need to be careful about what you share between the event and your main code. This is because &#039;&#039;&#039;events can happen at any time&#039;&#039;&#039;, so any variables shared with them could change unexpectedly.&lt;br /&gt;
&lt;br /&gt;
==Recommendations==&lt;br /&gt;
We recommend all but the simplest program should set handlers that will be called when a channel &#039;&#039;&#039;attaches&#039;&#039;&#039;, &#039;&#039;&#039;detaches&#039;&#039;&#039;, sends an &#039;&#039;&#039;error&#039;&#039;&#039;, or receives new sensor data.&lt;br /&gt;
&lt;br /&gt;
Initializing a channel should be done from the &#039;&#039;&#039;attach&#039;&#039;&#039; event handler, so it will always be configured as intended, even if something causes it to be unplugged and plugged back in.&lt;br /&gt;
&lt;br /&gt;
===Error Events===&lt;br /&gt;
Make sure not to ignore using the Phidget error event handler, as many Phidgets will send critical information to the program using error events, such as when a sensor takes a measurement outside of its valid range, or activates some safety feature.&lt;br /&gt;
&lt;br /&gt;
==Linking Data to Events==&lt;br /&gt;
When you&#039;re using events in your program, it may become useful to link certain information to the event for a given Phidget channel. Some programming languages provide a convenient way of doing exactly that, though the specifics depend on the programming language you are using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&lt;br /&gt;
Python is dynamically interpreted, and objects follow a less rigid structure than in other languages. To link a variable with a given Phidget object to have it available from the event, you can add it to the Phidget object that will be triggering the event. Then, you can access the information using the {{code|self}} parameter of the event.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to group a number with a Phidget channel to be used in an event:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
def onStateChangeHandler(self, state):&lt;br /&gt;
    #We can now access and even change &amp;quot;myVariable&amp;quot; from the event &lt;br /&gt;
    print(self.myVariable)&lt;br /&gt;
    self.myVariable += 1&lt;br /&gt;
&lt;br /&gt;
ch = DigitalInput()&lt;br /&gt;
&lt;br /&gt;
#Addressing info here&lt;br /&gt;
&lt;br /&gt;
#Here we create an attribute of ch called &amp;quot;myVariable&amp;quot;, and assign it the information to store&lt;br /&gt;
#We&#039;ll use an integer here for simplicity, but this could be anything, even a second Phidget Handle &lt;br /&gt;
ch.myVariable = 0&lt;br /&gt;
ch.setOnStateChangeHandler(onStateChangeHandler)&lt;br /&gt;
&lt;br /&gt;
ch.openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
# The rest of your code here....&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&lt;br /&gt;
In C, all event handler declarations have a context pointer that can be pointed at any object you choose. This can be a set of relevant data, or even a Phidget handle.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to link a number with a specific event for a Phidget channel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C&amp;gt;&lt;br /&gt;
static void CCONV onStateChangeHandler(PhidgetDigitalInputHandle pdih, void *ctx, int state) {    &lt;br /&gt;
    &lt;br /&gt;
    //We can now access the information at the pointer from the event &lt;br /&gt;
    int* myIntPtr = (int*)ctx;&lt;br /&gt;
    printf(&amp;quot;Int: %d\n&amp;quot;, *myIntPtr);&lt;br /&gt;
    (*myIntPtr) ++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    PhidgetDigitalInputHandle ch = NULL;&lt;br /&gt;
    int myIntMain = 0;&lt;br /&gt;
&lt;br /&gt;
    PhidgetDigitalInput_create(&amp;amp;ch);&lt;br /&gt;
    &lt;br /&gt;
    //Addressing info here&lt;br /&gt;
&lt;br /&gt;
    //Here we pass &amp;quot;myStringMain&amp;quot; as the context pointer so we can access it from the event&lt;br /&gt;
    //This can be a pointer to any variable or structure, or even a second Phidget handle&lt;br /&gt;
    PhidgetDigitalInput_setOnStateChangeHandler(ch, onStateChangeHandler, &amp;amp;myIntMain);&lt;br /&gt;
    &lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)ch, 5000);&lt;br /&gt;
&lt;br /&gt;
    //The rest of your code here...&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
JavaScript=&lt;br /&gt;
JavaScript is dynamically interpreted, and objects follow a less rigid structure than in other languages. To link a variable with a given Phidget object to have it available from the event, you can add it to the Phidget object that will be triggering the event. Then, you may access the information using the {{code|self}} parameter of the event.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to group a number with a Phidget channel to be used in an event:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=javaScript&amp;gt;&lt;br /&gt;
function stateChange(state) {&lt;br /&gt;
    //We can now access and even change &amp;quot;myVariable&amp;quot; from the event &lt;br /&gt;
    console.log(this.myVariable);&lt;br /&gt;
    this.myVariable += 1;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
    var ch = new phidget22.DigitalInput();&lt;br /&gt;
...&lt;br /&gt;
    //Here we create a property of ch called &amp;quot;myVariable&amp;quot;, with the information to store&lt;br /&gt;
    //We&#039;ll use an integer here for simplicity, but this could be anything,&lt;br /&gt;
    //even a second Phidget Handle &lt;br /&gt;
    ch.myVariable = 0&lt;br /&gt;
    ch.onStateChange = stateChange;&lt;br /&gt;
&lt;br /&gt;
    ch.open();&lt;br /&gt;
&lt;br /&gt;
    //The rest of your code here...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==When should I poll?==&lt;br /&gt;
If all you need is a simple program that reads a small amount of data from a device, it is possible to open a channel, wait for attachment, read the data, and close the channel.  In that case, the code to implement and set event handlers might not be worth the effort.  When polling, &#039;&#039;&#039;error checking becomes very important&#039;&#039;&#039;, as accessing some channel properties while the channel is detached, or before any data comes back from the Phidget, will result in an error or exception that could kill the program.  There will always be a race between checking the {{Code|Attached}} property and accessing a data or state property.&lt;br /&gt;
&lt;br /&gt;
When in doubt, use event handlers.&lt;br /&gt;
&lt;br /&gt;
{{Flow_Navigation_Buttons|{{Flow Page Number|{{PAGENAME}} }} }}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Using_Events&amp;diff=30926</id>
		<title>Using Events</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Using_Events&amp;diff=30926"/>
		<updated>2019-03-06T17:11:30Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]{{Recommended_Flow_Links|{{Flow Page Number|{{PAGENAME}} }} }}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
If you are new to Phidgets, or event-driven programming, chances are your first instinct will be to poll for everything. Polling is the action of repeatedly checking a variable or property to see if it has changed, and is generally done in-line from the main body of your application. While this can be effective in smaller applications, this quickly becomes inefficient. You also risk missing a change your program is waiting for, if it polls for data too slowly.&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
[[Image:Event_Explanation_Flowchart.png|200px|right|link={{Server}}/docs/images/2/21/Event_Explanation_Flowchart.png|thumb|&#039;&#039;&#039;Click to Enlarge&#039;&#039;&#039;]]&lt;br /&gt;
The Phidget library allows for the use of &#039;&#039;&#039;event-driven programming&#039;&#039;&#039;. This allows your program to react to certain stimuli as they happen, rather than having to constantly check for changes. By setting up event handlers, you are setting up functions that run every time the event associated with them occurs. Once they have been assigned, these functions run &#039;&#039;&#039;&#039;&#039;independently from the main body of code&#039;&#039;&#039;&#039;&#039;. For example, a &#039;&#039;&#039;State Change&#039;&#039;&#039; event handler for a {{code|DigitalInput}} channel will run every time the input state changes. Similarly, &#039;&#039;&#039;Attach&#039;&#039;&#039; and &#039;&#039;&#039;Detach&#039;&#039;&#039; events will occur when a device channel attaches to and detaches from your program (e.g. is plugged in and unplugged).&lt;br /&gt;
&lt;br /&gt;
Using events can be very useful for tasks such as recording every data point from a Phidget sensor, reacting to a button being pressed, or initializing a channel as soon as it is attached. This frees up the main body of your program from having to constantly check the status of the Phidget, which can significantly clean up many applications.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Special Considerations==&lt;br /&gt;
When using events, you must be mindful of keeping the code handling the event running as quickly as possible. If the event handler takes longer than the interval between events, this will cause the events to pile up and fall out of sync with the time they occur, and eventually start being lost.&lt;br /&gt;
&lt;br /&gt;
When using events, you will need to be careful about what you share between the event and your main code. This is because &#039;&#039;&#039;events can happen at any time&#039;&#039;&#039;, so any variables shared with them could change unexpectedly.&lt;br /&gt;
&lt;br /&gt;
==Recommendations==&lt;br /&gt;
We recommend all but the simplest program should set handlers that will be called when a channel &#039;&#039;&#039;attaches&#039;&#039;&#039;, &#039;&#039;&#039;detaches&#039;&#039;&#039;, sends an &#039;&#039;&#039;error&#039;&#039;&#039;, or receives new sensor data.&lt;br /&gt;
&lt;br /&gt;
Initializing a channel should be done from the &#039;&#039;&#039;attach&#039;&#039;&#039; event handler, so it will always be configured as intended, even if something causes it to be unplugged and plugged back in.&lt;br /&gt;
&lt;br /&gt;
===Error Events===&lt;br /&gt;
Make sure not to ignore using the Phidget error event handler, as many Phidgets will send critical information to the program using error events, such as when a sensor takes a measurement outside of its valid range, or activates some safety feature.&lt;br /&gt;
&lt;br /&gt;
==Linking Data to Events==&lt;br /&gt;
When you&#039;re using events in your program, it may become useful to link certain information to the event for a given Phidget channel. Some programming languages provide a convenient way of doing exactly that, though the specifics depend on the programming language you are using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&lt;br /&gt;
Python is dynamically interpreted, and objects follow a less rigid structure than in other languages. To link a variable with a given Phidget object to have it available from the event, you can add it to the Phidget object that will be triggering the event. Then, you can access the information using the {{code|self}} parameter of the event.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to group a number with a Phidget channel to be used in an event:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
def onStateChangeHandler(self, state):&lt;br /&gt;
    #We can now access and even change &amp;quot;myVariable&amp;quot; from the event &lt;br /&gt;
    print(self.myVariable)&lt;br /&gt;
    self.myVariable += 1&lt;br /&gt;
&lt;br /&gt;
ch = DigitalInput()&lt;br /&gt;
&lt;br /&gt;
#Addressing info here&lt;br /&gt;
&lt;br /&gt;
#Here we create an attribute of ch called &amp;quot;myVariable&amp;quot;, and assign it the information to store&lt;br /&gt;
#We&#039;ll use an integer here for simplicity, but this could be anything, even a second Phidget Handle &lt;br /&gt;
ch.myVariable = 0&lt;br /&gt;
ch.setOnStateChangeHandler(onStateChangeHandler)&lt;br /&gt;
&lt;br /&gt;
ch.openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
# The rest of your code here....&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&lt;br /&gt;
In C, all event handler declarations have a context pointer that can be pointed at any object you choose. This can be a set of relevant data, or even a Phidget handle.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to link a number with a specific event for a Phidget channel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C&amp;gt;&lt;br /&gt;
static void CCONV onStateChangeHandler(PhidgetDigitalInputHandle pdih, void *ctx, int state) {    &lt;br /&gt;
    &lt;br /&gt;
    //We can now access the information at the pointer from the event &lt;br /&gt;
    int* myIntPtr = (int*)ctx;&lt;br /&gt;
    printf(&amp;quot;Int: %d\n&amp;quot;, *myIntPtr);&lt;br /&gt;
    (*myIntPtr) ++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    PhidgetDigitalInputHandle ch = NULL;&lt;br /&gt;
    int myIntMain = 0;&lt;br /&gt;
&lt;br /&gt;
    PhidgetDigitalInput_create(&amp;amp;ch);&lt;br /&gt;
    &lt;br /&gt;
    //Addressing info here&lt;br /&gt;
&lt;br /&gt;
    //Here we pass &amp;quot;myStringMain&amp;quot; as the context pointer so we can access it from the event&lt;br /&gt;
    //This can be a pointer to any variable or structure, or even a second Phidget handle&lt;br /&gt;
    PhidgetDigitalInput_setOnStateChangeHandler(ch, onStateChangeHandler, &amp;amp;myIntMain);&lt;br /&gt;
    &lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)ch, 5000);&lt;br /&gt;
&lt;br /&gt;
    //The rest of your code here...&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
JavaScript=&lt;br /&gt;
JavaScript is dynamically interpreted, and objects follow a less rigid structure than in other languages. To link a variable with a given Phidget object to have it available from the event, you can add it to the Phidget object that will be triggering the event. Then, you may access the information using the {{code|self}} parameter of the event.&lt;br /&gt;
&lt;br /&gt;
For example, if we wanted to group a number with a Phidget channel to be used in an event:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=javaScript&amp;gt;&lt;br /&gt;
function stateChange(state) {&lt;br /&gt;
    //We can now access and even change &amp;quot;myVariable&amp;quot; from the event &lt;br /&gt;
    console.log(this.myVariable);&lt;br /&gt;
    this.myVariable += 1;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
    var ch = new phidget22.DigitalInput();&lt;br /&gt;
...&lt;br /&gt;
    //Here we create a property of ch called &amp;quot;myVariable&amp;quot;, with the information to store&lt;br /&gt;
    //We&#039;ll use an integer here for simplicity, but this could be anything,&lt;br /&gt;
    //even a second Phidget Handle &lt;br /&gt;
    ch.myVariable = 0&lt;br /&gt;
    ch.onStateChange = stateChange;&lt;br /&gt;
&lt;br /&gt;
    ch.open();&lt;br /&gt;
&lt;br /&gt;
    //The rest of your code here...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==When should I poll?==&lt;br /&gt;
If all you need is a simple program that reads a small amount of data from a device, it is possible to write a program that opens a channel, waits for attachment, reads the data, and closes the channel.  In that case, the code to implement and set event handlers might not be worth the effort.  When polling, &#039;&#039;&#039;error checking becomes very important&#039;&#039;&#039;, as accessing some channel properties while the channel is detached, or before any data comes back from the Phidget, will result in an error or exception that could kill the program.  There will always be a race between checking the {{Code|Attached}} property and accessing a data or state property.&lt;br /&gt;
&lt;br /&gt;
When in doubt, use event handlers.&lt;br /&gt;
&lt;br /&gt;
{{Flow_Navigation_Buttons|{{Flow Page Number|{{PAGENAME}} }} }}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Phidget_Channels&amp;diff=30914</id>
		<title>Phidget Channels</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Phidget_Channels&amp;diff=30914"/>
		<updated>2019-03-06T15:57:29Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Recommended_Flow_Links|{{Flow Page Number|{{PAGENAME}} }} }}&lt;br /&gt;
&lt;br /&gt;
To program with Phidgets, it is important to understand how the physical input and output channels of Phidget devices correspond to the software controlling them.&lt;br /&gt;
&lt;br /&gt;
==What are Phidget channels?==&lt;br /&gt;
&lt;br /&gt;
Each part of a Phidget&#039;s behaviour is split into individual parts called &#039;&#039;&#039;Channels&#039;&#039;&#039;. Each channel represents a &#039;&#039;&#039;single part&#039;&#039;&#039; of a device, such as a single input on a digital input Phidget, the humidity sensor on a humidity Phidget, or one motor on a DC motor controller.&lt;br /&gt;
&lt;br /&gt;
Each channel has a &#039;&#039;&#039;Channel Class&#039;&#039;&#039;, corresponding to the type of function the channel performs. For example, a {{code|DCMotor}} channel will control a DC motor, a {{code|TemperatureSensor}} channel will measure temperature, and an {{code|RFID}} channel will deal with an RFID reader.&lt;br /&gt;
&lt;br /&gt;
[[File:Phidget_Channels_w_Panel.png|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each channel class is designed to make using channels of that class &#039;&#039;&#039;as similar as possible&#039;&#039;&#039;, regardless of the Phidget they are a part of. For example, every {{Code|VoltageInput}} channel has functions to set the data interval and read the voltage on the input.&lt;br /&gt;
&lt;br /&gt;
Each channel class also provides settings unique to devices in that class, such as the ability to set a {{code|QuietMode}} on sonar sensors, which use the {{code|DistanceSensor}} class.&lt;br /&gt;
&lt;br /&gt;
You can find out what channel classes are available to your Phidget by looking at its [[Product Page Links|&#039;&#039;&#039;User Guide&#039;&#039;&#039;]].&lt;br /&gt;
&lt;br /&gt;
{{Flow Navigation Buttons|{{Flow Page Number|{{PAGENAME}} }} }}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Rotary_Motion_Guide&amp;diff=30734</id>
		<title>Rotary Motion Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Rotary_Motion_Guide&amp;diff=30734"/>
		<updated>2019-01-30T17:37:47Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Rotary systems involve rotating mechanical parts such as motors, sprockets, and pulleys. Learn more at Phidgets.com.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:Primer]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
In rotary systems, you have a rotating shaft which applies torque to do work.  Typically this shaft is turned by an electric motor of some kind and then, through a series of belts/chains/couplers transmits that power to a final output shaft or arm or wheel which accomplishes the desired task.  Why not just use the output shaft of the motor directly?  There are two main reasons:&lt;br /&gt;
&lt;br /&gt;
*You might want to gear the motor down further to increase the torque available by using pulleys or sprockets of differing sizes.  &lt;br /&gt;
*The shaft on the motor itself isn&#039;t really designed for forces other than torque.  It is difficult to put anything of significant size on the shaft without putting too much overhung (radial) load on the shaft which will stall the motor.  &lt;br /&gt;
&lt;br /&gt;
As a result, the base of any rotary system is the rotating shaft.  We have 4 sizes of shaft available: 8mm, 12mm, 17mm, and 25mm.  The 12, 17, and 25mm shafts also have a variant available with a keyway machined in the length of the shaft if you don&#039;t want to machine it yourself.  These shafts need to be suspended on bearings, we do not sell any bearings currently but they are commonly available components that you can find locally.  For the larger shaft sizes (17 and 25mm) we recommend using steel bearing housings.  &lt;br /&gt;
&lt;br /&gt;
==Motors==&lt;br /&gt;
Every system will need a motor or else there will be no motion (without external input).  We offer a wide selection of motors of a number of different types that would all be suitable for rotary systems.  For more information on this you can check out our primers for [[DC Motor and Controller Primer|DC motors]] and [[Stepper Motor and Controller Primer|Stepper motors]].&lt;br /&gt;
&lt;br /&gt;
==Pulleys/Timing belts==&lt;br /&gt;
A belt is simply a loop of tough, flexible material such as rubber and kevlar with a series of teeth that mesh with the teeth on specially designed pulley wheels to synchronize two (or more) rotating shafts.  Belts are a cheap option for shafts that are not axially aligned and tend to run quietly and smoothly.  Belts are typically tensioned either by adjusting center to center distance between pulleys or via a tensioner/idler pulley.  This leads to very low backlash and a high efficiency (as high as 98%).  &lt;br /&gt;
&lt;br /&gt;
We have two types of belts available, 2GT (6mm wide) and 5GT (15mm wide).  Each comes in loops of varying circumferences.  The 2GT belts are rated for 6lbs of working tension while the 5GT are rated for 100lbs.  Belt systems are fairly simple, you have 2 or more pulleys and a belt that goes around all of them.  One of the pulleys is driven by your motor and the other(s) are either connected to your load or in the case of an idler pulley are simply free spinning to act as a tensioner for the belt.  For example, here is a system that uses a belt to transmit power form a stepper motor to a ball screw:&lt;br /&gt;
&lt;br /&gt;
[[image:Belt driven ball screw.JPG|500px|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Chain/Sprockets==&lt;br /&gt;
Pretty much everyone has at least seen a chain system in their life in the form of a bicycle.  This system of course is driven by human input rather than a motor.  Automated systems behave no differently though, you have several sprockets, and chain that wraps around them.  One sprocket is driven and the others perform work on the load.  Chain tends to be noisier than belts and cannot be tensioned as tightly meaning there is a bit more backlash inherent in the system.  In exchange though, chain can move much heavier loads for their size.  &lt;br /&gt;
&lt;br /&gt;
We sell ANSI#25 and #40 chain and sprockets (that is 0.25&amp;quot; pitch and 0.5&amp;quot; pitch).  The #25 is rated for 100lbs of working tension while the #40 is rated for 800lbs.  Chain is sold by the meter and you can form closed loops of any length you&#039;d like with the link kits that we sell.  To calculate how many links you will need for a particular sprocket spacing you can use [http://www.botlanta.org/converters/dale-calc/sprocket.html this calculator], just enter in the number of teeth on each sprocket, the chain pitch, and the center to center distance between the sprockets to get the number of links you will need.  If the number is not whole, you should always round up (and probably even add one).  Once you know how many links you will require you will need to use the link kit to connect your chain up.  This is where it gets a bit fiddly.  &lt;br /&gt;
&lt;br /&gt;
There are two ways to connect chain, you can either use a hammer and a pin of some kind to knock out one of the pins which you can then connect up with an offset link:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other way is if you have a chain breaker tool you can remove an entire link properly and can use a normal split link.  This process is a bit more tricky but it is stronger over all and will increase the length of the chain by a standard amount unlike the offset link which adds a sort of half link to your total length.  To use a split link you must remove the snap ring and the top plate, then slot it into the chain and replace them both.  For example:&lt;br /&gt;
[[image:Chain_link_insert_wiki.png|link=|center|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good example of a chain system is our MURVV robot.  Here is how it&#039;s drive mechanism works:&lt;br /&gt;
[[Image:Murvv_chain.jpg|link=|center|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Worm Gearboxes==&lt;br /&gt;
In general, worm gearboxes are just another type of gearbox that can be fitted to a motor.  The main benefit of a worm drive is that it is all but impossible to back drive even when not powered.  This is due to the steep angle used by the gears as they mesh together.  As a result, this type of gearbox is not the most efficient.  There is a lot of frictional loss at the mesh point and they will tend to run hot.  That being said, in the context of the worm drives we sell, they are a means to substantially increase the output torque of our larger motors for applications where maximum strength is required.  All our worm gearboxes have a 30:1 gear ratio and since the bearings built into the gearbox can handle much higher axial and radial loads that motors themselves you can easily direct drive very large loads from these gearboxes without having to set up an external mechanism.&lt;br /&gt;
&lt;br /&gt;
==Bearings==&lt;br /&gt;
For the smaller bearings, installation is fairly straight forward.  Simply mount the bearing onto your surface, slot the shaft in and tighten the set screws.  However, for our larger bearings (12mm, 17mm and 25mm) there is a different system used known as an eccentric locking collar or eccentric collar lock.  This is relatively simply to set up but you may not have seen this style of attachment before so lets have a look quickly at how it works and how to install it.&lt;br /&gt;
&lt;br /&gt;
The locking mechanism works by putting a slightly eccentric hole in the bearing and using a collar with a matching hole.  This way, when the collar is twisted on the shaft it will bind.  Step by step:&lt;br /&gt;
[[image:empty_bearing.jpg|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice how the wall of the bore is thinner on the right side than the left.  This is also true of the collar which slides over the top of the shaft once it is in position.  Insert the shaft in the bearing unit to the desired position:&lt;br /&gt;
&lt;br /&gt;
[[image:uncollared_shaft.jpg|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
Next, put the collar onto the shaft and slide it down to the bearing.  Turn the collar slowly until it seats on the lip of the bearing (i.e. the eccentricity of the holes lines up).  Now you will want to tighten the collar by hand by turning it like you would a threaded cap.  You will notice that it will bind by turning it in either direction within 180°.  Be sure to turn the collar in the same direction the primary direction of rotation for the shaft in operation will be.  Once the collar is tight, you will need to use a punch and a hammer to tighten it the last bit.  Find the dead hole in the collar (not the set screw) and insert your punch.  Angle the punch against the wall of the direction you have tightened the collar and give it a few solid taps with the hammer:&lt;br /&gt;
&lt;br /&gt;
[[image:punch_collar.jpg|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
Now just tighten the set screw to ensure it doesn&#039;t loosen up with use and you are finished.  To quickly demonstrate here is a video, note that I do not tighten the set screw in this video but that is straight forward enough so it was left out:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{#ev:youtube|0v6NOY7aRbg}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Operating_System_Support&amp;diff=30726</id>
		<title>Operating System Support</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Operating_System_Support&amp;diff=30726"/>
		<updated>2019-01-18T16:59:53Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Overview]]&lt;br /&gt;
We provide support for all major operating systems. Select your operating system from the table below and follow the &#039;&#039;Getting Started&#039;&#039; guide in order to set up your machine. If you need to access non-current versions of our drivers you can find them [{{SERVER}}/downloads/phidget22/libraries/ here]. You can find the driver changelog [{{SERVER}}/?view=changelog here].&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #f0f0f0&amp;quot; align=center &lt;br /&gt;
! Operating System || Drivers and Libraries || Direct USB Control || Remote Network Control || Supported Version&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;|&#039;&#039;&#039;Desktop OSes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Windows.png|alt=OS - Windows|24x24px|link=OS - Windows]][[OS - Windows|Windows]] &lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - Windows#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| Vista or Newer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Mac-OS.png|alt=OS - macOS|24x24px|link=OS - macOS]][[OS - macOS|macOS]] &lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - macOS#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| OS X 10.5 or newer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Linux.png|alt=OS - Linux|24x24px|link=OS - Linux]][[OS - Linux|Linux]] &lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - Linux#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| Kernel 2.6 or newer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot;|&#039;&#039;&#039;Mobile/Wireless OSes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Phidgets.png|alt=OS - Phidget SBC|24x24px|link=OS - Phidget SBC]][[OS - Phidget SBC|Phidget SBC]]&lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - Phidget SBC#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| All versions&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-iOS.png|alt=OS - iOS|link=OS - iOS|24x24px]][[OS - iOS|iOS]] &lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS - iOS#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #E28585&amp;quot; align=center| X&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| 8.0 or newer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[Image:Icon-Android.png|alt=OS - Android|24x24px|link=OS_-_Android]] [[OS_-_Android|Android]]&lt;br /&gt;
|style=&amp;quot;background: #f0f0ff&amp;quot; align=center| [[OS_-_Android#Quick Downloads|Quick Downloads]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
|style=&amp;quot;background: #ade6ab&amp;quot; align=center| [[Image:Checkmark.png|link=]]&lt;br /&gt;
| 4.1 (Jellybean) or newer&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Best_Phidgets_Practices&amp;diff=30723</id>
		<title>Best Phidgets Practices</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Best_Phidgets_Practices&amp;diff=30723"/>
		<updated>2019-01-04T16:42:01Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]&lt;br /&gt;
The purpose of this page is to provide a list of &amp;quot;Best Practices&amp;quot; to follow when writing code that uses Phidgets. These &amp;quot;Best Practices&amp;quot; are designed to eliminate common mistakes made when using the {{Phidget22API}}, and to help maintain an stable structure while build more complicated systems.&lt;br /&gt;
&lt;br /&gt;
== Check Results ==&lt;br /&gt;
Almost every method in the {{Phidget22API}} returns a result code, or throws an exception if the language supports exceptions.  The result code must be checked, and any exception caught, to ensure each operation is successful.  Ignoring results will in the best case cause programs to crash, and in the worst, lead to invalid or unexpected behavior.&lt;br /&gt;
&lt;br /&gt;
== Use Event Handlers ==&lt;br /&gt;
The Phidget library supports both polling channel properties to determine state and to get current data values, and the library supports firing events when states change and data is received.  Reading channel properties directly is useful to determine the state or current data value at a point in time, but is difficult to implement correctly.  Event handlers are more predicable and easier to implement correctly.  Unless a program has a specific and obvious reason to access properties directly, event handlers should be used.&lt;br /&gt;
&lt;br /&gt;
== Set Properties in the Attach Handler ==&lt;br /&gt;
&lt;br /&gt;
An attach event will occur each time a channel is matched. This makes the attach handler the perfect place to initialize properties such as {{Code|DataInterval}}, {{Code|ChangeTrigger}}, gain values, and ranges. If properties are initialize elsewhere, in a situation where the channel detaches temporarily, those properties will revert to defaults during the next attach.  Setting properties within the attach handler ensures they are always the expected values.&lt;br /&gt;
&lt;br /&gt;
== Keep Event Handlers Short ==&lt;br /&gt;
&lt;br /&gt;
Events handlers are called from special dispatch threads within the Phidget library.  Each channel maintains its own queue of events, and these events are processed in order and one at a time.  If a user event handler blocks, or takes longer than the &amp;lt;code&amp;gt;DataInterval&amp;lt;/code&amp;gt; of the channel, events will become &#039;stale&#039;, and eventually the system will begin throwing away events.&lt;br /&gt;
&lt;br /&gt;
For example, if an Accelerometer channel has been configured to receive data every 20 milliseconds and the event handler averages 21ms to execute, the next change event will be ready before the previous one is finished being processed.  Eventually the channel&#039;s event queue will fill and the library will begin throwing away events. &lt;br /&gt;
&lt;br /&gt;
A common mistake is to update a GUI, or wait for user input from within an event handler.  Most GUI APIs have support for dispatching updates to the GUI thread, and those should be used.  Waiting for user input will block the event handler, and should never be done.  Instead, a flag should be set and a loop in another thread should wait for the input.&lt;br /&gt;
&lt;br /&gt;
== Be Specific With Addressing ==&lt;br /&gt;
&lt;br /&gt;
When you open a Phidget channel, the library tries to attach a channel matching all the addressing properties that have been set. If none of the matching properties are set, the Phidget library will match the first channel of the same class. In simple cases this will be fine. If your program deals with multiple Phidgets, it is always wise to be specific.&lt;br /&gt;
&lt;br /&gt;
For example, if a Phidget temperature sensor is the only device connected to a computer, opening a {{Code|TemperatureSensor}} channel without setting any addressing properties will attach to that temperature sensor; however, if a DC motor controller is connected to the computer, the on-board temperature sensor on the motor controller might attach to the channel instead. This could be prevented by setting a {{code|DeviceSerialNumber}} or {{code|HubPort}}.&lt;br /&gt;
&lt;br /&gt;
Since there&#039;s no way to predict what other Phidgets may be plugged into a computer (or become available over the network), you should be as specific as possible before opening a channel.&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t Forget to Close() ==&lt;br /&gt;
&lt;br /&gt;
Calling {{Code|Close()}} on a channel releases the channel so that it can be matched again, and to ensure your Phidget has stopped. For example, certain motor controllers will maintain speed or continue trying to track the last position they were sent to, if they are not stopped or closed before the program ends. In [[Language_-_LabVIEW|LabVIEW]], the runtime environment executes a program internally, so if {{Code|Close()}} is not called, the LabVIEW environment will continue to tie up the channel despite the program having been stopped.&lt;br /&gt;
&lt;br /&gt;
== When In Doubt, Open Remotely == &lt;br /&gt;
When the [[Phidget Network Server|Network Server]] is enabled, a channel can match both a local device channel and a remote channel.  The end result would be functionally the same; however, most remote channels support being attached to multiple clients, while a local device channel can only be attached once.  Unless the desire is to only allow the device channel to be attached once, or performance is critical, it is more flexible to match the network channel as other clients will still be able to attach to the device channel.&lt;br /&gt;
&lt;br /&gt;
See the &amp;lt;code&amp;gt;IsRemote&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;IsLocal&amp;lt;/code&amp;gt; Phidget properties in the {{Phidget22API}}.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
[[Phidget Programming Basics]] - Here you can find the basic concepts to help you get started with making your own programs that use Phidgets.&lt;br /&gt;
&lt;br /&gt;
[[Data Interval/Change Trigger]] - Learn about these two properties that control how much data comes in from your sensors.&lt;br /&gt;
&lt;br /&gt;
[[Using Multiple Phidgets]] - It can be difficult to figure out how to use more than one Phidget in your program. This page will guide you through the steps.&lt;br /&gt;
&lt;br /&gt;
[[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.&lt;br /&gt;
&lt;br /&gt;
[[Logging, Exceptions, and Errors]] - Learn about all the tools you can use to debug your program.&lt;br /&gt;
&lt;br /&gt;
[[Phidget Network Server]] - Phidgets can be controlled and communicated with over your network- either wirelessly or over ethernet.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:3334%2B3323.jpg&amp;diff=30590</id>
		<title>File:3334+3323.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:3334%2B3323.jpg&amp;diff=30590"/>
		<updated>2018-11-27T15:59:06Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Unknown_measurement.png&amp;diff=30589</id>
		<title>File:Unknown measurement.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Unknown_measurement.png&amp;diff=30589"/>
		<updated>2018-11-27T15:58:57Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Linear_regression.png&amp;diff=30588</id>
		<title>File:Linear regression.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Linear_regression.png&amp;diff=30588"/>
		<updated>2018-11-27T15:58:44Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Initial_data.png&amp;diff=30587</id>
		<title>File:Initial data.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Initial_data.png&amp;diff=30587"/>
		<updated>2018-11-27T15:58:33Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Loadcell_scale_2.jpg&amp;diff=30586</id>
		<title>File:Loadcell scale 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Loadcell_scale_2.jpg&amp;diff=30586"/>
		<updated>2018-11-27T15:58:11Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Loadcell_scale.jpg&amp;diff=30585</id>
		<title>File:Loadcell scale.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Loadcell_scale.jpg&amp;diff=30585"/>
		<updated>2018-11-27T15:57:55Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=28822</id>
		<title>OS - macOS</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=28822"/>
		<updated>2018-01-03T17:55:30Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Communicate over USB with sensors, controllers and relays with Phidgets! Program in macOS using a wide variety of programming languages.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
Already know what you&#039;re doing? Here you go:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22.dmg macOS Installer Download]&lt;br /&gt;
*[[Software License]]&lt;br /&gt;
&lt;br /&gt;
If you need older versions of the Phidget22 macOS libraries, [{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22/ click here].&lt;br /&gt;
&lt;br /&gt;
If you need Phidget21 macOS libraries, [{{SERVER}}/downloads/phidget21/libraries/macos/Phidget/ click here].&lt;br /&gt;
&lt;br /&gt;
==Getting Started with macOS==&lt;br /&gt;
Welcome to using Phidgets with macOS. If you are ready to go, the first step in creating macOS applications with Phidgets is installing our libraries!&lt;br /&gt;
&lt;br /&gt;
===Install===&lt;br /&gt;
To install our libraries, download the installer for your machine:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22.dmg macOS installer download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, open up the installer, and double click on &#039;&#039;Phidgets.pkg&#039;&#039; to install the libraries:&lt;br /&gt;
[[File:OSX Install 1.png|link=|alt=macOS Install|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When prompted, continue with the installation:&lt;br /&gt;
[[File:OSX Install 2.png|link=|alt=macOS Install|center]]&lt;br /&gt;
&lt;br /&gt;
If you are using OS X 10.13 or newer you will also need to give explicit permission for the driver to function.  You can read about this here[https://developer.apple.com/library/content/technotes/tn2459/_index.html].&lt;br /&gt;
&lt;br /&gt;
The libraries are now installed on your machine. Next, let&#039;s verify that they are working properly.&lt;br /&gt;
&lt;br /&gt;
===Verify===&lt;br /&gt;
The best way to verify that your libraries are working properly is to use the Phidget Control Panel. The control panel is a powerful tool that will help you develop your Phidgets applications. Get started by following the instructions below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Finder and navigate to the Phidget Control Panel in the Applications list:&lt;br /&gt;
[[File:OSX Finder Apps.png|link=|900px|alt=macOS Finder Apps|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Double-click on the Phidgets icon to bring up the Phidget Control Panel. You can now see all the Phidgets that are plugged into your machine, as well as any Phidgets that are on the network:&lt;br /&gt;
[[File:OSX ControlPanel General.png|link=|alt=macOS Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the arrow beside a device to expand it so that you can see all available channels. Double-click on one of these channels to open up a window that lets you interact with it:&lt;br /&gt;
[[File:OSX Control Panel Channel.png ‎|link=|alt=macOS Control Panel Channel|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Control Panel can be used for testing devices, updating firmware, enabling a network server, and more! Visit the [[Phidget Control Panel|Phidget Control Panel page]] for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your Phidget is now able to communicate with your development machine. The next step is selecting a programming language so you can start to write some code!&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
Ready to write some code? Select one of the programming languages below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Great choices for beginners:&#039;&#039;&lt;br /&gt;
* [[Language - C|C]]&lt;br /&gt;
* [[Language - C Sharp|C#]]&lt;br /&gt;
* [[Language - Python | Python]]&lt;br /&gt;
* [[Language - Java | Java]]&lt;br /&gt;
&#039;&#039;Also supported:&#039;&#039;&lt;br /&gt;
* [[Language - Objective C | Objective-C]]&lt;br /&gt;
* [[Language - JavaScript | JavaScript]]&lt;br /&gt;
* [[Language - Swift | Swift]]&lt;br /&gt;
* [[Language - Max/MSP|Max/MSP]]&lt;br /&gt;
&lt;br /&gt;
==Phidget Network Server==&lt;br /&gt;
The Phidget Network Server is an extremely useful tool that allows you to remotely control Phidgets over your network. If you haven&#039;t already, check out the [[Phidget Network Server]] page for a complete overview.&lt;br /&gt;
&lt;br /&gt;
===Try it Out!===&lt;br /&gt;
In order to try the Phidget Network Server out, you will need a host computer, and a client computer:&lt;br /&gt;
*&#039;&#039;&#039;Host computer:&#039;&#039;&#039; the computer that is physically connected to the Phidgets via USB and is running the Phidget Network Server.&lt;br /&gt;
*&#039;&#039;&#039;Client computer:&#039;&#039;&#039; a computer running a Phidgets application that accesses Phidgets connected to the host computer.&lt;br /&gt;
If you only have one computer, don&#039;t worry, your machine can act as both a host and a client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, open the Phidget Control Panel on your host computer. Do this by double-clicking on the [[File:Ph.jpg|link=]] icon in your applications folder. Navigate to the Network Server tab, you will see the following:&lt;br /&gt;
[[File:macos_networkserver.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From here, you can start or stop the Network Server. You can also decide when the Network Server will start.&lt;br /&gt;
[[File:macos_networkserver_run.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the automatic start box and enter a server name. By enabling automatic startup, the Network Server will run immediately after macOS boots, so you won&#039;t have to manually start it again. You can verify the Network Server is running by looking at the label beside the start/stop button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have the Network Server running on your host computer, the next step will be accessing the Phidgets connected to your host computer from your client computer. Follow the steps below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the Phidget Control Panel on your client computer. You will see something like this:&lt;br /&gt;
[[File:macos_controlpanel_remote.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you can see from the image above, Phidget servers are listed under the following heading:&lt;br /&gt;
*Remote Server: Servername&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You now have access to the Phidgets that are connected to your host computer. Try double-clicking one of them to bring up an example:&lt;br /&gt;
[[File:macos_controlpanel_remoteexample.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note the label in the example indicating a remote connection. This means the example is using the Phidget Network Server in order to communicate with the device.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s Next?===&lt;br /&gt;
Now that you have seen the Phidget Network Server in action, you may be interested in implementing an application that takes advantage of all it&#039;s features. Luckily, every programming language we support comes with example code on how to do this! Jump to [[#Programming|programming languages]] above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more information about the Network Server tab on the Phidget Control Panel, visit the Visit the [[Phidget Control Panel|Phidget Control Panel]] page.&lt;br /&gt;
&lt;br /&gt;
==Advanced Information==&lt;br /&gt;
===Installed Files===&lt;br /&gt;
These files were placed onto your system as part of the installation process:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;File&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Location&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Phidget22.framework||contains our library, which is used at run-time.||/Library/Frameworks&lt;br /&gt;
|-&lt;br /&gt;
|Phidget.kext||kernel extension.||/System/Library/Extensions&lt;br /&gt;
|-&lt;br /&gt;
|phidgetnetworkserver22||Phidget Network Server||/usr/local/bin&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=28821</id>
		<title>OS - macOS</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=28821"/>
		<updated>2018-01-03T17:55:10Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Communicate over USB with sensors, controllers and relays with Phidgets! Program in macOS using a wide variety of programming languages.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
Already know what you&#039;re doing? Here you go:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22.dmg macOS Installer Download]&lt;br /&gt;
*[[Software License]]&lt;br /&gt;
&lt;br /&gt;
If you need older versions of the Phidget22 macOS libraries, [{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22/ click here].&lt;br /&gt;
&lt;br /&gt;
If you need Phidget21 macOS libraries, [{{SERVER}}/downloads/phidget21/libraries/macos/Phidget/ click here].&lt;br /&gt;
&lt;br /&gt;
==Getting Started with macOS==&lt;br /&gt;
Welcome to using Phidgets with macOS. If you are ready to go, the first step in creating macOS applications with Phidgets is installing our libraries!&lt;br /&gt;
&lt;br /&gt;
===Install===&lt;br /&gt;
To install our libraries, download the installer for your machine:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22.dmg macOS installer download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, open up the installer, and double click on &#039;&#039;Phidgets.pkg&#039;&#039; to install the libraries:&lt;br /&gt;
[[File:OSX Install 1.png|link=|alt=macOS Install|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When prompted, continue with the installation:&lt;br /&gt;
[[File:OSX Install 2.png|link=|alt=macOS Install|center]]&lt;br /&gt;
&lt;br /&gt;
If you are using OS X 10.13 or newer you will also need to give explicit permission for the driver to function.  You can read about this [here|https://developer.apple.com/library/content/technotes/tn2459/_index.html].&lt;br /&gt;
&lt;br /&gt;
The libraries are now installed on your machine. Next, let&#039;s verify that they are working properly.&lt;br /&gt;
&lt;br /&gt;
===Verify===&lt;br /&gt;
The best way to verify that your libraries are working properly is to use the Phidget Control Panel. The control panel is a powerful tool that will help you develop your Phidgets applications. Get started by following the instructions below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Finder and navigate to the Phidget Control Panel in the Applications list:&lt;br /&gt;
[[File:OSX Finder Apps.png|link=|900px|alt=macOS Finder Apps|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Double-click on the Phidgets icon to bring up the Phidget Control Panel. You can now see all the Phidgets that are plugged into your machine, as well as any Phidgets that are on the network:&lt;br /&gt;
[[File:OSX ControlPanel General.png|link=|alt=macOS Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the arrow beside a device to expand it so that you can see all available channels. Double-click on one of these channels to open up a window that lets you interact with it:&lt;br /&gt;
[[File:OSX Control Panel Channel.png ‎|link=|alt=macOS Control Panel Channel|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Control Panel can be used for testing devices, updating firmware, enabling a network server, and more! Visit the [[Phidget Control Panel|Phidget Control Panel page]] for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your Phidget is now able to communicate with your development machine. The next step is selecting a programming language so you can start to write some code!&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
Ready to write some code? Select one of the programming languages below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Great choices for beginners:&#039;&#039;&lt;br /&gt;
* [[Language - C|C]]&lt;br /&gt;
* [[Language - C Sharp|C#]]&lt;br /&gt;
* [[Language - Python | Python]]&lt;br /&gt;
* [[Language - Java | Java]]&lt;br /&gt;
&#039;&#039;Also supported:&#039;&#039;&lt;br /&gt;
* [[Language - Objective C | Objective-C]]&lt;br /&gt;
* [[Language - JavaScript | JavaScript]]&lt;br /&gt;
* [[Language - Swift | Swift]]&lt;br /&gt;
* [[Language - Max/MSP|Max/MSP]]&lt;br /&gt;
&lt;br /&gt;
==Phidget Network Server==&lt;br /&gt;
The Phidget Network Server is an extremely useful tool that allows you to remotely control Phidgets over your network. If you haven&#039;t already, check out the [[Phidget Network Server]] page for a complete overview.&lt;br /&gt;
&lt;br /&gt;
===Try it Out!===&lt;br /&gt;
In order to try the Phidget Network Server out, you will need a host computer, and a client computer:&lt;br /&gt;
*&#039;&#039;&#039;Host computer:&#039;&#039;&#039; the computer that is physically connected to the Phidgets via USB and is running the Phidget Network Server.&lt;br /&gt;
*&#039;&#039;&#039;Client computer:&#039;&#039;&#039; a computer running a Phidgets application that accesses Phidgets connected to the host computer.&lt;br /&gt;
If you only have one computer, don&#039;t worry, your machine can act as both a host and a client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, open the Phidget Control Panel on your host computer. Do this by double-clicking on the [[File:Ph.jpg|link=]] icon in your applications folder. Navigate to the Network Server tab, you will see the following:&lt;br /&gt;
[[File:macos_networkserver.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From here, you can start or stop the Network Server. You can also decide when the Network Server will start.&lt;br /&gt;
[[File:macos_networkserver_run.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the automatic start box and enter a server name. By enabling automatic startup, the Network Server will run immediately after macOS boots, so you won&#039;t have to manually start it again. You can verify the Network Server is running by looking at the label beside the start/stop button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have the Network Server running on your host computer, the next step will be accessing the Phidgets connected to your host computer from your client computer. Follow the steps below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the Phidget Control Panel on your client computer. You will see something like this:&lt;br /&gt;
[[File:macos_controlpanel_remote.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you can see from the image above, Phidget servers are listed under the following heading:&lt;br /&gt;
*Remote Server: Servername&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You now have access to the Phidgets that are connected to your host computer. Try double-clicking one of them to bring up an example:&lt;br /&gt;
[[File:macos_controlpanel_remoteexample.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note the label in the example indicating a remote connection. This means the example is using the Phidget Network Server in order to communicate with the device.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s Next?===&lt;br /&gt;
Now that you have seen the Phidget Network Server in action, you may be interested in implementing an application that takes advantage of all it&#039;s features. Luckily, every programming language we support comes with example code on how to do this! Jump to [[#Programming|programming languages]] above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more information about the Network Server tab on the Phidget Control Panel, visit the Visit the [[Phidget Control Panel|Phidget Control Panel]] page.&lt;br /&gt;
&lt;br /&gt;
==Advanced Information==&lt;br /&gt;
===Installed Files===&lt;br /&gt;
These files were placed onto your system as part of the installation process:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;File&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Location&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Phidget22.framework||contains our library, which is used at run-time.||/Library/Frameworks&lt;br /&gt;
|-&lt;br /&gt;
|Phidget.kext||kernel extension.||/System/Library/Extensions&lt;br /&gt;
|-&lt;br /&gt;
|phidgetnetworkserver22||Phidget Network Server||/usr/local/bin&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=28820</id>
		<title>OS - macOS</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=28820"/>
		<updated>2018-01-03T17:54:37Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Communicate over USB with sensors, controllers and relays with Phidgets! Program in macOS using a wide variety of programming languages.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
Already know what you&#039;re doing? Here you go:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22.dmg macOS Installer Download]&lt;br /&gt;
*[[Software License]]&lt;br /&gt;
&lt;br /&gt;
If you need older versions of the Phidget22 macOS libraries, [{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22/ click here].&lt;br /&gt;
&lt;br /&gt;
If you need Phidget21 macOS libraries, [{{SERVER}}/downloads/phidget21/libraries/macos/Phidget/ click here].&lt;br /&gt;
&lt;br /&gt;
==Getting Started with macOS==&lt;br /&gt;
Welcome to using Phidgets with macOS. If you are ready to go, the first step in creating macOS applications with Phidgets is installing our libraries!&lt;br /&gt;
&lt;br /&gt;
===Install===&lt;br /&gt;
To install our libraries, download the installer for your machine:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22.dmg macOS installer download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, open up the installer, and double click on &#039;&#039;Phidgets.pkg&#039;&#039; to install the libraries:&lt;br /&gt;
[[File:OSX Install 1.png|link=|alt=macOS Install|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When prompted, continue with the installation:&lt;br /&gt;
[[File:OSX Install 2.png|link=|alt=macOS Install|center]]&lt;br /&gt;
&lt;br /&gt;
If you are using OS X 10.13 or newer you will also need to give explicit permission for the driver to function.  You can read about this here:&lt;br /&gt;
&lt;br /&gt;
[https://developer.apple.com/library/content/technotes/tn2459/_index.html]&lt;br /&gt;
&lt;br /&gt;
The libraries are now installed on your machine. Next, let&#039;s verify that they are working properly.&lt;br /&gt;
&lt;br /&gt;
===Verify===&lt;br /&gt;
The best way to verify that your libraries are working properly is to use the Phidget Control Panel. The control panel is a powerful tool that will help you develop your Phidgets applications. Get started by following the instructions below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Finder and navigate to the Phidget Control Panel in the Applications list:&lt;br /&gt;
[[File:OSX Finder Apps.png|link=|900px|alt=macOS Finder Apps|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Double-click on the Phidgets icon to bring up the Phidget Control Panel. You can now see all the Phidgets that are plugged into your machine, as well as any Phidgets that are on the network:&lt;br /&gt;
[[File:OSX ControlPanel General.png|link=|alt=macOS Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the arrow beside a device to expand it so that you can see all available channels. Double-click on one of these channels to open up a window that lets you interact with it:&lt;br /&gt;
[[File:OSX Control Panel Channel.png ‎|link=|alt=macOS Control Panel Channel|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Control Panel can be used for testing devices, updating firmware, enabling a network server, and more! Visit the [[Phidget Control Panel|Phidget Control Panel page]] for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your Phidget is now able to communicate with your development machine. The next step is selecting a programming language so you can start to write some code!&lt;br /&gt;
&lt;br /&gt;
==Programming==&lt;br /&gt;
Ready to write some code? Select one of the programming languages below:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Great choices for beginners:&#039;&#039;&lt;br /&gt;
* [[Language - C|C]]&lt;br /&gt;
* [[Language - C Sharp|C#]]&lt;br /&gt;
* [[Language - Python | Python]]&lt;br /&gt;
* [[Language - Java | Java]]&lt;br /&gt;
&#039;&#039;Also supported:&#039;&#039;&lt;br /&gt;
* [[Language - Objective C | Objective-C]]&lt;br /&gt;
* [[Language - JavaScript | JavaScript]]&lt;br /&gt;
* [[Language - Swift | Swift]]&lt;br /&gt;
* [[Language - Max/MSP|Max/MSP]]&lt;br /&gt;
&lt;br /&gt;
==Phidget Network Server==&lt;br /&gt;
The Phidget Network Server is an extremely useful tool that allows you to remotely control Phidgets over your network. If you haven&#039;t already, check out the [[Phidget Network Server]] page for a complete overview.&lt;br /&gt;
&lt;br /&gt;
===Try it Out!===&lt;br /&gt;
In order to try the Phidget Network Server out, you will need a host computer, and a client computer:&lt;br /&gt;
*&#039;&#039;&#039;Host computer:&#039;&#039;&#039; the computer that is physically connected to the Phidgets via USB and is running the Phidget Network Server.&lt;br /&gt;
*&#039;&#039;&#039;Client computer:&#039;&#039;&#039; a computer running a Phidgets application that accesses Phidgets connected to the host computer.&lt;br /&gt;
If you only have one computer, don&#039;t worry, your machine can act as both a host and a client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, open the Phidget Control Panel on your host computer. Do this by double-clicking on the [[File:Ph.jpg|link=]] icon in your applications folder. Navigate to the Network Server tab, you will see the following:&lt;br /&gt;
[[File:macos_networkserver.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From here, you can start or stop the Network Server. You can also decide when the Network Server will start.&lt;br /&gt;
[[File:macos_networkserver_run.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the automatic start box and enter a server name. By enabling automatic startup, the Network Server will run immediately after macOS boots, so you won&#039;t have to manually start it again. You can verify the Network Server is running by looking at the label beside the start/stop button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have the Network Server running on your host computer, the next step will be accessing the Phidgets connected to your host computer from your client computer. Follow the steps below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the Phidget Control Panel on your client computer. You will see something like this:&lt;br /&gt;
[[File:macos_controlpanel_remote.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you can see from the image above, Phidget servers are listed under the following heading:&lt;br /&gt;
*Remote Server: Servername&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You now have access to the Phidgets that are connected to your host computer. Try double-clicking one of them to bring up an example:&lt;br /&gt;
[[File:macos_controlpanel_remoteexample.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note the label in the example indicating a remote connection. This means the example is using the Phidget Network Server in order to communicate with the device.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s Next?===&lt;br /&gt;
Now that you have seen the Phidget Network Server in action, you may be interested in implementing an application that takes advantage of all it&#039;s features. Luckily, every programming language we support comes with example code on how to do this! Jump to [[#Programming|programming languages]] above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more information about the Network Server tab on the Phidget Control Panel, visit the Visit the [[Phidget Control Panel|Phidget Control Panel]] page.&lt;br /&gt;
&lt;br /&gt;
==Advanced Information==&lt;br /&gt;
===Installed Files===&lt;br /&gt;
These files were placed onto your system as part of the installation process:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;File&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Location&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Phidget22.framework||contains our library, which is used at run-time.||/Library/Frameworks&lt;br /&gt;
|-&lt;br /&gt;
|Phidget.kext||kernel extension.||/System/Library/Extensions&lt;br /&gt;
|-&lt;br /&gt;
|phidgetnetworkserver22||Phidget Network Server||/usr/local/bin&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=28501</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=28501"/>
		<updated>2017-10-25T16:28:42Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will issue you an RMA number and will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Unless we are unusually busy most orders received before 12:00 PM Mountain Time - Canada (GMT-07:00) Monday to Friday will be shipped on the same day.&lt;br /&gt;
&lt;br /&gt;
Orders which contain cut to length parts may not necessarily ship same day as there is significant processing time associated with these orders.  &lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
The shipping cost is calculated at Checkout and submitted for your review before you confirm your order. When multiple shipping options are available for your destination, we will list all available options and let you choose.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders which are under $50.00.&lt;br /&gt;
&lt;br /&gt;
If you have your own account with UPS, you can use it and be billed directly by them.  In that case you have more shipping options available to you.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We use UPS Express Saver™ - Overnight delivery, and UPS Standard - 3 to 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
&lt;br /&gt;
====UPS Express Saver™ - Overnight====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments under $2000.00USD&#039;&#039;&#039;: we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments over $2000.00USD&#039;&#039;&#039;: you are responsible for duty and taxes if applicable and will have to pay UPS directly on top of the shipping cost we put on our invoice.&lt;br /&gt;
&lt;br /&gt;
====UPS Standard - Ground 3 to 5 business days====&lt;br /&gt;
&#039;&#039;&#039;Shipments under $800.00USD&#039;&#039;&#039;: we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipment over $800.00USD&#039;&#039;&#039; UPS will collect Entry Preparation Fees directly from you when delivering the package, and for duty and taxes if applicable.  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Entry Preparation Fees&#039;&#039;&#039;&lt;br /&gt;
:*All rates are in U.S. funds&lt;br /&gt;
:*Rates do not include applicable duties or taxes&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Value for duty|| UPS Standard Service&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$0.00 to $800.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|No Charge&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$800.01 to $1,250.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$28.75&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1,250.01 to $2,500.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$40.50&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Each Additional $1,000.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1.95&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We use UPS Worldwide Express Saver™, and UPS Worldwide Expedited for international locations that cannot be reached with Express Saver.&lt;br /&gt;
&lt;br /&gt;
Goods shipped to an international destination may be subject to import duties and taxes, which are levied once the goods reach your country. Additional charges for customs clearance must be borne by you; we have no control over these charges and cannot predict what they may be. Since customs policies vary widely from country to country, you should contact your local customs office for further information.&lt;br /&gt;
&lt;br /&gt;
===Tracking your order===&lt;br /&gt;
You can track your shipment by going to www.UPS.ca and using the tracking number that was e-mailed to you when your order shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If, when the package arrives there is no one to accept delivery UPS will redeliver 2 more times.  This is standard UPS protocol.  If delivery fails they will keep the package for 5 days and then return it to us. We will then refund you the cost you paid minus the cost of shipping (both directions) and a flat $50 charge to a maximum of the total cost of the package.  This applies to packages which failed delivery due to no one being present as well as packages which were refused delivery by a person at the delivery location.&lt;br /&gt;
&lt;br /&gt;
===Import Restrictions to Russia===&lt;br /&gt;
If you are wanting to ship an order to Russia you MUST have a valid business license number in order to complete the shipment.  This must be added to your account on our website.  To modify the business number, you can go to your account page and edit the &amp;quot;Account Information&amp;quot; section.  This number will then be applied to all orders placed with that account.  The reason for this is best explained by UPS:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Customs authorities in Russia have tightened restrictions on import shipments to Russia, in particular on dutiable shipments sent to private individuals. These shipments are currently under extraordinary scrutiny in an effort to improve accuracy of the accompanying shipping documentation.  These additional requirements lead to an unprecedented number of customs holds and delays in delivery.  UPS has therefore temporarily suspended the acceptance of dutiable shipments sent to private individuals in Russia until further notice.  We regret this step and are confident that, together with the Russian customs authorities, a solution can be found. UPS continues to accept all non-dutiable document shipments to private individuals in Russia and all commercial shipments addressed to businesses.&amp;quot; [http://www.ups.com/content/hr/en/about/news/service_updates/20100526_restrictions.html]&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All returns must be authorized by Phidgets Inc.===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets will take back any unopened product for a period of 30 days from the date of purchase. Just call or e-mail us for a RMA number and ship the product back to Phidgets prepaid and we will refund your credit card as soon as we receive and inspect the returned goods.&lt;br /&gt;
&lt;br /&gt;
Products that are returned after 30 days are subject to a re-stocking charge of 25% of the package&#039;s value (minimum $5.00) to a maximum of $500.&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns after 90 days.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We shipped the wrong/incomplete product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
|+&#039;&#039;&#039;Phidgets Inc. Holidays&#039;&#039;&#039;&lt;br /&gt;
! Holiday || Description || 2016 || 2017&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| New Year&#039;s Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First two days of January&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jan 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jan 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 15&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 20&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Mar 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 14&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 23&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 22&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 7&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 4&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 4&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 10&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 9&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Dec 22 to the New Year&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Dec 22 to the New Year&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Using_Multiple_Phidgets&amp;diff=28454</id>
		<title>Using Multiple Phidgets</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Using_Multiple_Phidgets&amp;diff=28454"/>
		<updated>2017-09-27T14:23:32Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Using the Channel ID===&lt;br /&gt;
&lt;br /&gt;
Each channel exported by a Phidget device has an id, normally starting at 0. The {{Code|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 {{Code|channel}} property is not specified, the matching code will attach to channel 0 if available, and the next available channel if not.&lt;br /&gt;
&lt;br /&gt;
Set the &#039;&#039;&#039;channel id&#039;&#039;&#039; with the {{Code|Channel}} property.&lt;br /&gt;
&lt;br /&gt;
===Using the Hub Port===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Set the &#039;&#039;&#039;hub port&#039;&#039;&#039; with the {{Code|HubPort}} property.&lt;br /&gt;
&lt;br /&gt;
===Using the Serial Number===&lt;br /&gt;
&lt;br /&gt;
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 {{Code|DeviceSerialNumber}} property.&lt;br /&gt;
&lt;br /&gt;
Set the &#039;&#039;&#039;device serial number&#039;&#039;&#039; with the {{Code|DeviceSerialNumber}} property.&lt;br /&gt;
&lt;br /&gt;
===Using the Label===&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set the &#039;&#039;&#039;device label&#039;&#039;&#039; with the {{Code|DeviceLabel}} property.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some limitations are:&lt;br /&gt;
* 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.&lt;br /&gt;
* Some programming languages do not support writing to labels. See the {{Phidget22API}}. &lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
For example, in Java, this would be:&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
 ch.setDeviceSerialNumber(12345);  // match device 12345&lt;br /&gt;
 ch.setHubPort(4);                 // match hub port 4&lt;br /&gt;
 ch.setChannel(1);                 // match channel 1 port 4 dev 12345&lt;br /&gt;
 ch.open();                        // start matching&lt;br /&gt;
&lt;br /&gt;
 //for a second device simply repeat this process&lt;br /&gt;
 ch1.setDeviceSerialNumber(12345); &lt;br /&gt;
 ch1.setHubPort(3);&lt;br /&gt;
 ch1.setChannel(1);&lt;br /&gt;
 ch1.open();&lt;br /&gt;
//and so on&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or in C:&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
 Phidget_setDeviceSerialNumber((PhidgetHandle)ch, 12345);  // match device 12345&lt;br /&gt;
 Phidget_setHubPort((PhidgetHandle)ch, 4);                 // match hub port 4&lt;br /&gt;
 Phidget_setChannel((PhidgetHandle)ch, 1);                 // match channel 1 port 4 dev 12345&lt;br /&gt;
 Phidget_open((PhidgetHandle)ch);                         // start matching&lt;br /&gt;
&lt;br /&gt;
 //for a second device simply repeat this process&lt;br /&gt;
 Phidget_setDeviceSerialNumber((PhidgetHandle)ch1, 12345);  &lt;br /&gt;
 Phidget_setHubPort((PhidgetHandle)ch1, 2);                 &lt;br /&gt;
 Phidget_setChannel((PhidgetHandle)ch1, 1);                 &lt;br /&gt;
 Phidget_open((PhidgetHandle)ch1);         &lt;br /&gt;
//and so on&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.                &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Distinguishing Events===&lt;br /&gt;
&lt;br /&gt;
When using [[Polling vs. Events|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.&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;&#039;serial number&#039;&#039;&#039; has not been specified, {{Code|DeviceSerialNumber}} would be {{Code|PHIDGET_SERIALNUMBER_ANY}}, but once attached {{Code|DeviceSerialNumber}} would be the serial number of the attached device.&lt;br /&gt;
&lt;br /&gt;
=== Further Reading ===&lt;br /&gt;
&lt;br /&gt;
[[Phidget Programming Basics]] - Here you can find the basic concepts to help you get started with making your own programs that use Phidgets.&lt;br /&gt;
&lt;br /&gt;
[[Data Interval/Change Trigger]] - Learn about these two properties that control how much data comes in from your sensors.&lt;br /&gt;
&lt;br /&gt;
[[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.&lt;br /&gt;
&lt;br /&gt;
[[Logging, Exceptions, and Errors]] - Learn about all the tools you can use to debug your program.&lt;br /&gt;
&lt;br /&gt;
[[Phidget Network Server]] - Phidgets can be controlled and communicated with over your network- either wirelessly or over ethernet.&lt;br /&gt;
&lt;br /&gt;
[[Best Phidgets Practices]] - Good programming habits that will save you from common problems when writing code for your Phidgets.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_Visual_Basic&amp;diff=28421</id>
		<title>Language - Visual Basic</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_Visual_Basic&amp;diff=28421"/>
		<updated>2017-09-06T14:18:16Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Language]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Downloads ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
*{{Phidget22API}} (Select C#/VB.Net from drop-down menu)&lt;br /&gt;
&lt;br /&gt;
=== Example Code ===&lt;br /&gt;
&lt;br /&gt;
*{{SampleCode|VBNET|VB.Net Examples}}&lt;br /&gt;
&lt;br /&gt;
=== Libraries ===&lt;br /&gt;
&lt;br /&gt;
{{WindowsQuickDownloads}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started with VB.NET ==&lt;br /&gt;
Welcome to using Phidgets with VB.NET! By using VB.NET, you will have access to the complete {{Phidget22API}}, including events. We also provide example code in VB.NET for all Phidget devices.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
{{Windows_Languages}}&lt;br /&gt;
&lt;br /&gt;
===Visual Studio===&lt;br /&gt;
====Use our examples====&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install [https://www.visualstudio.com/ Microsoft Visual Studio].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have Microsoft Visual Studio installed, select an example that will work with your Phidget:&lt;br /&gt;
*{{SampleCode|VBNET|VB.NET Examples}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the example project and start the example by pressing the &#039;&#039;Start&#039;&#039; button:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Csharp_visualstudio_run.png ‎|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The application will open the Phidget, list basic information about the Phidget, and demonstrate the Phidget&#039;s functionality. Here is an example of a Digital Output channel on a RFID Phidget:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Csharp_visualstudio_rfid.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now have the example up and running for your device. Play around with the device and experiment with some of the functionality. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
=====VINT Hub=====&lt;br /&gt;
If you are trying to connect to one of the VINT hub ports directly rather than to a VINT device connected through a VINT hub then there is one additional step.  There is a isHubPort property of the Phidget class that must be set before calling open.  It defaults to false but in this case it will need to be set to true.  In our examples this is done via command line though in practice you can just set it before calling open.  To add command line parameters to your project in Visual Studio, you can go to the Project-&amp;gt;Properties screen.  Under the Debug section there is a field to enter command line parameters for startup.  Use &amp;quot;-h&amp;quot; to make sure isHubPort is set before open is called and then you should be good to go.&lt;br /&gt;
&lt;br /&gt;
[[File:Csharp_visualstudio_commandLineParameters.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
====Configure your project====&lt;br /&gt;
When you are building a project from scratch, or adding Phidget functionality to an existing project, you&#039;ll need to configure your development environment to properly link the Phidget .NET library. To begin:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create a new Windows Forms Application project:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Vbnet_newproject.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, right-click to add a reference to the Phidget .NET library:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CSharp_VS2015_Add_Reference.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the following screen, click &#039;&#039;Browse...&#039;&#039; and navigate to the location of Phidget22.NET.dll:&lt;br /&gt;
*C:\Program Files\Phidgets\Phidget22\Phidget22.NET.dll&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CSharp_VS2015_Add_Reference_2.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, to include the Phidget .NET library, add the following lines to main window class file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
Imports Phidget22&lt;br /&gt;
Imports Phidget22.Events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Success! The project now has access to Phidgets. Next, view the [[#Write Code | write your own code]] section located below.&lt;br /&gt;
&lt;br /&gt;
===Mono===&lt;br /&gt;
====Use Our Examples====&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install [http://www.mono-project.com/download/ Mono] for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have Mono installed, download and unpack the HelloWorld example for C#:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/examples/dotnet/csharp/Manager/Phidget22_HelloWorld_CSharp_Windows_Ex.zip HelloWorld example]&lt;br /&gt;
Note: The HelloWorld example is compatible with Mono because it does not use Windows Forms. All other C# examples use Windows Forms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, copy Phidget22.NET.dll from type the following location:&lt;br /&gt;
*C:\Program Files\Phidgets\Phidget22\Phidget22.NET.dll &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Place both the HelloWorld example and the Phidget22.NET.dll file in the same location. Your folder should now look something like this:&lt;br /&gt;
[[File:Vbnet_folder.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the command prompt at the folder location and enter the following command:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
vbnc /r:Phidget22.NET.dll Module1.vb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will create an executable file called &#039;&#039;Module1.exe&#039;&#039;. Type in the following command to run the example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
mono Module1.exe&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Vbnet_mono.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now have the example up and running. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
====Configure your project====&lt;br /&gt;
When you are building a project from scratch, or adding Phidget functionality to an exisiting project, you&#039;ll need to configure your development environment to properly link the Phidget .NET library.&lt;br /&gt;
&lt;br /&gt;
To include the Phidget .NET library, simply add the following lines to your code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;CSharp&#039;&amp;gt;&lt;br /&gt;
Imports Phidget22&lt;br /&gt;
Imports Phidget22.Events&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The project now has access to Phidgets. Next, view the [[#Write Code | write your own code]] section located below.&lt;br /&gt;
&lt;br /&gt;
==Write Code==&lt;br /&gt;
{{WriteCode_Intro}}&lt;br /&gt;
&lt;br /&gt;
=== Step One: Initialize and Open ===&lt;br /&gt;
You will need to declare your Phidget object in your code. For example, we can declare a digital input object like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;vbnet&#039;&amp;gt;&lt;br /&gt;
ch = New Phidget22.DigitalInput()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, we can open the Phidget object like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;vbnet&#039;&amp;gt;&lt;br /&gt;
ch.Open()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although we are not including it on this page, you should include error handling for all Phidget functions. Here is an example of the previous code with error handling:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;vbnet&#039;&amp;gt;&lt;br /&gt;
Try&lt;br /&gt;
  ch = New Phidget22.DigitalInput()&lt;br /&gt;
  ch.Open()&lt;br /&gt;
Catch ex As PhidgetException&lt;br /&gt;
  errorBox.addMessage(&amp;quot;Error initializing: &amp;quot; + ex.Message)&lt;br /&gt;
End Try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step Two: Wait for Attachment (plugging in) of the Phidget ===&lt;br /&gt;
Simply calling open does not guarantee you can use the Phidget immediately. To use a Phidget, it must be plugged in (attached). We can handle this by using event driven programming and tracking the attach events. Alternatively, we can modify our code so we wait for an attachment:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;vbnet&#039;&amp;gt;&lt;br /&gt;
ch = New Phidget22.DigitalInput()&lt;br /&gt;
ch.Open(5000);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Waiting for attachment will block indefinitely until a connection is made, or until the timeout value is exceeded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To use events to handle attachments, we have to add the following code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;vbnet&#039;&amp;gt;&lt;br /&gt;
Private Sub device_Attach(ByVal sender As Object, ByVal e As Phidget22.Events.AttachEventArgs) Handles ch.Attach&lt;br /&gt;
  Console.WriteLine(&amp;quot;Phidget Attached!&amp;quot;);&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step Three: Do Things with the Phidget ===&lt;br /&gt;
We recommend the use of event driven programming when working with Phidgets. In a similar way to handling an attach event as described above, we can also add an event handler for a state change event:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=vbnet&amp;gt;&lt;br /&gt;
Private Sub device_DigitalInputChange(ByVal sender As Object, ByVal e As Phidget22.Events.DigitalInputStateChangeEventArgs) Handles ch.StateChange&lt;br /&gt;
  stateText.Text = &amp;quot;State: &amp;quot; + e.State;&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If events do not suit your needs, you can also poll the device directly for data using code like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=vbnet&amp;gt;&lt;br /&gt;
state= device.State;&lt;br /&gt;
stateText.Text = &amp;quot;State: &amp;quot; + e.State;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step Four: Close and Delete ===&lt;br /&gt;
At the end of your program, be sure to close and delete your device:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=vbnet&amp;gt;&lt;br /&gt;
device.Close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
[[Phidget Programming Basics]] - Here you can find the basic concepts to help you get started with making your own programs that use Phidgets.&lt;br /&gt;
&lt;br /&gt;
[[Data Interval/Change Trigger]] - Learn about these two properties that control how much data comes in from your sensors.&lt;br /&gt;
&lt;br /&gt;
[[Using Multiple Phidgets]] - It can be difficult to figure out how to use more than one Phidget in your program. This page will guide you through the steps.&lt;br /&gt;
&lt;br /&gt;
[[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.&lt;br /&gt;
&lt;br /&gt;
[[Logging, Exceptions, and Errors]] - Learn about all the tools you can use to debug your program.&lt;br /&gt;
&lt;br /&gt;
[[Phidget Network Server]] - Phidgets can be controlled and communicated with over your network- either wirelessly or over ethernet.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_C_Sharp&amp;diff=28420</id>
		<title>Language - C Sharp</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_C_Sharp&amp;diff=28420"/>
		<updated>2017-09-06T14:17:03Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Language]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Quick Downloads ==&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
*{{Phidget22API}} (Select C# from drop-down menu)&lt;br /&gt;
&lt;br /&gt;
=== Example Code ===&lt;br /&gt;
&lt;br /&gt;
*{{SampleCode|CSharp|C# Examples}}&lt;br /&gt;
&lt;br /&gt;
===Libraries===&lt;br /&gt;
&lt;br /&gt;
{{AllQuickDownloads}}&lt;br /&gt;
&lt;br /&gt;
== Getting started with C# ==&lt;br /&gt;
Welcome to using Phidgets with C#! By using C#, you will have access to the complete {{Phidget22API}}, including events. We also provide example code in C# for all Phidget devices.&lt;br /&gt;
&lt;br /&gt;
If you are developing for Windows, keep reading. Otherwise, select your operating system to jump ahead:&lt;br /&gt;
*[[#macOS | macOS]]&lt;br /&gt;
*[[#Linux | Linux]]&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
{{Windows_Languages}}&lt;br /&gt;
===Visual Studio===&lt;br /&gt;
====Use our examples====&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install [https://www.visualstudio.com/ Microsoft Visual Studio].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have Microsoft Visual Studio installed, select an example that will work with your Phidget:&lt;br /&gt;
*{{SampleCode|CSharp|C# Examples}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the example project and start the example by pressing the &#039;&#039;Start&#039;&#039; button:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Csharp_visualstudio_run.png ‎|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The application will open the Phidget, list basic information about the Phidget, and demonstrate the Phidget&#039;s functionality. Here is an example of a Digital Output channel on a RFID Phidget:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Csharp_visualstudio_rfid.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now have the example up and running for your device. Play around with the device and experiment with some of the functionality. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
=====VINT Hub=====&lt;br /&gt;
If you are trying to connect to one of the VINT hub ports directly rather than to a VINT device connected through a VINT hub then there is one additional step.  There is a isHubPort property of the Phidget class that must be set before calling open.  It defaults to false but in this case it will need to be set to true.  In our examples this is done via command line though in practice you can just set it before calling open.  To add command line parameters to your project in Visual Studio, you can go to the Project-&amp;gt;Properties screen.  Under the Debug section there is a field to enter command line parameters for startup.  Use &amp;quot;-h&amp;quot; to make sure isHubPort is set before open is called and then you should be good to go.&lt;br /&gt;
&lt;br /&gt;
[[File:Csharp_visualstudio_commandLineParameters.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
====Configure your project====&lt;br /&gt;
When you are building a project from scratch, or adding Phidget functionality to an existing project, you&#039;ll need to configure your development environment to properly link the Phidget .NET library. To begin:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create a new Windows Forms Application project:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CSharp_VS2015_New_Project.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, right-click to add a reference to the Phidget .NET library:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CSharp_VS2015_Add_Reference.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the following screen, click &#039;&#039;Browse...&#039;&#039; and navigate to the location of Phidget22.NET.dll:&lt;br /&gt;
*C:\Program Files\Phidgets\Phidget22\Phidget22.NET.dll&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CSharp_VS2015_Add_Reference_2.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, to include the Phidget .NET library, add the following lines to main window class file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using Phidget22;&lt;br /&gt;
using Phidget22.Events;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Success! The project now has access to Phidgets. Next, view the [[#Write Code | write your own code]] section located below.&lt;br /&gt;
&lt;br /&gt;
===Mono===&lt;br /&gt;
====Use our examples====&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install [http://www.mono-project.com/download/ Mono] for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have Mono installed, download and unpack the HelloWorld example for C#:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/examples/dotnet/csharp/Manager/Phidget22_HelloWorld_CSharp_Windows_Ex.zip HelloWorld example]&lt;br /&gt;
Note: The HelloWorld example is compatible with Mono because it does not use Windows Forms. All other C# examples use Windows Forms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, copy Phidget22.NET.dll from type the following location:&lt;br /&gt;
*C:\Program Files\Phidgets\Phidget22\Phidget22.NET.dll &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Place both the HelloWorld example and the Phidget22.NET.dll file in the same location. Your folder should now look something like this:&lt;br /&gt;
[[File:Csharp_mono_folder.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open the command prompt at the folder location and enter the following command:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
mcs /r:Phidget22.NET.dll Program.cs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will create an executable file called &#039;&#039;Program.exe&#039;&#039;. Type in the following command to run the example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
mono Program.exe&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Csharp_mono.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now have the example up and running. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
====Configure your project====&lt;br /&gt;
When you are building a project from scratch, or adding Phidget functionality to an exisiting project, you&#039;ll need to configure your development environment to properly link the Phidget .NET library.&lt;br /&gt;
&lt;br /&gt;
To include the Phidget .NET library, simply add the following lines to your code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;CSharp&#039;&amp;gt;&lt;br /&gt;
using Phidget22;&lt;br /&gt;
using Phidget22.Events;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
You can now compile the file as shown in the previous section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The project now has access to Phidgets. Next, view the [[#Write Code | write your own code]] section located below.&lt;br /&gt;
&lt;br /&gt;
===MonoDevelop/Xamarin Studio===&lt;br /&gt;
====Use our examples====&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install [http://www.monodevelop.com/download/ Xamarin Studio] for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have Xamarin Studio installed, select an example that will work with your Phidget:&lt;br /&gt;
*{{SampleCode|CSharp|C# Examples}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, open the example project:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image: Csharp_xamarin.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Right click the project, and click Run Item:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image: Chsarp_xamarin_run.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The application will open the Phidget, list basic information about the Phidget, and demonstrate the Phidget&#039;s functionality. Here is an example of a Digital Output channel on a RFID Phidget:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Csharp_visualstudio_rfid.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now have the example up and running for your device. Play around with the device and experiment with some of the functionality. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
====Configure your project====&lt;br /&gt;
When you are building a project from scratch, or adding Phidget function calls to an existing project, you&#039;ll need to configure your development environment to properly link the Phidget .NET library. To begin:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create a new .NET project:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Csharp_xamarin_newproject.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Csharp_xamarin_nameproject.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, add a reference to the Phidget .NET library:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Csharp_xamarin_editreference.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the following screen, select Phidget22.NET.dll:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Csharp_xamarin_addreference.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, to include the Phidget .NET library, add the following lines to main window class file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;CSharp&#039;&amp;gt;&lt;br /&gt;
  using Phidget22;&lt;br /&gt;
  using Phidget22.Events;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Success! The project now has access to Phidgets. Next, view the [[#Write Code | write your own code]] section located below.&lt;br /&gt;
&lt;br /&gt;
==macOS==&lt;br /&gt;
{{macOS_Languages}}&lt;br /&gt;
===Mono===&lt;br /&gt;
====Use our examples====&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install [http://www.mono-project.com/download/ Mono] for macOS. You will also need a copy of [{{SERVER}}/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Phidget22.NET.dll].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have Mono installed and Phidget22.NET.dll on hand, download and unpack the HelloWorld example for C#:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/examples/dotnet/csharp/Manager/Phidget22_HelloWorld_CSharp_Windows_Ex.zip HelloWorld example download]&lt;br /&gt;
Note: The HelloWorld example is compatible with Mono because it does not use Windows Forms. All other C# examples use Windows Forms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to create a configuration file. Create a new file in the same directory as the example you wish to compile and name it Phidget22.NET.dll.config. Copy the content below to the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;xml&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;configuration&amp;gt;&lt;br /&gt;
  &amp;lt;dllmap dll=&amp;quot;phidget22.dll&amp;quot; target=&amp;quot;/Library/Frameworks/Phidget22.framework/Versions/Current/Phidget22&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/configuration&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your project folder should now look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Csharp_macos_mono_folder.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To compile the program, enter the following command in the terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
mcs Program.cs -r:Phidget22.NET.dll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An executable file will be created. Run the program using mono:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
mono Program.exe&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Csharp_macos_mono_run.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now have the example up and running for your device. Play around with the device and experiment with some of the functionality. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
====Configure your project====&lt;br /&gt;
When you are building a project from scratch, or adding Phidget functionality to an exisiting project, you&#039;ll need to configure your development environment to properly link the Phidget .NET library.&lt;br /&gt;
&lt;br /&gt;
To include the Phidget .NET library, simply add the following lines to your code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;CSharp&#039;&amp;gt;&lt;br /&gt;
using Phidget22;&lt;br /&gt;
using Phidget22.Events;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
You can now compile the file as shown in the previous section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The project now has access to Phidgets. Next, view the [[#Write Code | write your own code]] section located below.&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
{{Linux_Languages}}&lt;br /&gt;
===Mono===&lt;br /&gt;
====Use our examples====&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install Mono. You can do this by entering the following command in the terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
apt-get install mono-complete&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will also need a copy of [{{SERVER}}/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Phidget22.NET.dll].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you have Mono installed and Phidget22.NET.dll on hand, download and unpack the HelloWorld example for C#:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/examples/dotnet/csharp/Manager/Phidget22_HelloWorld_CSharp_Windows_Ex.zip HelloWorld example download]&lt;br /&gt;
Note: The HelloWorld example is compatible with Mono because it does not use Windows Forms. All other C# examples use Windows Forms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your project folder should now look like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:Csharp_linux_folder.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, to compile the program, enter the following command in the terminal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
mcs Program.cs -r:Phidget22.NET.dll&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An executable file will be created. Run the program using mono:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;bash&#039;&amp;gt;&lt;br /&gt;
mono Program.exe&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Csharp_linux_mono_run.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now have the example up and running for your device. Play around with the device and experiment with some of the functionality. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
====Configure your project====&lt;br /&gt;
When you are building a project from scratch, or adding Phidget functionality to an exisiting project, you&#039;ll need to configure your development environment to properly link the Phidget .NET library.&lt;br /&gt;
&lt;br /&gt;
To include the Phidget .NET library, simply add the following lines to your code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&#039;CSharp&#039;&amp;gt;&lt;br /&gt;
using Phidget22;&lt;br /&gt;
using Phidget22.Events;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
You can now compile the file as shown in the previous section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The project now has access to Phidgets. Next, view the [[#Write Code | write your own code]] section located below.&lt;br /&gt;
&lt;br /&gt;
==Write Code==&lt;br /&gt;
{{WriteCode_Intro}}&lt;br /&gt;
&lt;br /&gt;
==== Step One: Initialize and open ====&lt;br /&gt;
You will need to declare your Phidget object in your code. For example, we can declare a digital input object like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=csharp&amp;gt;&lt;br /&gt;
DigitalInput ch;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, the Phidget object needs to be initialized and opened:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
ch = new DigitalInput();&lt;br /&gt;
ch.Open();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although we are not including it on this page, you should include error handling for all Phidget functions. Here is an example of the previous code with error handling:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
try{&lt;br /&gt;
  ch = new DigitalInput();&lt;br /&gt;
  ch.Open();&lt;br /&gt;
}catch(PhidgetException ex){&lt;br /&gt;
  Console.WriteLine(&amp;quot;Error: &amp;quot; + ex.Description);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Step Two: Wait for attachment of the Phidget ====&lt;br /&gt;
Simply calling open does not guarantee you can use the Phidget immediately. To use a Phidget, it must be plugged in (attached). We can handle this by using event driven programming and tracking the attach events. Alternatively, we can modify our code so we wait for an attachment:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CSharp&amp;gt;&lt;br /&gt;
ch = new DigitalInput();&lt;br /&gt;
ch.Open(5000); //wait for attach for 5 seconds, if not time out&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Waiting for attachment will block indefinitely until a connection is made, or until the timeout value is exceeded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To use events, we have to modify our code slightly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CSharp&amp;gt;&lt;br /&gt;
ch = new DigitalInput();&lt;br /&gt;
ch.Attach += onAttachHandler;&lt;br /&gt;
ch.Open();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, we have to declare the function that will be called when an attach event is fired - in this case the function &#039;&#039;onAttachHandler&#039;&#039; will be called.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CSharp&amp;gt;&lt;br /&gt;
void onAttachHandler (object sender, Phidget22.Events.AttachEventArgs e){&lt;br /&gt;
  attachedText.Text = &amp;quot;Attached&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Step Three: Do things with the Phidget ====&lt;br /&gt;
We recommend the use of event driven programming when working with Phidgets. In a similar way to handling an attach event as described above, we can also add an event handler for a state change event:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=csharp&amp;gt;&lt;br /&gt;
ch = new DigitalInput();&lt;br /&gt;
ch.Attach += onAttachHandler;&lt;br /&gt;
ch.StateChange += onStateChangeHandler;&lt;br /&gt;
ch.Open();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This code will connect a function and an event. In this case, the &#039;&#039;onStateChangeHandler&#039;&#039; function will be called when there has been a change to the devices input. Next, we need to create the &#039;&#039;onStateChangeHandler&#039;&#039; function:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
void onStateChangeHandler(object sender, Phidget22.Events.DigitalInputStateChangeEventArgs e) {&lt;br /&gt;
    stateText.Text = &amp;quot;State: &amp;quot; + e.State;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If events do not suit your needs, you can also poll the device directly for data using code like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
stateText.Text = &amp;quot;State: &amp;quot; + ch.State;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Step Four: Close and delete ====&lt;br /&gt;
At the end of your program, be sure to close your device.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
ch.Close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
[[Phidget Programming Basics]] - Here you can find the basic concepts to help you get started with making your own programs that use Phidgets.&lt;br /&gt;
&lt;br /&gt;
[[Data Interval/Change Trigger]] - Learn about these two properties that control how much data comes in from your sensors.&lt;br /&gt;
&lt;br /&gt;
[[Using Multiple Phidgets]] - It can be difficult to figure out how to use more than one Phidget in your program. This page will guide you through the steps.&lt;br /&gt;
&lt;br /&gt;
[[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.&lt;br /&gt;
&lt;br /&gt;
[[Logging, Exceptions, and Errors]] - Learn about all the tools you can use to debug your program.&lt;br /&gt;
&lt;br /&gt;
[[Phidget Network Server]] - Phidgets can be controlled and communicated with over your network- either wirelessly or over ethernet.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Csharp_visualstudio_commandLineParameters.png&amp;diff=28419</id>
		<title>File:Csharp visualstudio commandLineParameters.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Csharp_visualstudio_commandLineParameters.png&amp;diff=28419"/>
		<updated>2017-09-06T14:16:59Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=28407</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=28407"/>
		<updated>2017-08-21T18:53:31Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will issue you an RMA number and will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Unless we are unusually busy most orders received before 12:00 PM Mountain Time - Canada (GMT-07:00) Monday to Friday will be shipped on the same day.&lt;br /&gt;
&lt;br /&gt;
Orders which contain cut to length parts may not necessarily ship same day as there is significant processing time associated with these orders.  &lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
The shipping cost is calculated at Checkout and submitted for your review before you confirm your order. When multiple shipping options are available for your destination, we will list all available options and let you choose.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders which are under $50.00.&lt;br /&gt;
&lt;br /&gt;
If you have your own account with UPS, you can use it and be billed directly by them.  In that case you have more shipping options available to you.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We use UPS Express Saver™ - Overnight delivery, and UPS Standard - 3 to 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
&lt;br /&gt;
====UPS Express Saver™ - Overnight====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments under $2000.00USD&#039;&#039;&#039;: we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments over $2000.00USD&#039;&#039;&#039;: you are responsible for duty and taxes if applicable and will have to pay UPS directly on top of the shipping cost we put on our invoice.&lt;br /&gt;
&lt;br /&gt;
====UPS Standard - Ground 3 to 5 business days====&lt;br /&gt;
&#039;&#039;&#039;Shipments under $800.00USD&#039;&#039;&#039;: we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipment over $800.00USD&#039;&#039;&#039; UPS will collect Entry Preparation Fees directly from you when delivering the package, and for duty and taxes if applicable.  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Entry Preparation Fees&#039;&#039;&#039;&lt;br /&gt;
:*All rates are in U.S. funds&lt;br /&gt;
:*Rates do not include applicable duties or taxes&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Value for duty|| UPS Standard Service&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$0.00 to $800.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|No Charge&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$800.01 to $1,250.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$28.75&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1,250.01 to $2,500.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$40.50&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Each Additional $1,000.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1.95&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We use UPS Worldwide Express Saver™, and UPS Worldwide Expedited for international locations that cannot be reached with Express Saver.&lt;br /&gt;
&lt;br /&gt;
Goods shipped to an international destination may be subject to import duties and taxes, which are levied once the goods reach your country. Additional charges for customs clearance must be borne by you; we have no control over these charges and cannot predict what they may be. Since customs policies vary widely from country to country, you should contact your local customs office for further information.&lt;br /&gt;
&lt;br /&gt;
===Tracking your order===&lt;br /&gt;
You can track your shipment by going to www.UPS.ca and using the tracking number that was e-mailed to you when your order shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If, when the package arrives there is no one to accept delivery UPS will redeliver 2 more times.  This is standard UPS protocol.  If delivery fails they will keep the package for 5 days and then return it to us. We will then refund you the cost you paid minus the cost of shipping (both directions) and a flat $50 charge to a maximum of the total cost of the package.  This applies to packages which failed delivery due to no one being present as well as packages which were refused delivery by a person at the delivery location.&lt;br /&gt;
&lt;br /&gt;
===Import Restrictions to Russia===&lt;br /&gt;
If you are wanting to ship an order to Russia you MUST have a valid business license number in order to complete the shipment.  You can include this number in the comments field of the order form.  The reason for this is best explained by UPS:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Customs authorities in Russia have tightened restrictions on import shipments to Russia, in particular on dutiable shipments sent to private individuals. These shipments are currently under extraordinary scrutiny in an effort to improve accuracy of the accompanying shipping documentation.  These additional requirements lead to an unprecedented number of customs holds and delays in delivery.  UPS has therefore temporarily suspended the acceptance of dutiable shipments sent to private individuals in Russia until further notice.  We regret this step and are confident that, together with the Russian customs authorities, a solution can be found. UPS continues to accept all non-dutiable document shipments to private individuals in Russia and all commercial shipments addressed to businesses.&amp;quot; [http://www.ups.com/content/hr/en/about/news/service_updates/20100526_restrictions.html]&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All returns must be authorized by Phidgets Inc.===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets will take back any unopened product for a period of 30 days from the date of purchase. Just call or e-mail us for a RMA number and ship the product back to Phidgets prepaid and we will refund your credit card as soon as we receive and inspect the returned goods.&lt;br /&gt;
&lt;br /&gt;
Products that are returned after 30 days are subject to a re-stocking charge of 25% of the package&#039;s value (minimum $5.00) to a maximum of $500.&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns after 90 days.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We shipped the wrong/incomplete product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
|+&#039;&#039;&#039;Phidgets Inc. Holidays&#039;&#039;&#039;&lt;br /&gt;
! Holiday || Description || 2016 || 2017&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| New Year&#039;s Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First two days of January&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jan 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jan 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 15&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 20&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Mar 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 14&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 23&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 22&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 7&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 4&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 4&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 10&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 9&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Dec 22 to the New Year&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Dec 22 to the New Year&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Dealers&amp;diff=28329</id>
		<title>Dealers</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Dealers&amp;diff=28329"/>
		<updated>2017-08-03T14:24:25Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked_From_Website]]&lt;br /&gt;
&lt;br /&gt;
Select your Region:&lt;br /&gt;
&lt;br /&gt;
{{TOClimit|2}}&lt;br /&gt;
&lt;br /&gt;
==North America==&lt;br /&gt;
&lt;br /&gt;
===Canada===&lt;br /&gt;
&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|RobotShop&lt;br /&gt;
|{{DealerURL|www.robotshop.com/ca/en/phidgets-en.html}}&lt;br /&gt;
|Tel: 450 420 1446&lt;br /&gt;
|Fax: 450 420 1447&lt;br /&gt;
|{{DealerMail|sales@robotshop.ca}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|Solarbotics Ltd.&lt;br /&gt;
|{{DealerURL|www.solarbotics.com}}&lt;br /&gt;
|North America Toll Free: 1-866-276-2687&lt;br /&gt;
|Local/International: 1-403-232-6268&lt;br /&gt;
|{{DealerMail|info@solarbotics.com}}&lt;br /&gt;
}}&lt;br /&gt;
||||}}&lt;br /&gt;
&lt;br /&gt;
===Mexico===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|5Hz Electronica&lt;br /&gt;
|{{DealerURL|www.5hz-electronica.com}}&lt;br /&gt;
|Tel: (81) 1341.4109 &lt;br /&gt;
|{{DealerMail|ventas@5hertz.com}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|Electronica Estudio&lt;br /&gt;
|{{DealerURL|www.electronicaestudio.com}}&lt;br /&gt;
|Tel: 55 12 79 75&lt;br /&gt;
|{{DealerMail|wgb@electronicaestudio.com}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
||||}}&lt;br /&gt;
&lt;br /&gt;
===USA===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|TrossenRobotics&lt;br /&gt;
|{{DealerURL|www.trossenrobotics.com}}&lt;br /&gt;
|Tel: 877 898 1005&lt;br /&gt;
|{{DealerMail|trsupport@trossenrobotics.com}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|USBStuff&lt;br /&gt;
|{{DealerURL|www.usbstuff.com}}&lt;br /&gt;
|Tel: 877 446 8947&lt;br /&gt;
|{{DealerMail|orders@industrialcomponent.com}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|RobotShop&lt;br /&gt;
|{{DealerURL|www.robotshop.com/en/phidgets-en.html}}&lt;br /&gt;
|Tel: 866-627-3178&lt;br /&gt;
|Fax: 420-420-1447&lt;br /&gt;
|{{DealerMail|supportcenter@robotshop.com}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|Green Energy Research, Inc.&lt;br /&gt;
|{{DealerURL|www.gerelectronics.com}}&lt;br /&gt;
|Tel: 1-866-625-8492&lt;br /&gt;
|{{DealerMail|info@greenenergyresearch.com}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
||}}&lt;br /&gt;
&lt;br /&gt;
==South America==&lt;br /&gt;
&lt;br /&gt;
===Colombia===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|EDU-SOLUTIONS&lt;br /&gt;
|{{DealerURL|www.edusolutions.ws}}&lt;br /&gt;
|(571)600 7526&lt;br /&gt;
|(571) 606 8268&lt;br /&gt;
|{{DealerMail|ventas@edusolutions.ws}}&lt;br /&gt;
}}&lt;br /&gt;
|||||}}&lt;br /&gt;
&lt;br /&gt;
==Europe==&lt;br /&gt;
&lt;br /&gt;
===France===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|GO TRONIC&lt;br /&gt;
|{{DealerURL|www.gotronic.fr}}&lt;br /&gt;
|Tel: +33.324.27.93.42&lt;br /&gt;
|Fax: +33.324.27.93.50 &lt;br /&gt;
|{{DealerMail|commandes@gotronic.fr}}&lt;br /&gt;
}}&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|RobotShop Europe&lt;br /&gt;
|{{DealerURL|www.robotshop.com/eu/fr/phidgets-en.html}}&lt;br /&gt;
|Tel: +33 (0) 8 00 00 18 37&lt;br /&gt;
|{{DealerMail|supportcenter@robotshop.com}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
||||}}&lt;br /&gt;
&lt;br /&gt;
===Germany===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|noDNA GmbH&lt;br /&gt;
|{{DealerURL|www.nodna.com}}&lt;br /&gt;
|Tel: +49 89 1222375-50 &lt;br /&gt;
|Fax: +49 89 1222375-59&lt;br /&gt;
|{{DealerMail|sales@nodna.com}}&lt;br /&gt;
}}&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|Böcker Systemelektronik&lt;br /&gt;
|{{DealerURL|www.boecker-systemelektronik.de}}&lt;br /&gt;
|Tel: +49-2381-974280&lt;br /&gt;
|Fax: +49-2381-377463&lt;br /&gt;
|{{DealerMail|info@boecker-systemelektronik.de}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
||||}}&lt;br /&gt;
&lt;br /&gt;
===Italy===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|Emmeshop srl&lt;br /&gt;
|{{DealerURL|www.emmeshop.eu}}&lt;br /&gt;
|Tel: +39 0544 1766265&lt;br /&gt;
|Fax: +39 0544 1960281&lt;br /&gt;
|{{DealerMail|sales@emmeshop.eu}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|Robot Italy srl&lt;br /&gt;
|{{DealerURL|www.robot-italy.com}}&lt;br /&gt;
|Tel: +39 06 414 011 01&lt;br /&gt;
|Fax: +39 06 233 243 440&lt;br /&gt;
|Please use the contact form on our web site&lt;br /&gt;
}}&lt;br /&gt;
||||}}&lt;br /&gt;
&lt;br /&gt;
===Sweden===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|CLC SYSTEMS AB&lt;br /&gt;
|{{DealerURL|clcsystems.nordicshops.com}}&lt;br /&gt;
|Tel: +46 171 411030&lt;br /&gt;
|Fax: +46 171 411090&lt;br /&gt;
|{{DealerMail|info@clcsystems.se}}&lt;br /&gt;
}}&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|EZtronics&lt;br /&gt;
|{{DealerURL|www.eztronics.se}}&lt;br /&gt;
|Tel: +46 708342567&lt;br /&gt;
|{{DealerMail|info@eztronics.se}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
||||}}&lt;br /&gt;
&lt;br /&gt;
===The Netherlands===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|EZtronics&lt;br /&gt;
|{{DealerURL|www.eztronics.nl}}&lt;br /&gt;
|Tel: +31 302421478&lt;br /&gt;
|&lt;br /&gt;
|{{DealerMail|info@eztronics.nl}}&lt;br /&gt;
}}&lt;br /&gt;
|||||}}&lt;br /&gt;
&lt;br /&gt;
===United Kingdom===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|Active Robots Inc.&lt;br /&gt;
|{{DealerURL|www.active-robots.com}}&lt;br /&gt;
|Tel: +44 (0)176 123 9267&lt;br /&gt;
|Fax: +44 (0)176 123 3162&lt;br /&gt;
|Please use the contact form on our web site&lt;br /&gt;
}}&lt;br /&gt;
|||||}}&lt;br /&gt;
&lt;br /&gt;
==Asia==&lt;br /&gt;
&lt;br /&gt;
===India===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|MG Automation Technologies&lt;br /&gt;
|{{DealerURL|http://www.mgsuperlabs.com/}}&lt;br /&gt;
|Tel: (+91)7721933328&lt;br /&gt;
|{{DealerMail|estore@mgsuperlabs.co.in}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
||||||}}&lt;br /&gt;
&lt;br /&gt;
===Japan===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|RobotShop Japan&lt;br /&gt;
|{{DealerURL|www.robotshop.com/jp/ja/}}&lt;br /&gt;
|Tel: 088-635-0277 &lt;br /&gt;
|Fax: 088-635-0278&lt;br /&gt;
|Email form on website&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
||||||}}&lt;br /&gt;
&lt;br /&gt;
===Singapore===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|sgBOTIC&lt;br /&gt;
|{{DealerURL|www.sgbotic.com}}&lt;br /&gt;
|Tel: +65-65701125&lt;br /&gt;
|{{DealerMail|sales@sgbotic.com}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|Amicus Engineering&lt;br /&gt;
|{{DealerURL|www.amicus.com.sg}}&lt;br /&gt;
|Tel: +65-684 55558&lt;br /&gt;
|{{DealerMail|sales@amicus.com.sg}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
|||||}}&lt;br /&gt;
&lt;br /&gt;
===South Korea===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|SEED Technology&lt;br /&gt;
|{{DealerURL|seedtech.co.kr}}&lt;br /&gt;
|Tel: 82-32-623-6220&lt;br /&gt;
|Fax: 82-32-623-5267&lt;br /&gt;
|{{DealerMail|info@seedtech.co.kr}}&lt;br /&gt;
}}&lt;br /&gt;
|{{Dealer&lt;br /&gt;
|VCTEC&lt;br /&gt;
|{{DealerURL|vctec.co.kr}}&lt;br /&gt;
|Tel: 070-7770-6256&lt;br /&gt;
|Fax: 031-696-6258&lt;br /&gt;
|{{DealerMail|cs@vctec.co.kr}}&lt;br /&gt;
}}&lt;br /&gt;
||||}}&lt;br /&gt;
&lt;br /&gt;
===Taiwan===&lt;br /&gt;
{{Dealerbox|{{Dealer&lt;br /&gt;
|IDM Store&lt;br /&gt;
|{{DealerURL|www.idmstore.com}}&lt;br /&gt;
|Tel: 886-2-2362-9896&lt;br /&gt;
|{{DealerMail|inquiry@idmstore.com}}&lt;br /&gt;
|&lt;br /&gt;
}}&lt;br /&gt;
|||||}}&lt;br /&gt;
&lt;br /&gt;
==Middle East &amp;amp; Africa==&lt;br /&gt;
&lt;br /&gt;
===Algeria===&lt;br /&gt;
&lt;br /&gt;
{{Dealerbox|{{Dealer|Dzduino Electronics&lt;br /&gt;
|{{DealerURL|dzduino.com}}&lt;br /&gt;
|Tel: 00213 540 265 592&lt;br /&gt;
|Fax: 00213 45 366 373&lt;br /&gt;
|{{DealerMail|contact@dzduino.com}}&lt;br /&gt;
}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Israel===&lt;br /&gt;
{{Dealerbox|{{Dealer|Testview&lt;br /&gt;
|{{DealerURL|shop.testview.co.il/}}&lt;br /&gt;
|Tel: +972-54-5376124&lt;br /&gt;
|Fax: +972-773457377&lt;br /&gt;
|{{DealerMail|info@testview.co.il}}&lt;br /&gt;
}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
===South Africa===&lt;br /&gt;
{{Dealerbox|{{Dealer|AutomationBuyer&lt;br /&gt;
|{{DealerURL|www.automationbuyer.co.za/}}&lt;br /&gt;
|Tel: +27-41-451-2712&lt;br /&gt;
|&lt;br /&gt;
|{{DealerMail|Support@automationbuyer.co.za}}&lt;br /&gt;
}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
==Australia==&lt;br /&gt;
{{Dealerbox|{{Dealer|IoT Store Australia&lt;br /&gt;
|{{DealerURL|iot-store.com.au}}&lt;br /&gt;
|Tel: +61424742772&lt;br /&gt;
|&lt;br /&gt;
|{{DealerMail|info@iot-store.com.au}}&lt;br /&gt;
}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Main_Page&amp;diff=28241</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Main_Page&amp;diff=28241"/>
		<updated>2017-07-11T13:54:48Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]__NOTOC__&lt;br /&gt;
&amp;lt;div class=&amp;quot;wikimain-ctn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Phidgets Support&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;cat-ctn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Hardware&amp;lt;/h3&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;[[What_is_VINT%3F|What is VINT?]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Phidgets Connectors]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Solid State Relay Primer|Solid State Relays]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Stepper Motor and Controller Primer |Stepper Motors]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[RFID Primer|RFIDs]]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For information about a specific class of products check our &#039;&#039;&#039;[[:Category:Primer|Phidget Primers]]&#039;&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;cat-ctn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Software&amp;lt;/h3&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;[[Software Overview#Language Support|Supported Languages]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Software Overview#Operating System Support|Operating Systems]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;{{Phidget22API}}&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[General Phidget Programming]]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
Use Phidgets over a network with our &#039;&#039;&#039;[[Phidget Network Server|Network Server]]&#039;&#039;&#039; and &#039;&#039;&#039;[[Phidget Dictionary|Dictionary]]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;cat-ctn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Help&amp;lt;/h3&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;[[General Troubleshooting]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Phidget Control Panel]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[What is a Phidget?|What is a Phidget?]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[:Category:UserGuide|User Guides]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Upgrading_Code_from_Phidget21_to_Phidget22|Upgrading from Phidget21 to Phidget22]]&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
If you can&#039;t find the solution to your problem, feel free to {{ContactUs|Contact Us}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;cat-ctn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Inspiration&amp;lt;/h3&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;[http://www.pinterest.com/phidgets/phidgets/ Customer Projects]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[{{SERVER}}/?view=articles Articles]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[http://www.phidgets.com/phorum/ Forums]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;cat-ctn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Phidgets Inc.&amp;lt;/h3&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;[[About Phidgets Inc.]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Dealers]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Policies|Shipping Policies]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;{{ContactUs|Contact Us}}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_Max&amp;diff=28224</id>
		<title>Language - Max</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_Max&amp;diff=28224"/>
		<updated>2017-07-07T14:31:34Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Language]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Downloads ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
*{{Phidget22API}} (select Max/MSP from the drop-down menu)&lt;br /&gt;
&lt;br /&gt;
=== Example Code ===&lt;br /&gt;
* [{{SERVER}}/downloads/phidget22/libraries/windows/Phidget22MaxMSP.zip Max/MSP Examples]&lt;br /&gt;
&lt;br /&gt;
=== Libraries ===&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/windows/Phidget22MaxMSP.zip Phidget Max/MSP library - Windows]&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22MaxMSP.zip Phidget Max/MSP library - macOS]&lt;br /&gt;
{{WindowsQuickDownloads}}&lt;br /&gt;
{{MacQuickDownloads}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started with Max/MSP ==&lt;br /&gt;
Welcome to using Phidgets with Max/MSP! By using Max/MSP, you will have access to the complete {{Phidget22API}}, including events. We also provide example code in Max/MSP for all Phidget devices.&lt;br /&gt;
&lt;br /&gt;
Phidget22 supports Max/MSP versions 6 and up.&lt;br /&gt;
&lt;br /&gt;
If you are developing for Windows, keep reading. Otherwise, jump ahead to [[#macOS | macOS]].&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
{{Windows_Languages}}&lt;br /&gt;
===Use our examples===&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install Max/MSP from [https://cycling74.com/downloads Cycling &#039;74].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, download and unpack the Phidgets Max/MSP library:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/windows/Phidget22MaxMSP.zip Phidget Max/MSP library]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After unpacking the download, navigate to the &#039;&#039;externals&#039;&#039; folder. Copy the following folder to your clipboard:&lt;br /&gt;
*32-bit Max/MSP -&amp;gt; copy the &#039;&#039;x86&#039;&#039; folder&lt;br /&gt;
*64-bit Max/MSP -&amp;gt; copy the &#039;&#039;x64&#039;&#039; folder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Max_externals.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The folder you copied needs to be placed in a specific location for Max/MSP to reference it. We will find this location in in the next step.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Max/MSP and navigate to &#039;&#039;Options&#039;&#039; -&amp;gt; &#039;&#039;File Preferences&#039;&#039;.&lt;br /&gt;
[[Image:Max_filepreferences.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will see something similar to this:&lt;br /&gt;
[[Image:Max_filepreferences_locations.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The folder that you copied earlier needs to be placed in any of the locations listed in &#039;&#039;File Preferences&#039;&#039;. Navigate to one of the locations and paste the folder:&lt;br /&gt;
[[Image:Max_folder.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Max/MSP library is now being referenced. Next, navigate to the &#039;&#039;examples&#039;&#039; folder located within the Phidget22MaxMSP folder you previously unpacked:&lt;br /&gt;
[[Image:Max_examples.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From here, select an example that will work with your Phidget and open it in Max/MSP. You can run the example by simply pressing the &#039;&#039;start&#039;&#039; button:&lt;br /&gt;
[[Image:Max_run.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
You should now have the example up and running for your device. Play around with the device and experiment with some of the functionality. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
===Configure your project===&lt;br /&gt;
When you are building a project from scratch, or adding Phidget function calls to an existing project, you&#039;ll need to configure the Max/MSP environment to properly link the Phidget Max/MSP library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensure the Phidget library files are moved to a location in the Max/MSP search path. This procedure is covered in detail above in the [[#Use our examples | use our examples]] section. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After moving the library files into the correct location your project will have access to Phidgets. Next, view the [[#Write Code | write your own code]] section below.&lt;br /&gt;
&lt;br /&gt;
==macOS==&lt;br /&gt;
{{macOS_Languages}}&lt;br /&gt;
===Use our examples===&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install Max/MSP from [https://cycling74.com/downloads Cycling &#039;74].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, download and unpack the Phidgets Max/MSP library:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22.dmg Phidget Max/MSP library]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After unpacking the download, navigate to the &#039;&#039;externals&#039;&#039; folder and copy it to your clipboard:&lt;br /&gt;
[[Image:Max_mac_externals.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The folder you copied needs to be placed in a specific location for Max/MSP to reference it. We will find this location in in the next step.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Open Max/MSP and navigate to &#039;&#039;Options&#039;&#039; -&amp;gt; &#039;&#039;File Preferences&#039;&#039;.&lt;br /&gt;
[[Image:Max_mac_filepreferences.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will see something similar to this:&lt;br /&gt;
[[Image:Max_mac_filepreferences_locations.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The folder that you copied earlier needs to be placed in any of the locations listed in &#039;&#039;File Preferences&#039;&#039;. Navigate to one of the locations and paste the folder:&lt;br /&gt;
[[Image:Max_mac_folder.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Max/MSP library is now being referenced. Next, navigate to the &#039;&#039;examples&#039;&#039; folder located within the Phidget22MaxMSP folder you previously unpacked:&lt;br /&gt;
[[Image:Max_mac_examples.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From here, select an example that will work with your Phidget and open it in Max/MSP. You can run the example by simply pressing the &#039;&#039;start&#039;&#039; button:&lt;br /&gt;
[[Image:Max_mac_run.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
You should now have the example up and running for your device. Play around with the device and experiment with some of the functionality. When you are ready, the next step is configuring your project and writing your own code!&lt;br /&gt;
&lt;br /&gt;
===Configure your project===&lt;br /&gt;
When you are building a project from scratch, or adding Phidget function calls to an existing project, you&#039;ll need to configure the Max/MSP environment to properly link the Phidget Max/MSP library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensure the Phidget library files are moved to a location in the Max/MSP search path. This procedure is covered in detail above in the [[#Use our examples 2 | use our examples]] section. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After moving the library files into the correct location your project will have access to Phidgets. Next, view the [[#Write Code | write your own code]] section below.&lt;br /&gt;
&lt;br /&gt;
== Write Code ==&lt;br /&gt;
{{WriteCode_Intro}}&lt;br /&gt;
&lt;br /&gt;
=== Example Flow ===&lt;br /&gt;
First, let&#039;s explain how to operate the examples. We will take a look at the PhidgetVoltageInput example:&lt;br /&gt;
[[Image: MSP Example.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For this particular example, the Max object is called PhidgetVoltageInput, which is located near the bottom left of the screen. Objects/message boxes are connected to the inputs and outputs of the PhidgetVoltageInput object. The input objects will either cause a property of the device to change or request for a property to be retrieved. The output objects return the retrieved information. All the supported functions for Max/MSP will be documented in the {{Phidget22API}} for your device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Try it for yourself! Click on the getDeviceSerialNumber message box to request the Phidget to retrieve the serial number of the device. You should see the a message in the Max window denoting the serial number of your device. All devices support the getDeviceSerialNumber message, making it an easy way to determine if the Phidget libraries are correctly set up, and whether the Max/MSP application is connected to your device.&lt;br /&gt;
[[Image: MaxMSP_GetSerial.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If your example contains a get[DataType] message box, click on it to cause the associated data to be output with a relevant prefix. [DataType] can denote any data the object may offer, such as Voltage for a voltage input. A list of available messages and their associated outputs is outlined in the {{Phidget22API}} for your device.&lt;br /&gt;
[[Image: MaxMSP_GetVoltage.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If your example contains the start message box, you can continuously poll for events. Just press the start message box to start sampling. When an event occurs on a Phidget (i.e. when a sensor detects a change in the measured data), associated data will be output with related prefixes. Press the stop message box to stop sampling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For the PhidgetDigitalOutput example, there are setDutyCycle and setState message boxes. Changing the numbers will cause the digital output to change. Your example may contain device specific message boxes to click on. Click them to see what they do!&lt;br /&gt;
&lt;br /&gt;
=== Code Snippets ===&lt;br /&gt;
Your best resource to program code in MaxMSP will be our examples.&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t familiar with concepts in Phidget programming, you may find our General Phidget Programming page helpful. It provides a very generic overview of what traditional languages follow when using Phidgets. For setup &#039;syntax&#039;, your main resource will of course be this MaxMSP page, the {{Phidget22API}}, and the examples. But for conceptual details about particular actions - opening a Phidget, for example - the General Phidget Programming page is a more in-depth resource.&lt;br /&gt;
&lt;br /&gt;
Keep in mind when reading these general resources that the Max/MSP libraries may not implement the full {{Phidget22API}} - some function calls and Phidget classes may not be supported.&lt;br /&gt;
&lt;br /&gt;
In general, Phidget objects can be placed inside the patcher, and functions can be called on them using appropriately connected messages. We go over a basic setup for this below.&lt;br /&gt;
&lt;br /&gt;
==== Step One: Initialize and Open ====&lt;br /&gt;
This tutorial uses a Phidget Voltage Input, and thus the object we use will be called PhidgetVoltageInput. Initializing and opening the device is be done by placing a new object. Other objects handle different Phidgets - a Spatial, a Temperature Sensor, a Motor Controller, etc. Only the name of the object changes. You can find the name for the object in the .maxhelp file for your device. The help file will be named the same as the software object for your device. If you are not sure what the software object for your device is, find your Phidget on our [http://www.phidgets.com webpage], and then check the API documentation for it.&lt;br /&gt;
&lt;br /&gt;
In the case of a Voltage Input, we name it PhidgetVoltageInput:&lt;br /&gt;
[[Image: MaxMSP_VoltageInput_generic.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; a local connection will reserve the device until closed. This prevents any other instances from retrieving data from the Phidget, including other programs. Every Phidget object in Max will automatically try to connect to and reserve a Phidget for itself. As long as a MaxMSP Phidget object is running, it will continuously try to connect to a Phidget, even trying to reconnect if it gets disconnected.&lt;br /&gt;
&lt;br /&gt;
When the instance is created as with the Voltage Input above, normally it will make a connection to the first device of its type it can find. The Phidget object can also be declared with a serial number, among other specifiers, to open a specific Phidget instead. To view a full list of available device specifiers and what they do, see the readme.txt included with the Phidget22 Max/MSP library.&lt;br /&gt;
[[Image: MaxMSP VoltageInput specific.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Using a Phidget Over a Network=====&lt;br /&gt;
&lt;br /&gt;
To use the Network Server, first the Phidget needs to be plugged in to a computer that has the Network  Server turned on within your local network. (For information on how to do this, see the Phidget Network Server page in the section on how to use the Network Server for your operating system).&lt;br /&gt;
&lt;br /&gt;
Next, in your patch you need a PhidgetNet object. To automatically find local networks, send it a message saying enableServerDiscovery.&lt;br /&gt;
[[Image: MaxMSP Enable Server Discovery.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, to connect a Phidget over the network, change the object text to specify it is to connect to a Phidget on a remote server, as per the following example.&lt;br /&gt;
[[Image: MaxMSP Remote.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Step Two: Wait for Attachment (plugging in) of the Phidget ====&lt;br /&gt;
&lt;br /&gt;
Although this is a required step in many of our other languages (and therefore you may be expecting this if coming from another Phidget language), in MaxMSP you do not have to add a specific waitForAttachment block.&lt;br /&gt;
&lt;br /&gt;
Keep in mind, however, that if your Phidget is not responding within your MaxMSP program, it may simply not be plugged in! Send a getAttached message to a Phidget object at any time to see if it&#039;s attached.&lt;br /&gt;
&lt;br /&gt;
==== Step Three: Do Things with the Phidget ====&lt;br /&gt;
&lt;br /&gt;
There are two main approaches for retrieving data when working with Phidgets. Data is accessed either by one-time polling or at a fixed rate via on-board timers for some devices.&lt;br /&gt;
&lt;br /&gt;
Getting or setting values directly via polling on the Phidget is done through messages linked to the inlet. The object’s inlet can be wired to send commands to the device, and the outlet used to retrieve the results. Setting values on the Phidget is achieved by using the set messages, and some properties can be read with get messages:&lt;br /&gt;
[[Image: MaxMSP_get_and_set.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To sample at a fixed rate, use the start and stop messages to start and stop the data flow, respectively.&lt;br /&gt;
[[Image: MaxMSP_Start_Stop.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
Data from the outlet of a Phidget object is always given a prefix to allow for routing. For instance, the digital input state state change event data is given the prefix “stateChange”, and the voltage input voltage change event similarly use “voltageChange”. The specific prefixes used for each set of outlet data is listed under the API page for their class in the {{Phidget22API}}.&lt;br /&gt;
[[Image: MaxMSP_Routing.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The rightmost outlet on the Phidget object outputs error event data. This will send information on error events such as saturation events. To see which error events may apply to your device, check its API page in the {{Phidget22API}}.&lt;br /&gt;
[[Image: MaxMSP_Error_Event.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Step Four: Close and Delete ====&lt;br /&gt;
&lt;br /&gt;
Although this is a required step in many of our other languages (and therefore you may be expecting this if coming from another Phidget language), in MaxMSP you do not have to add a specific close and delete block.&lt;br /&gt;
&lt;br /&gt;
====Special Case: Multiple Phidgets====&lt;br /&gt;
&lt;br /&gt;
Multiple Phidgets of the same type can easily be used inside a single program, it only requires another Phidget object placed. If two of the same type of Phidget object are placed, the serial number and channel arguments should always be specified (as well as hub port, if applicable) to ensure that the correct Phidget gets associated with the correct object.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
[[Phidget Programming Basics]] - Here you can find the basic concepts to help you get started with making your own programs that use Phidgets.&lt;br /&gt;
&lt;br /&gt;
[[Data Interval/Change Trigger]] - Learn about these two properties that control how much data comes in from your sensors.&lt;br /&gt;
&lt;br /&gt;
[[Using Multiple Phidgets]] - It can be difficult to figure out how to use more than one Phidget in your program. This page will guide you through the steps.&lt;br /&gt;
&lt;br /&gt;
[[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.&lt;br /&gt;
&lt;br /&gt;
[[Logging, Exceptions, and Errors]] - Learn about all the tools you can use to debug your program.&lt;br /&gt;
&lt;br /&gt;
[[Phidget Network Server]] - Phidgets can be controlled and communicated with over your network- either wirelessly or over ethernet.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_LabVIEW&amp;diff=28099</id>
		<title>Language - LabVIEW</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_LabVIEW&amp;diff=28099"/>
		<updated>2017-06-29T14:22:42Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Language]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Downloads ==&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* Documentation is included in the LabVIEW examples in the form of vi trees. See the [[#Use_our_examples|next]] section for details.&lt;br /&gt;
=== Example Code ===&lt;br /&gt;
* [{{SERVER}}/downloads/phidget22/libraries/any/Phidget22Labview.zip LabVIEW Examples]&lt;br /&gt;
&lt;br /&gt;
=== Libraries ===&lt;br /&gt;
&lt;br /&gt;
{{WindowsQuickDownloads}}&lt;br /&gt;
&lt;br /&gt;
== Getting Started with LabVIEW ==&lt;br /&gt;
Welcome to using Phidgets with LabVIEW! By using LabVIEW, you will have access to the complete {{Phidget22API}}, including events. We also provide example code in LabVIEW for all Phidget devices.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
{{Windows_Languages}}&lt;br /&gt;
====Use our examples====&lt;br /&gt;
One of the best ways to start programming with Phidgets is to use our example code as a guide. In order to run the examples, you will need to download and install the LabVIEW from [http://www.ni.com/en-ca/shop/labview.html National Instruments].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, download and unpack the Phidgets LabVIEW library:&lt;br /&gt;
*[{{SERVER}}/downloads/phidget22/libraries/any/Phidget22Labview.zip Phidget LabVIEW library]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rename the unpacked folder to &#039;&#039;Phidgets&#039;&#039;&lt;br /&gt;
[[Image:Labview_rename.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Navigate to the following directory:&lt;br /&gt;
*For 32-bit LabVIEW -&amp;gt; C:/Program Files (x86)/National Instruments/LabVIEW 20xx/instr.lib&lt;br /&gt;
*For 64-bit LabVIEW -&amp;gt; C:/Program Files/National Instruments/LabVIEW 20xx/instr.lib&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Place the renamed folder at this location:&lt;br /&gt;
[[Image:Labview_copy.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, open LabVIEW and create a new VI:&lt;br /&gt;
[[Image:Labview_newvi.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Navigate to the block diagram window that was generated and open the functions palette (&#039;&#039;View&#039;&#039; -&amp;gt; &#039;&#039;Functions Palette&#039;&#039;). Next, navigate to the Phidgets palette (&#039;&#039;Instrument I/O&#039;&#039; -&amp;gt; &#039;&#039;Instrument Drivers&#039;&#039; -&amp;gt; &#039;&#039;Phidgets&#039;&#039;):&lt;br /&gt;
[[Image:Labview_functionspalette.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, select a palette that will work for your Phidget and drag the &#039;&#039;VI Tree.vi&#039;&#039; onto your block diagram:&lt;br /&gt;
[[Image:Labview_vitree.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Right-click on &#039;&#039;VI Tree.vi&#039;&#039; and select &#039;&#039;Open Front Panel&#039;&#039;:&lt;br /&gt;
[[Image:Labview_openfrontpanel.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From the front panel, navigate to the block diagram (&#039;&#039;Window&#039;&#039; -&amp;gt; &#039;&#039;Block Diagram&#039;&#039;):&lt;br /&gt;
[[Image:Labview_showblock.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The examples are located near the bottom of the block diagram. Right-click the example you would like to use and select &#039;&#039;Open Front Panel&#039;&#039;:&lt;br /&gt;
[[Image:Labview_runexample.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you are ready, press run and the application will demonstrate the Phidget&#039;s functionality. Here is an example of an Accelerometer channel on a Spatial Phidget:&lt;br /&gt;
[[Image:Labview_run.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now have the example up and running for your device. Play around with the device and experiment with some of the functionality. When you are ready, the next step is configuring your environment and writing your own code!&lt;br /&gt;
&lt;br /&gt;
====Configure your environment====&lt;br /&gt;
If you haven&#039;t already, jump back and take a look at the [[#Use our examples | use our examples]] section above. There you will be instructed on how to properly set up LabVIEW so you can follow the guides below. If you are ready, keep reading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To begin configuring your environment, we recommend enabling the &#039;&#039;Show constant labels&#039;&#039; setting in LabVIEW . This setting will reduce complexity when developing, and is especially recommended for beginners. To enable the setting, first navigate to &#039;&#039;Tools&#039;&#039; -&amp;gt; &#039;&#039;Options&#039;&#039; on your block diagram:&lt;br /&gt;
[[Image:Labview_options.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select the &#039;&#039;Environment&#039;&#039; category and enable &#039;&#039;Show created constant labels&#039;&#039; located at the bottom of the screen:&lt;br /&gt;
[[Image:Labview_showconstantlabels.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To begin working with Phidgets, you will need both a &#039;&#039;StartPhidget&#039;&#039; VI and a &#039;&#039;ClosePhidget&#039;&#039; VI:&lt;br /&gt;
[[Image:Labview_startclose.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select a class that will work with your Phidget from the drop-down menu:&lt;br /&gt;
[[Image:Labview_selectclass.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can now add device information or any initialization parameters to the &#039;&#039;StartPhidget&#039;&#039; VI. Using your mouse, hover over the connections to see information about it:&lt;br /&gt;
[[Image:Labview_hover.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you would like to add device information or initialization parameters, right-click the connection and navigate to one of the following:&lt;br /&gt;
*&#039;&#039;Create&#039;&#039; -&amp;gt; &#039;&#039;Constant&#039;&#039;&lt;br /&gt;
*&#039;&#039;Create&#039;&#039; -&amp;gt; &#039;&#039;Control&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Labview_createcontrol.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creating a constant will allow you to modify device information from the block diagram:&lt;br /&gt;
[[Image:Labview_constant.PNG|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creating a control will allow you to modify device information from the front panel:&lt;br /&gt;
[[Image:Labview_control.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The environment now has access to Phidgets. Next, view the write your own code section located below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Write Code==&lt;br /&gt;
By following the instructions for your operating system and compiler above, you probably now have a working example and want to understand it better so you can change it to do what you want. This teaching section has resources for you to learn from the examples and write your own.&lt;br /&gt;
&lt;br /&gt;
Your main reference for writing LabVIEW code will be this page, the examples, the {{Phidget22API}}, and the VI help files.&lt;br /&gt;
&lt;br /&gt;
Examples of more complex general topics such as using multiple Phidgets and connecting to a Phidget over the Network Server can be found under the VI Tree for the &#039;&#039;&#039;Phidget Common&#039;&#039;&#039; palette.&lt;br /&gt;
&lt;br /&gt;
=== Example Flow ===&lt;br /&gt;
Most LabVIEW examples follow the same basic flow: starting a Phidget, reading some data, and closing the Phidget.&lt;br /&gt;
[[Image: Digital Input Example.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
=== Step One: Initialize, Open and Wait for Attachment of the Phidget ===&lt;br /&gt;
The entire process of opening and initializing a Phidget can be done by using the version of &#039;&#039;StartPhidget.vi&#039;&#039; that corresponds to your device. In most cases, &#039;&#039;StartPhidget.vi&#039;&#039; will also attempt to wait for the first data to become available from the device for 5 seconds after initialization.&lt;br /&gt;
[[Image:StartPhidget VI.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you&#039;d prefer to initialize the device manually, you can use &#039;&#039;OpenPhidget.vi&#039;&#039; for your device and call the individual functions to set up the device.&lt;br /&gt;
[[Image: OpenPhidgetVI.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
=== Step Two: Do Things with the Phidget ===&lt;br /&gt;
You can read data and interact with your Phidget both by polling it for its current state (or to set a state), or by catching events that trigger when the data changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To poll devices, simply place the corresponding blocks:&lt;br /&gt;
[[Image:LabVIEW_polling.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To use events, there are three main blocks for each type, to create, execute, and close the event handler. When creating the event, all devices using an event of the same type must be grouped into an array to ensure the events get processed correctly.&lt;br /&gt;
[[Image: Event Array grouping.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once created, the events will be processed by [Name]EventExe.vi. When an event occurs, the pertinent information will be output, as well as information to reference which device caused it.&lt;br /&gt;
[[Image: Event Exe.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After a program has run its course, the event handler must be closed.&lt;br /&gt;
[[Image: Event Close.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Step Three: Close and Delete ===&lt;br /&gt;
Closing a Phidget is done by using the appropriate version of ClosePhidget.vi&lt;br /&gt;
[[Image:Close Phidget VI.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
[[Phidget Programming Basics]] - Here you can find the basic concepts to help you get started with making your own programs that use Phidgets.&lt;br /&gt;
&lt;br /&gt;
[[Data Interval/Change Trigger]] - Learn about these two properties that control how much data comes in from your sensors.&lt;br /&gt;
&lt;br /&gt;
[[Using Multiple Phidgets]] - It can be difficult to figure out how to use more than one Phidget in your program. This page will guide you through the steps.&lt;br /&gt;
&lt;br /&gt;
[[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.&lt;br /&gt;
&lt;br /&gt;
[[Logging, Exceptions, and Errors]] - Learn about all the tools you can use to debug your program.&lt;br /&gt;
&lt;br /&gt;
[[Phidget Network Server]] - Phidgets can be controlled and communicated with over your network- either wirelessly or over ethernet.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Load_Cell_Guide&amp;diff=27725</id>
		<title>Load Cell Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Load_Cell_Guide&amp;diff=27725"/>
		<updated>2017-06-20T21:02:19Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Primer]]&lt;br /&gt;
[[Image:loadcells.jpg|link=|400px]]&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
A load cell is a force sensing module - a carefully designed metal structure, with small elements called strain gauges mounted in precise locations on the structure.  Load cells are designed to measure a specific force, and ignore other forces being applied.  The electrical signal output by the load cell is very small and requires specialized amplification. Fortunately, the [{{SERVER}}/products.php?product_id=DAQ1500 DAQ1500 - Wheatstone Bridge Phidget] will perform all the amplification and measurement of the electrical output.Load cells are designed to measure force in one direction.&lt;br /&gt;
&lt;br /&gt;
They will often measure force in other directions, but the sensor sensitivity will be different, since parts of the load cell operating under compression are now in tension, and vice versa.&lt;br /&gt;
&lt;br /&gt;
==How they work==&lt;br /&gt;
[[image:wheatstone.png|thumb|250px|Generic Wheatstone bridge configuration]]&lt;br /&gt;
Strain-gauge load cells convert the load acting on them into electrical signals. The measuring is done with very small resistor patterns called strain gauges - effectively small, flexible circuit boards.  The gauges are bonded onto a beam or structural member that deforms when weight is applied, in turn deforming the strain-gauge.  As the strain gauge is deformed, it’s electrical resistance changes in proportion to the load.  &lt;br /&gt;
&lt;br /&gt;
The changes to the circuit caused by force is much smaller than the changes caused by variation in temperature. Higher quality load cells cancel out the effects of temperature using two techniques.  By matching the expansion rate of the strain gauge to the expansion rate of the metal it’s mounted on, undue strain on the gauges can be avoided as the load cell warms up and cools down.  The most important method of temperature compensation involves using multiple strain gauges, which all respond to the change in temperature with the same change in resistance.  Some load cell designs use gauges which are never subjected to any force, but only serve to counterbalance the temperature effects on the gauges that measuring force.  Most designs use 4 strain gauges, some in compression, some under tension, which maximizes the sensitivity of the load cell, and automatically cancels the effect of temperature. &lt;br /&gt;
&lt;br /&gt;
Other types of load cell exist which have half bridges (2 strain gauges) or quarter bridges but they require additional hardware to operate since you must complete the bridge to get the most accurate readings.&lt;br /&gt;
&lt;br /&gt;
===What is a Wheatstone bridge?===&lt;br /&gt;
A Wheatstone bridge is an electrical circuit used to measure and unknown resistance by balancing 2 legs of a bridge circuit.  One leg of which contains the unknown value.  Wheatstone bridges are made up of 4 resistors or loads in a square with a voltage meter bridging 2 corners of the square and power/ground connected to the other corners. In the case of a load cell, these resistors are strain gauges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
===Single-Point Load Cells===&lt;br /&gt;
&lt;br /&gt;
[[File:singlecell.jpg|link=|thumb|200px|A single-point load cell. Applying force to one end creates stress in the bar, causing the strain gauge encased in the white plastic to flex.]]&lt;br /&gt;
&lt;br /&gt;
This Single Point Load Cell is used in small jewelry scales and kitchen scales.  It’s mounted by bolting down the end of the load cell where the wires are attached, and applying force on the other end in the direction of the arrow.  Where the force is applied is not critical, as this load cell measures a shearing effect on the beam, not the bending of the beam.  If you mount a small platform on the load cell, as would be done in a small scale, this load cell provides accurate readings regardless of the position of the load on the platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Button Load Cells===&lt;br /&gt;
&lt;br /&gt;
[[File:buttoncell.jpg|link=|thumb|200px|A button load cell. Applying force to the bump in the middle of the cell causes a change in the output.]]&lt;br /&gt;
&lt;br /&gt;
This Button Load Cell is used in applications that require a thin form factor.  The bottom of the load cell is bolted, and force applied to the button on the top.  By loading only the button, which is slightly rounded, the load cell is less sensitive to errors resulting from the load not pushing down exactly straight on the load cell.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:button_cell_diagram.jpg|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===S-Type Load Cells===&lt;br /&gt;
&lt;br /&gt;
[[File:scell.jpg|link=|thumb|200px|An S-type load cell. By pulling on both ends or pushing on both ends, the stress in the S changes and the cell&#039;s output changes.]]&lt;br /&gt;
&lt;br /&gt;
This S-Type load cell can be operated in compression or tension, as illustrated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:s_cell_diagram.jpg|link=]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calibration==&lt;br /&gt;
You can use this simple formula to convert the measured mv/V output from the load cell to the measured force:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\text{Expected Force or Weight} = K \times \text{(Measured mV/V} - \text{Offset)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where K is gain value that will change depending on what unit of force or weight you want to measure. Since the offset varies between individual load cells, it’s necessary to measure it for each sensor.  Record the output of the load cell at rest on a flat surface with no force on it. The mv/V output measured by the Bridge is the offset.  &lt;br /&gt;
&lt;br /&gt;
From there we just need to determine the K factor.  Take another measurement at some non-zero load (which you know the weight of).  Now it&#039;s just a matter of solving the above equation for K.  From that point forward we can apply the formula to new measured values to determine the force applied.  &lt;br /&gt;
&lt;br /&gt;
The K and offset values are something you could then include in your program to perform this calculation automatically.  &lt;br /&gt;
&lt;br /&gt;
===Multiple Load Cells===&lt;br /&gt;
&lt;br /&gt;
For arrays of load cells there are two different configurations you can use:&lt;br /&gt;
&lt;br /&gt;
*The first is to connect each load cell to different channels on your Phidgets. With this setup you would need to calibrate each load cell separately and then you would average the values from all the load cells together.  &lt;br /&gt;
*The second configuration is to put all the load cells together in parallel on a single channel. This configuration allows you to calibrate all the load cells simultaneously and requires no extra math to work.  The downside is that this configuration would not allow you to determine where on the weighing surface an object is resting (which may or may not be important in your application).&lt;br /&gt;
&lt;br /&gt;
==Load Cell Specification Glossary==&lt;br /&gt;
&lt;br /&gt;
When comparing load cells, there are a number of specifications to consider. This section lists and defines the properties commonly listed on load cells.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Capacity}}&lt;br /&gt;
The maximum load the load cell is designed to measure within its specifications.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Creep}}&lt;br /&gt;
The change in sensor output occurring over 30 minutes, while under load at or near capacity and with all environmental conditions and other variables remaining constant. &lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|FULL SCALE or FS}}&lt;br /&gt;
Used to qualify error - FULL SCALE is the change in output when the sensor is fully loaded.  If a particular error (for example, Non-Linearity) is expressed as 0.1% F.S., and the output is 1.0mV/V, the maximum non-linearity that will be seen over the operating range of the sensor will be 0.001 mV/V.  An important distinction is that this error doesn’t have to only occur at the maximum load.  If you are operating the sensor at a maximum of 10% of capacity, for this example, the non-linearity would still be 0.001mV/V, or 1% of the operating range that you are actually using.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Hysteresis}}&lt;br /&gt;
If a force equal to 50% of capacity is applied to a load cell which has been at no load, a given output will be measured. The same load cell is at full capacity, and some of the force is removed, resulting in the load cell operating at 50% capacity. The difference in output between the two test scenarios is called hysteresis.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Excitation Voltage}}&lt;br /&gt;
Specifies the voltage that can be applied to the power/ground terminals on the load cell.  In practice, if you are using the load cell with a Phidget, you don’t have to worry about this spec.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Input Impedance}}&lt;br /&gt;
Determines the power that will be consumed by the load cell.  The lower this number is, the more current will be required, and the more heating will occur when the load cell is powered.  In very noisy environments, a lower input impedance will reduce the effect of Electromagnetic interference on long wires between the load cell and Phidget.  &lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Insulation Resistance}}&lt;br /&gt;
The electrical resistance measured between the metal structure of the load cell, and the wiring.  The practical result &lt;br /&gt;
of this is the metal structure of the load cells should not be energized with a voltage, particularly higher voltages, as &lt;br /&gt;
it can arc into the Phidget.  Commonly the load cell and the metal framework it is part of will be grounded to &lt;br /&gt;
earth or to your system ground.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Maximum Overload}}&lt;br /&gt;
The maximum load which can be applied without producing a structural failure.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Non-Linearity}}&lt;br /&gt;
Ideally, the output of the sensor will be perfectly linear, and a simple 2-point calibration will exactly describe the behaviour of the sensor at other loads.  In practice, the sensor is not perfect, and Non-linearity describes the maximum deviation from the linear curve.  Theoretically, if a more complex calibration is used, some of the non-linearity can be calibrated out, but this will require a very high accuracy calibration with multiple points.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Non-Repeatability}}&lt;br /&gt;
The maximum difference the sensor will report when exactly the same weight is applied, at the same temperature, over multiple test runs.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Operating Temperature}}&lt;br /&gt;
The extremes of ambient temperature within which the load cell will operate without permanent adverse change to any of its performance characteristics.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Output Impedance}}&lt;br /&gt;
Roughly corresponds to the input impedance.  If the Output Impedance is very high, measuring the bridge will distort the results. The Phidget carefully buffers the signals coming from the load cell, so in practice this is not a concern.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Rated Output}}&lt;br /&gt;
Is the difference in the output of the sensor between when it is fully loaded to its rated capacity, and when it’s unloaded.  Effectively, it’s how sensitive the sensor is, and corresponds to the gain calculated when calibrating the sensor.  More expensive sensors have an exact rated output based on an individual calibration done at the factory.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Resolution}}&lt;br /&gt;
Resolution is somewhat misleading when it comes to load cells.  People often ask why we don&#039;t specify the resolution for our load cells.  The fact of the matter is, resolution isn&#039;t really a property of the load cells.  Rather, it is based on the equipment you are using to measure from the load cell instead.  For example, the [[DAQ1500 User Guide|DAQ1500]] has a 24 bit ADC on board.  This means that the resolution of a load cell connected to it is 24 bits.  Since the excitation voltage for the DAQ1500 is 5V, your expected resolution is:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{Resolution} = \frac{5}{2^{24}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is affected by the chosen gain as well.  In general, noise means you won&#039;t be able to achieve this reliably but the point is that resolution is not a useful spec for a load cell to have.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Safe Overload}}&lt;br /&gt;
The maximum axial load which can be applied without producing a permanent shift in performance characteristics beyond those specified.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Compensated Temperature}}&lt;br /&gt;
The range of temperature over which the load cell is compensated to maintain output and zero balance within specified limits.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Temperature Effect on Span}}&lt;br /&gt;
Span is also called rated output. This value is the change in output due to a 1-degree Celsius change in ambient temperature.&lt;br /&gt;
{{hiddenh3|Temperature Effect on Zero}}&lt;br /&gt;
The change in zero balance due to a 1-degree Celsius change in ambient temperature.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Zero Balance}}&lt;br /&gt;
Zero Balance defines the maximum difference between the +/- output wires when no load is applied.  Realistically, each sensor will be individually calibrated, at least for the output when no load is applied.  Zero Balance is more of a concern if the load cell is being interfaced to an amplification circuit - the Phidget can easily handle enormous differences between +/-.  If the difference is very large, the Phidget will not be able to use the higher Gain settings.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Load_Cell_Guide&amp;diff=27723</id>
		<title>Load Cell Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Load_Cell_Guide&amp;diff=27723"/>
		<updated>2017-06-20T21:01:13Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Primer]]&lt;br /&gt;
[[Image:loadcells.jpg|link=|400px]]&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
A load cell is a force sensing module - a carefully designed metal structure, with small elements called strain gauges mounted in precise locations on the structure.  Load cells are designed to measure a specific force, and ignore other forces being applied.  The electrical signal output by the load cell is very small and requires specialized amplification. Fortunately, the [{{SERVER}}/products.php?product_id=DAQ1500 DAQ1500 - Wheatstone Bridge Phidget] will perform all the amplification and measurement of the electrical output.Load cells are designed to measure force in one direction.&lt;br /&gt;
&lt;br /&gt;
They will often measure force in other directions, but the sensor sensitivity will be different, since parts of the load cell operating under compression are now in tension, and vice versa.&lt;br /&gt;
&lt;br /&gt;
==How they work==&lt;br /&gt;
[[image:wheatstone.png|thumb|250px|Generic Wheatstone bridge configuration]]&lt;br /&gt;
Strain-gauge load cells convert the load acting on them into electrical signals. The measuring is done with very small resistor patterns called strain gauges - effectively small, flexible circuit boards.  The gauges are bonded onto a beam or structural member that deforms when weight is applied, in turn deforming the strain-gauge.  As the strain gauge is deformed, it’s electrical resistance changes in proportion to the load.  &lt;br /&gt;
&lt;br /&gt;
The changes to the circuit caused by force is much smaller than the changes caused by variation in temperature. Higher quality load cells cancel out the effects of temperature using two techniques.  By matching the expansion rate of the strain gauge to the expansion rate of the metal it’s mounted on, undue strain on the gauges can be avoided as the load cell warms up and cools down.  The most important method of temperature compensation involves using multiple strain gauges, which all respond to the change in temperature with the same change in resistance.  Some load cell designs use gauges which are never subjected to any force, but only serve to counterbalance the temperature effects on the gauges that measuring force.  Most designs use 4 strain gauges, some in compression, some under tension, which maximizes the sensitivity of the load cell, and automatically cancels the effect of temperature. &lt;br /&gt;
&lt;br /&gt;
Other types of load cell exist which have half bridges (2 strain gauges) or quarter bridges but they require additional hardware to operate since you must complete the bridge to get the most accurate readings.&lt;br /&gt;
&lt;br /&gt;
===What is a Wheatstone bridge?===&lt;br /&gt;
A Wheatstone bridge is an electrical circuit used to measure and unknown resistance by balancing 2 legs of a bridge circuit.  One leg of which contains the unknown value.  Wheatstone bridges are made up of 4 resistors or loads in a square with a voltage meter bridging 2 corners of the square and power/ground connected to the other corners. In the case of a load cell, these resistors are strain gauges.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
===Single-Point Load Cells===&lt;br /&gt;
&lt;br /&gt;
[[File:singlecell.jpg|link=|thumb|200px|A single-point load cell. Applying force to one end creates stress in the bar, causing the strain gauge encased in the white plastic to flex.]]&lt;br /&gt;
&lt;br /&gt;
This Single Point Load Cell is used in small jewelry scales and kitchen scales.  It’s mounted by bolting down the end of the load cell where the wires are attached, and applying force on the other end in the direction of the arrow.  Where the force is applied is not critical, as this load cell measures a shearing effect on the beam, not the bending of the beam.  If you mount a small platform on the load cell, as would be done in a small scale, this load cell provides accurate readings regardless of the position of the load on the platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Button Load Cells===&lt;br /&gt;
&lt;br /&gt;
[[File:buttoncell.jpg|link=|thumb|200px|A button load cell. Applying force to the bump in the middle of the cell causes a change in the output.]]&lt;br /&gt;
&lt;br /&gt;
This Button Load Cell is used in applications that require a thin form factor.  The bottom of the load cell is bolted, and force applied to the button on the top.  By loading only the button, which is slightly rounded, the load cell is less sensitive to errors resulting from the load not pushing down exactly straight on the load cell.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:button_cell_diagram.jpg|link=]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===S-Type Load Cells===&lt;br /&gt;
&lt;br /&gt;
[[File:scell.jpg|link=|thumb|200px|An S-type load cell. By pulling on both ends or pushing on both ends, the stress in the S changes and the cell&#039;s output changes.]]&lt;br /&gt;
&lt;br /&gt;
This S-Type load cell can be operated in compression or tension, as illustrated below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:s_cell_diagram.jpg|link=]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calibration==&lt;br /&gt;
You can use this simple formula to convert the measured mv/V output from the load cell to the measured force:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\text{Expected Force or Weight} = K \times \text{(Measured mV/V} - \text{Offset)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where K is gain value that will change depending on what unit of force or weight you want to measure. Since the offset varies between individual load cells, it’s necessary to measure it for each sensor.  Record the output of the load cell at rest on a flat surface with no force on it. The mv/V output measured by the Bridge is the offset.  &lt;br /&gt;
&lt;br /&gt;
From there we just need to determine the K factor.  Take another measurement at some non-zero load (which you know the weight of).  Now it&#039;s just a matter of solving the above equation for K.  From that point forward we can apply the formula to new measured values to determine the force applied.  &lt;br /&gt;
&lt;br /&gt;
===Multiple Load Cells===&lt;br /&gt;
&lt;br /&gt;
For arrays of load cells there are two different configurations you can use:&lt;br /&gt;
&lt;br /&gt;
*The first is to connect each load cell to different channels on your Phidgets. With this setup you would need to calibrate each load cell separately and then you would average the values from all the load cells together.  &lt;br /&gt;
*The second configuration is to put all the load cells together in parallel on a single channel. This configuration allows you to calibrate all the load cells simultaneously and requires no extra math to work.  The downside is that this configuration would not allow you to determine where on the weighing surface an object is resting (which may or may not be important in your application).&lt;br /&gt;
&lt;br /&gt;
==Load Cell Specification Glossary==&lt;br /&gt;
&lt;br /&gt;
When comparing load cells, there are a number of specifications to consider. This section lists and defines the properties commonly listed on load cells.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Capacity}}&lt;br /&gt;
The maximum load the load cell is designed to measure within its specifications.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Creep}}&lt;br /&gt;
The change in sensor output occurring over 30 minutes, while under load at or near capacity and with all environmental conditions and other variables remaining constant. &lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|FULL SCALE or FS}}&lt;br /&gt;
Used to qualify error - FULL SCALE is the change in output when the sensor is fully loaded.  If a particular error (for example, Non-Linearity) is expressed as 0.1% F.S., and the output is 1.0mV/V, the maximum non-linearity that will be seen over the operating range of the sensor will be 0.001 mV/V.  An important distinction is that this error doesn’t have to only occur at the maximum load.  If you are operating the sensor at a maximum of 10% of capacity, for this example, the non-linearity would still be 0.001mV/V, or 1% of the operating range that you are actually using.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Hysteresis}}&lt;br /&gt;
If a force equal to 50% of capacity is applied to a load cell which has been at no load, a given output will be measured. The same load cell is at full capacity, and some of the force is removed, resulting in the load cell operating at 50% capacity. The difference in output between the two test scenarios is called hysteresis.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Excitation Voltage}}&lt;br /&gt;
Specifies the voltage that can be applied to the power/ground terminals on the load cell.  In practice, if you are using the load cell with a Phidget, you don’t have to worry about this spec.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Input Impedance}}&lt;br /&gt;
Determines the power that will be consumed by the load cell.  The lower this number is, the more current will be required, and the more heating will occur when the load cell is powered.  In very noisy environments, a lower input impedance will reduce the effect of Electromagnetic interference on long wires between the load cell and Phidget.  &lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Insulation Resistance}}&lt;br /&gt;
The electrical resistance measured between the metal structure of the load cell, and the wiring.  The practical result &lt;br /&gt;
of this is the metal structure of the load cells should not be energized with a voltage, particularly higher voltages, as &lt;br /&gt;
it can arc into the Phidget.  Commonly the load cell and the metal framework it is part of will be grounded to &lt;br /&gt;
earth or to your system ground.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Maximum Overload}}&lt;br /&gt;
The maximum load which can be applied without producing a structural failure.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Non-Linearity}}&lt;br /&gt;
Ideally, the output of the sensor will be perfectly linear, and a simple 2-point calibration will exactly describe the behaviour of the sensor at other loads.  In practice, the sensor is not perfect, and Non-linearity describes the maximum deviation from the linear curve.  Theoretically, if a more complex calibration is used, some of the non-linearity can be calibrated out, but this will require a very high accuracy calibration with multiple points.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Non-Repeatability}}&lt;br /&gt;
The maximum difference the sensor will report when exactly the same weight is applied, at the same temperature, over multiple test runs.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Operating Temperature}}&lt;br /&gt;
The extremes of ambient temperature within which the load cell will operate without permanent adverse change to any of its performance characteristics.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Output Impedance}}&lt;br /&gt;
Roughly corresponds to the input impedance.  If the Output Impedance is very high, measuring the bridge will distort the results. The Phidget carefully buffers the signals coming from the load cell, so in practice this is not a concern.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Rated Output}}&lt;br /&gt;
Is the difference in the output of the sensor between when it is fully loaded to its rated capacity, and when it’s unloaded.  Effectively, it’s how sensitive the sensor is, and corresponds to the gain calculated when calibrating the sensor.  More expensive sensors have an exact rated output based on an individual calibration done at the factory.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Resolution}}&lt;br /&gt;
Resolution is somewhat misleading when it comes to load cells.  People often ask why we don&#039;t specify the resolution for our load cells.  The fact of the matter is, resolution isn&#039;t really a property of the load cells.  Rather, it is based on the equipment you are using to measure from the load cell instead.  For example, the [[DAQ1500 User Guide|DAQ1500]] has a 24 bit ADC on board.  This means that the resolution of a load cell connected to it is 24 bits.  Since the excitation voltage for the DAQ1500 is 5V, your expected resolution is:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\text{Resolution} = \frac{5}{2^{24}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is affected by the chosen gain as well.  In general, noise means you won&#039;t be able to achieve this reliably but the point is that resolution is not a useful spec for a load cell to have.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Safe Overload}}&lt;br /&gt;
The maximum axial load which can be applied without producing a permanent shift in performance characteristics beyond those specified.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Compensated Temperature}}&lt;br /&gt;
The range of temperature over which the load cell is compensated to maintain output and zero balance within specified limits.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Temperature Effect on Span}}&lt;br /&gt;
Span is also called rated output. This value is the change in output due to a 1-degree Celsius change in ambient temperature.&lt;br /&gt;
{{hiddenh3|Temperature Effect on Zero}}&lt;br /&gt;
The change in zero balance due to a 1-degree Celsius change in ambient temperature.&lt;br /&gt;
&lt;br /&gt;
{{hiddenh3|Zero Balance}}&lt;br /&gt;
Zero Balance defines the maximum difference between the +/- output wires when no load is applied.  Realistically, each sensor will be individually calibrated, at least for the output when no load is applied.  Zero Balance is more of a concern if the load cell is being interfaced to an amplification circuit - the Phidget can easily handle enormous differences between +/-.  If the difference is very large, the Phidget will not be able to use the higher Gain settings.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=26750</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=26750"/>
		<updated>2017-06-07T19:18:25Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will issue you an RMA number and will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Unless we are unusually busy most orders received before 12:00 PM Mountain Time - Canada (GMT-07:00) Monday to Friday will be shipped on the same day.&lt;br /&gt;
&lt;br /&gt;
Orders which contain cut to length parts may not necessarily ship same day as there is significant processing time associated with these orders.  &lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
The shipping cost is calculated at Checkout and submitted for your review before you confirm your order. When multiple shipping options are available for your destination, we will list all available options and let you choose.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders which are under $50.00.&lt;br /&gt;
&lt;br /&gt;
If you have your own account with UPS, you can use it and be billed directly by them.  In that case you have more shipping options available to you.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We use UPS Express Saver™ - Overnight delivery, and UPS Standard - 3 to 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
====UPS Express Saver™ - Overnight====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments under $2000.00USD&#039;&#039;&#039; we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments over $2000.00USD&#039;&#039;&#039;, you are responsible for duty and taxes if applicable and will have to pay UPS directly on top of the shipping cost we put on our invoice.&lt;br /&gt;
&lt;br /&gt;
====UPS Standard - Ground 3 to 5 business days====&lt;br /&gt;
&#039;&#039;&#039;Shipment under $800.00USD&#039;&#039;&#039;, we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipment over $800.00USD&#039;&#039;&#039; UPS will collect Entry Preparation Fees directly from you when delivering the package, and for duty and taxes if applicable.  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Entry Preparation Fees&#039;&#039;&#039;&lt;br /&gt;
:*All rates are in U.S. funds&lt;br /&gt;
:*Rates do not include applicable duties or taxes&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Value for duty|| UPS Standard Service&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$0.00 to $800.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|No Charge&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$800.01 to $1,250.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$28.75&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1,250.01 to $2,500.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$40.50&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Each Additional $1,000.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1.95&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We use UPS Worldwide Express Saver™, and UPS Worldwide Expedited for international locations that cannot be reached with Express Saver.&lt;br /&gt;
&lt;br /&gt;
Goods shipped to an international destination may be subject to import duties and taxes, which are levied once the goods reach your country. Additional charges for customs clearance must be borne by you; we have no control over these charges and cannot predict what they may be. Since customs policies vary widely from country to country, you should contact your local customs office for further information.&lt;br /&gt;
&lt;br /&gt;
===Tracking your order===&lt;br /&gt;
You can track your shipment by going to www.UPS.ca and using the tracking number that was e-mailed to you when your order shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If, when the package arrives there is no one to accept delivery UPS will redeliver 2 more times.  This is standard UPS protocol.  If delivery fails they will keep the package for 5 days and then return it to us. We will then refund you the cost you paid minus the cost of shipping (both directions) and a flat $50 charge to a maximum of the total cost of the package.  This applies to packages which failed delivery due to no one being present as well as packages which were refused delivery by a person at the delivery location.&lt;br /&gt;
&lt;br /&gt;
===Import Restrictions to Russia===&lt;br /&gt;
If you are wanting to ship an order to Russia you MUST have a valid business license number in order to complete the shipment.  You can include this number in the comments field of the order form.  The reason for this is best explained by UPS:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Customs authorities in Russia have tightened restrictions on import shipments to Russia, in particular on dutiable shipments sent to private individuals. These shipments are currently under extraordinary scrutiny in an effort to improve accuracy of the accompanying shipping documentation.  These additional requirements lead to an unprecedented number of customs holds and delays in delivery.  UPS has therefore temporarily suspended the acceptance of dutiable shipments sent to private individuals in Russia until further notice.  We regret this step and are confident that, together with the Russian customs authorities, a solution can be found. UPS continues to accept all non-dutiable document shipments to private individuals in Russia and all commercial shipments addressed to businesses.&amp;quot; [http://www.ups.com/content/hr/en/about/news/service_updates/20100526_restrictions.html]&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All returns must be authorized by Phidgets Inc.===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets will take back any unopened product for a period of 30 days from the date of purchase. Just call or e-mail us for a RMA number and ship the product back to Phidgets prepaid and we will refund your credit card as soon as we receive and inspect the returned goods.&lt;br /&gt;
&lt;br /&gt;
Products that are returned after 30 days are subject to a re-stocking charge of 25% of the package&#039;s value (minimum $5.00) to a maximum of $500.&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns after 90 days.&lt;br /&gt;
&lt;br /&gt;
===Product under Warranty===&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the purchase date. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product has been modified.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, you will be given a RMA number and we will replace the defective product.&lt;br /&gt;
&lt;br /&gt;
===We shipped the wrong/incomplete product===&lt;br /&gt;
{{ContactUs|Contact us}}, we will get the correct product sent to you immediately, we will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
|+&#039;&#039;&#039;Phidgets Inc. Holidays&#039;&#039;&#039;&lt;br /&gt;
! Holiday || Description || 2015 || 2016&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| New Year&#039;s Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First two days of January&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jan 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jan 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 16&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 15&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 3&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Mar 25&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 18&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 23&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 3&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 7&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 5&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 12&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 10&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Dec 24 to the New Year&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Dec 24-31&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=26749</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=26749"/>
		<updated>2017-06-07T19:12:18Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will issue you an RMA number and will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Unless we are unusually busy most orders received before 12:00 PM Mountain Time - Canada (GMT-07:00) Monday to Friday will be shipped on the same day.&lt;br /&gt;
&lt;br /&gt;
Orders which contain cut to length parts may not necessarily ship same day as there is significant processing time associated with these orders.  &lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
The shipping cost is calculated at Checkout and submitted for your review before you confirm your order. When multiple shipping options are available for your destination, we will list all available options and let you choose.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders which are under $50.00.&lt;br /&gt;
&lt;br /&gt;
If you have your own account with UPS, you can use it and be billed directly by them.  In that case you have more shipping options available to you.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We use UPS Express Saver™ - Overnight delivery, and UPS Standard - 3 to 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
====UPS Express Saver™ - Overnight====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments under $2000.00USD&#039;&#039;&#039; we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipments over $2000.00USD&#039;&#039;&#039;, you are responsible for duty and taxes if applicable and will have to pay UPS directly on top of the shipping cost we put on our invoice.&lt;br /&gt;
&lt;br /&gt;
====UPS Standard - Ground 3 to 5 business days====&lt;br /&gt;
&#039;&#039;&#039;Shipment under $800.00USD&#039;&#039;&#039;, we pay all costs in bringing the goods to you including import duties and taxes. In other words your shipping costs are what we put on our invoice. Contact us if you are getting any extra invoices from UPS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipment over $800.00USD&#039;&#039;&#039; UPS will collect Entry Preparation Fees directly from you when delivering the package, and for duty and taxes if applicable.  &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Entry Preparation Fees&#039;&#039;&#039;&lt;br /&gt;
:*All rates are in U.S. funds&lt;br /&gt;
:*Rates do not include applicable duties or taxes&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Value for duty|| UPS Standard Service&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$0.00 to $800.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|No Charge&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$800.01 to $1,250.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$28.75&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1,250.01 to $2,500.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$40.50&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Each Additional $1,000.00&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|$1.95&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We use UPS Worldwide Express Saver™, and UPS Worldwide Expedited for international locations that cannot be reached with Express Saver.&lt;br /&gt;
&lt;br /&gt;
Goods shipped to an international destination may be subject to import duties and taxes, which are levied once the goods reach your country. Additional charges for customs clearance must be borne by you; we have no control over these charges and cannot predict what they may be. Since customs policies vary widely from country to country, you should contact your local customs office for further information.&lt;br /&gt;
&lt;br /&gt;
===Tracking your order===&lt;br /&gt;
You can track your shipment by going to www.UPS.ca and using the tracking number that was e-mailed to you when your order shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to orders@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If, when the package arrives there is no one to accept delivery UPS will redeliver 2 more times.  This is standard UPS protocol.  If delivery fails they will keep the package for 5 days and then return it to us. We will then refund you the cost you paid minus the cost of shipping (both directions) and a flat $50 charge to a maximum of the total cost of the package.  This applies to packages which failed delivery due to no one being present as well as packages which were refused delivery by a person at the delivery location.&lt;br /&gt;
&lt;br /&gt;
===Import Restrictions to Russia===&lt;br /&gt;
If you are wanting to ship an order to Russia you MUST have a valid business license number in order to complete the shipment.  You can include this number in the comments field of the order form.  The reason for this is best explained by UPS:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Customs authorities in Russia have tightened restrictions on import shipments to Russia, in particular on dutiable shipments sent to private individuals. These shipments are currently under extraordinary scrutiny in an effort to improve accuracy of the accompanying shipping documentation.  These additional requirements lead to an unprecedented number of customs holds and delays in delivery.  UPS has therefore temporarily suspended the acceptance of dutiable shipments sent to private individuals in Russia until further notice.  We regret this step and are confident that, together with the Russian customs authorities, a solution can be found. UPS continues to accept all non-dutiable document shipments to private individuals in Russia and all commercial shipments addressed to businesses.&amp;quot; [http://www.ups.com/content/hr/en/about/news/service_updates/20100526_restrictions.html]&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All returns must be authorized by Phidgets Inc.===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets will take back any unopened product for a period of 30 days from the date of purchase. Just call or e-mail us for a RMA number and ship the product back to Phidgets prepaid and we will refund your credit card as soon as we receive and inspect the returned goods.&lt;br /&gt;
&lt;br /&gt;
Products that are returned after 30 days are subject to a re-stocking charge of 25% of the package&#039;s value (minimum $5.00) to a maximum of $500.&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns after 90 days.&lt;br /&gt;
&lt;br /&gt;
===Product under Warranty===&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the purchase date. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product has been modified.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, you will be given a RMA number and we will replace the defective product.&lt;br /&gt;
&lt;br /&gt;
===We shipped the wrong/incomplete product===&lt;br /&gt;
{{ContactUs|Contact us}}, we will get the correct product sent to you immediately, we will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
|+&#039;&#039;&#039;Phidgets Inc. Holidays&#039;&#039;&#039;&lt;br /&gt;
! Holiday || Description || 2015 || 2016&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| New Year&#039;s Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First two days of January&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jan 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jan 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 16&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 15&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 3&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Mar 25&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 18&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 23&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 3&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 7&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 5&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 12&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 10&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Dec 24 to the New Year&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Dec 24-31&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=1002_User_Guide&amp;diff=26226</id>
		<title>1002 User Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=1002_User_Guide&amp;diff=26226"/>
		<updated>2017-05-11T16:57:50Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UserGuide]]&lt;br /&gt;
&lt;br /&gt;
===Required Hardware===&lt;br /&gt;
&lt;br /&gt;
* A 1002 Voltage Output Phidget&lt;br /&gt;
* A device that requires or measures a 0-10V signal&lt;br /&gt;
* A USB Cable&lt;br /&gt;
* A computer&lt;br /&gt;
&lt;br /&gt;
===Connecting the Pieces===&lt;br /&gt;
[[Image:1002_0_Connecting_the_Hardware.jpg|300px|right|link=]]&lt;br /&gt;
# Connect the device to a pair of terminals on the 1002. Check the underside of the board to see which one is positive and which is negative.&lt;br /&gt;
# Connect the Phidget to your computer using the USB cable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
==Testing Using Windows==&lt;br /&gt;
&lt;br /&gt;
{{UGcontrolpanel|1002}}&lt;br /&gt;
&lt;br /&gt;
{{ugVoltageOutput}}&lt;br /&gt;
&lt;br /&gt;
{{UGotheros}}&lt;br /&gt;
&lt;br /&gt;
==Technical Details==&lt;br /&gt;
&lt;br /&gt;
===General===&lt;br /&gt;
Produces a voltage over -10V to +10V. This voltage will be asserted up to +-20mA (short-circuit). An error will be reported when this current is exceeded, and the voltage the customer is getting is no longer accurate. The voltage is produced with 12 bit resolution (4.8mV). The update rate or frequency of the outputs is dependant on the speed of your system.&lt;br /&gt;
&lt;br /&gt;
===Connections===&lt;br /&gt;
&lt;br /&gt;
The terminal blocks on this board are labelled on the underside to save space:&lt;br /&gt;
&lt;br /&gt;
[[File:1002_0_Under.jpg|link=|400px]]&lt;br /&gt;
&lt;br /&gt;
===Isolation===&lt;br /&gt;
The 1002 is not isolated. All 4 channels use the same ground.&lt;br /&gt;
&lt;br /&gt;
===Current===&lt;br /&gt;
The PhidgetAnalog board will limit the available current per channel at approximately 20mA.  For reliable results, don’t approach this limit, as it will vary from channel to channel.  For maximum accuracy, limit the current to 5mA. If more than +- 20mA of current is drawn, the device goes into a constant current supply mode. When this happens, the current will be held constant at it’s maximum value, and the output voltage will depend on the value of the load that the device is trying to drive.  &lt;br /&gt;
&lt;br /&gt;
If your application requires a larger current source / sink, the analog output can be used as an input to a larger external amplifier circuit.&lt;br /&gt;
&lt;br /&gt;
All the power is supplied by the USB bus.&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
For more information on analog outputs, see the [[Analog Output Primer]].&lt;br /&gt;
&lt;br /&gt;
{{UGnext|}}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=1002_User_Guide&amp;diff=26225</id>
		<title>1002 User Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=1002_User_Guide&amp;diff=26225"/>
		<updated>2017-05-11T16:57:32Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:UserGuide]]&lt;br /&gt;
&lt;br /&gt;
===Required Hardware===&lt;br /&gt;
&lt;br /&gt;
* A 1002 Voltage Output Phidget&lt;br /&gt;
* A device that requires or measures a 0-10V signal&lt;br /&gt;
* A USB Cable&lt;br /&gt;
* A computer&lt;br /&gt;
&lt;br /&gt;
===Connecting the Pieces===&lt;br /&gt;
[[Image:1002_0_Connecting_the_Hardware.jpg|300px|right|link=|alt=Test]]&lt;br /&gt;
# Connect the device to a pair of terminals on the 1002. Check the underside of the board to see which one is positive and which is negative.&lt;br /&gt;
# Connect the Phidget to your computer using the USB cable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
==Testing Using Windows==&lt;br /&gt;
&lt;br /&gt;
{{UGcontrolpanel|1002}}&lt;br /&gt;
&lt;br /&gt;
{{ugVoltageOutput}}&lt;br /&gt;
&lt;br /&gt;
{{UGotheros}}&lt;br /&gt;
&lt;br /&gt;
==Technical Details==&lt;br /&gt;
&lt;br /&gt;
===General===&lt;br /&gt;
Produces a voltage over -10V to +10V. This voltage will be asserted up to +-20mA (short-circuit). An error will be reported when this current is exceeded, and the voltage the customer is getting is no longer accurate. The voltage is produced with 12 bit resolution (4.8mV). The update rate or frequency of the outputs is dependant on the speed of your system.&lt;br /&gt;
&lt;br /&gt;
===Connections===&lt;br /&gt;
&lt;br /&gt;
The terminal blocks on this board are labelled on the underside to save space:&lt;br /&gt;
&lt;br /&gt;
[[File:1002_0_Under.jpg|link=|400px]]&lt;br /&gt;
&lt;br /&gt;
===Isolation===&lt;br /&gt;
The 1002 is not isolated. All 4 channels use the same ground.&lt;br /&gt;
&lt;br /&gt;
===Current===&lt;br /&gt;
The PhidgetAnalog board will limit the available current per channel at approximately 20mA.  For reliable results, don’t approach this limit, as it will vary from channel to channel.  For maximum accuracy, limit the current to 5mA. If more than +- 20mA of current is drawn, the device goes into a constant current supply mode. When this happens, the current will be held constant at it’s maximum value, and the output voltage will depend on the value of the load that the device is trying to drive.  &lt;br /&gt;
&lt;br /&gt;
If your application requires a larger current source / sink, the analog output can be used as an input to a larger external amplifier circuit.&lt;br /&gt;
&lt;br /&gt;
All the power is supplied by the USB bus.&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
For more information on analog outputs, see the [[Analog Output Primer]].&lt;br /&gt;
&lt;br /&gt;
{{UGnext|}}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_Linux&amp;diff=25054</id>
		<title>OS - Linux</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_Linux&amp;diff=25054"/>
		<updated>2017-02-14T17:56:27Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:OS]]&lt;br /&gt;
{{OSLang|[[File:icon-Linux.png|64x64px|left|link=OS - Linux]]|On Linux, Phidgets can be either plugged directly into a USB Port or run over a network using the [[#WebService | Network Service]].}}&lt;br /&gt;
__TOC__&lt;br /&gt;
 &lt;br /&gt;
You need kernel &#039;&#039;&#039;version 2.6&#039;&#039;&#039; (released in 2003) or later.&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
&lt;br /&gt;
Linux has complete support for all Phidgets and their software APIs; the only thing it lacks when compared to Windows and OS X is a graphical user interface.  We walk you through all steps for download,  installation, checking, and starting to write code below.  &lt;br /&gt;
&lt;br /&gt;
If you are already a pro, and just want the downloads:&lt;br /&gt;
*[{{SERVER}}/downloads/libraries/libphidget.tar.gz Phidget Libraries for Linux]&lt;br /&gt;
*[{{SERVER}}/downloads/libraries/phidgetwebservice.tar.gz Phidget Network Service for Linux]&lt;br /&gt;
*[[Software License]]&lt;br /&gt;
&lt;br /&gt;
==Getting Started with Linux==&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|6pXWhGzX4Fg}}&lt;br /&gt;
&lt;br /&gt;
===Installing===&lt;br /&gt;
&lt;br /&gt;
To install the libraries, follow these steps:&lt;br /&gt;
&lt;br /&gt;
#Install libusb-1.0 development libraries - {{Code|libusb-1.0-0-dev}}.  &lt;br /&gt;
#*Note that libusb-1.0 may be already on your system, but the development libraries probably aren&#039;t.&lt;br /&gt;
#*Search for {{Code|libusb-1.0-0-dev}} or similar in your distribution package directory via {{Code|sudo apt-get install libusb-1.0-0-dev}}&lt;br /&gt;
#*Or install [http://www.libusb.org/ from source].&lt;br /&gt;
#Unpack and install the [{{SERVER}}/downloads/libraries/libphidget.tar.gz Phidget Libraries]&lt;br /&gt;
#*From the main unpacked libraries directory, run:&lt;br /&gt;
#*:{{Code|./configure}}&lt;br /&gt;
#*:{{Code|make}}&lt;br /&gt;
#*:{{Code|sudo make install}}&lt;br /&gt;
#*This will compile phidget22.h and place the library into your gcc path&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Although these libraries are written in C, the additional libraries for Python, Java, and most other Phidget-supported languages depend on them so they must be installed no matter what else you want to do.  &lt;br /&gt;
&lt;br /&gt;
===Checking===&lt;br /&gt;
&lt;br /&gt;
To confirm the libraries were installed and work correctly, you can check both the hardware and software sides of the interface.  It is worth checking the software side first, because if it works then you know the hardware side is also okay.&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
&lt;br /&gt;
To confirm that the libraries were installed correctly and can be used in code, you can use the [{{SERVER}}/downloads/examples/phidget21-c-examples.tar.gz C examples].&lt;br /&gt;
&lt;br /&gt;
The easiest way to confirm correct installation will be to compile and run the {{Code|HelloWorld}} C example, included in the examples download.  This does not involve writing any C code, but it does involve compiling the example and running it, which is a quick process as we show below.  If you feel more comfortable running the {{Code|HelloWorld}} example for your specific language, you can skip below and pick your language, but keep in mind that any problems could be with the C library installation and not necessarily with your language.&lt;br /&gt;
&lt;br /&gt;
To compile and run the basic C example for checking your installation:&lt;br /&gt;
&lt;br /&gt;
1. Unpack the Phidget Generic C Examples&amp;lt;br&amp;gt;&lt;br /&gt;
2. Open a terminal (often Ctrl-Alt-T) and go to the directory where the examples are unpacked&amp;lt;br&amp;gt;&lt;br /&gt;
3. Compile the {{Code|HelloWorld.c}} example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 gcc HelloWorld.c -o HelloWorld -lphidget21&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
4. Run the {{Code|HelloWorld}} example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo ./HelloWorld&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
(The sudo is needed for USB access for now, see the [[#Setting udev Rules|Setting udev Rules]] section for how to change this)&lt;br /&gt;
&lt;br /&gt;
The {{Code|-lphidget22}} will look in the standard library location for your Linux distribution (usually {{Code|/usr/lib/}}) for the Phidget 21 library file.  Generally, libraries to be linked on Linux through {{Code|gcc}} have a naming convention.  For example, {{Code|-lphidget22}} looks for the binary files &#039;&#039;&#039;{{Code|libphidget22.a}}&#039;&#039;&#039; and &#039;&#039;&#039;{{Code|libphidget22.so}}&#039;&#039;&#039; in the library location.  These files are automatically put in the library location during the {{Code|make install}} step of [[#Installing | installing the libraries]].&lt;br /&gt;
&lt;br /&gt;
The HelloWorld program will simply print out basic information for any device you plug in, and print a message upon unplugging the device.  For example, starting the program, plugging in an Interface Kit Phidget, unplugging the Interface Kit, and pressing Enter displays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $ sudo ./HelloWorld &lt;br /&gt;
   &lt;br /&gt;
 Opening...&lt;br /&gt;
 Press Enter to end&lt;br /&gt;
&lt;br /&gt;
 Hello to Device Phidget InterfaceKit 8/8/8, Serial Number: 37299&lt;br /&gt;
 Goodbye Device Phidget InterfaceKit 8/8/8, Serial Number: 37299&lt;br /&gt;
&lt;br /&gt;
 Closing...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=CLEARED TO HERE=&lt;br /&gt;
====Hardware====&lt;br /&gt;
&lt;br /&gt;
If the out-of-the-box examples do not work, make sure the Phidget is seen by your USB interface.  To check this, you can use the kernel log reader {{Code|dmesg}}.  Pipe the output of {{Code|dmesg}} into the utility {{Code|tail}} to read the last ten lines of the log:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $&amp;gt; dmesg | tail&lt;br /&gt;
 ....(9 lines)....&lt;br /&gt;
 [24344.013638] usb 2-1.2: new low speed USB device number 5 using ehci_hcd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The number between the [ ] is the system time in seconds since the last boot up, so you can tell whether the event was recent or not.  (This will also tell you the interrupt type of Phidget that is registered by the USB interface, see the [[#Common Problems and Solutions | common problems section below]] for more information on what this means.)&lt;br /&gt;
&lt;br /&gt;
The Phidget should both connect and disconnect properly, so unplugging it should result in an additional line at the tail:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $&amp;gt; dmesg | tail&lt;br /&gt;
 ....(8 lines)....&lt;br /&gt;
 [24344.013638] usb 2-1.2: new low speed USB device number 5 using ehci_hcd&lt;br /&gt;
 [25094.809328] usb 2-1.2: USB disconnect, device number 5&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t see similar lines to these at the tail of your kernel log, take a look at the [[#Troubleshooting|troubleshooting]] section below, as well as the &#039;&#039;&#039;Communications&#039;&#039;&#039; section of our [[General Troubleshooting#Communications Troubleshooting|general troubleshooting page]].&lt;br /&gt;
&lt;br /&gt;
====Troubleshooting====&lt;br /&gt;
&lt;br /&gt;
If the examples &#039;&#039;&#039;do not&#039;&#039;&#039; work but USB &#039;&#039;&#039;does&#039;&#039;&#039; work (i.e. your computer can consistently see the device in the [[#Hardware|hardware]]), take a moment to check the basics:&lt;br /&gt;
* No other programs, drivers, or processes are using that USB port in software&lt;br /&gt;
* You are running the example program as root (or your udev rules have been set properly)&lt;br /&gt;
* You are using libusb 1.0 (not the older 0.1 release)&lt;br /&gt;
* You have compiled versions of libphidget21.a and libphidget21.so in your system library location (usually {{Code|/usr/lib}})&lt;br /&gt;
* The Phidget libraries are the latest version (visit the [[#Quick Downloads| quick downloads section]] to download them)&lt;br /&gt;
* Your Linux kernel version is 2.6 or later (type {{Code|uname -r}} in a terminal to get your kernel version)&lt;br /&gt;
* Check the [[#Common Problems and Solutions|common problems]] section below, some specific combinations can cause problems&lt;br /&gt;
&lt;br /&gt;
If your problem doesn&#039;t seem to be fixed by these steps, make sure that the Phidget is seen &#039;&#039;&#039;consistently&#039;&#039;&#039; by USB (if it is erratic, try our [[General Troubleshooting|general troubleshooting guide]]).  If you are still having problems after using the troubleshooting guide, please {{ContactUs|ask us}}!&lt;br /&gt;
&lt;br /&gt;
==Programming Languages==&lt;br /&gt;
&lt;br /&gt;
Now that you have the basic libraries installed, you can pick your language and begin programming!  &lt;br /&gt;
&lt;br /&gt;
If you are not using the [[#WebService | webservice]] (discussed below) to control a Phidget over a network, your next step will be to delve into the use of your specific language.  Each page has its own set of specific libraries, code examples, and setup instructions.  &lt;br /&gt;
&lt;br /&gt;
On Linux, we recommend the following languages:&lt;br /&gt;
&lt;br /&gt;
*[[Language - C/C++|C/C++]]&lt;br /&gt;
*[[Language - Java | Java]]&lt;br /&gt;
*[[Language - Python | Python]]&lt;br /&gt;
*[[Language - Ruby | Ruby]]&lt;br /&gt;
*[[Language - C Sharp | C#]] (Using [[Language - C Sharp#Mono|Mono]])&lt;br /&gt;
*[[Language - Flash AS3 | Flash AS3]]&lt;br /&gt;
&lt;br /&gt;
You can also use these languages, but they do not support [[General Phidget Programming#Event Driven Code | event driven code]], and must use [[General Phidget Programming#Logic Code | logic code]] only:&lt;br /&gt;
&lt;br /&gt;
*[[Language - MATLAB|MATLAB]]&lt;br /&gt;
*[[Language - Simulink|Simulink]]&lt;br /&gt;
&lt;br /&gt;
==WebService==&lt;br /&gt;
&lt;br /&gt;
The Phidget WebService allows you to remotely control a Phidget over a network.&amp;lt;br&amp;gt;This section helps you install, check, and use the WebService on Linux, but we also have an overview of the [[Phidget WebService]] in general.&lt;br /&gt;
&lt;br /&gt;
===Installing the WebService===&lt;br /&gt;
&lt;br /&gt;
To install the webservice, you must first have the [[#Installing|Phidget libraries installed]].  Then, follow these steps:&lt;br /&gt;
&lt;br /&gt;
#Download &#039;&#039;&#039;avahi&#039;&#039;&#039; and its development libraries (mdnsresponder/bonjour is also an option, see the [[#WebService with mDNSResponder|webservice with mDNSResponder]] section)&lt;br /&gt;
#*Try {{Code|apt-cache search avahi}} in a terminal to find current packages&lt;br /&gt;
#*Often, this is installed in a default system, you may already have it&lt;br /&gt;
#Unpack and install the [{{SERVER}}/downloads/libraries/phidgetwebservice.tar.gz Phidgets WebService] source code tarball for Linux&lt;br /&gt;
#*From the unpacked WebService source code directory, run:&lt;br /&gt;
#*:{{Code|./configure}}&lt;br /&gt;
#*:{{Code|make}}&lt;br /&gt;
#*:{{Code|sudo make install}}&lt;br /&gt;
#*This will compile the executable {{Code|phidgetwebservice21}} and place it into {{Code|/usr/bin/phidgetwebservice21}}&lt;br /&gt;
&lt;br /&gt;
====WebService with BSD====&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;BSD&#039;&#039;&#039;, the webservice has been found to work (BSD 8+) but requires a special configuration at the {{Code|./configure}} step:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 ./configure LIBS=/usr/lib/libphidget21.so CFLAGS=-pthread&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then {{Code|make}} and {{Code|sudo make install}} are the same.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The {{Code|LIBS}} argument may not be necessary, but sometimes BSD has trouble finding the library install location.  The {{Code|CFLAGS}} argument is needed because BSD needs explicit linking for using threads.&lt;br /&gt;
&lt;br /&gt;
====WebService with mDNSResponder====&lt;br /&gt;
&lt;br /&gt;
To use &#039;&#039;&#039;mdnsresponder&#039;&#039;&#039; instead of avahi, change the configure script to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 ./configure --enable-zeroconf=bonjour&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(To see all options, use {{Code|./configure --help}} like you would any configure script)&lt;br /&gt;
&lt;br /&gt;
===Setting Up the WebService===&lt;br /&gt;
&lt;br /&gt;
To set up and use the webservice, it helps to have [[#Setting udev Rules|set your udev rules]].  Otherwise, you must run the webservice as root.&lt;br /&gt;
&lt;br /&gt;
You can get command line help with {{Code|phidgetwebservice21}} by using the {{Code|-h}} option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ phidgetwebservice21 -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
&#039;phidgetwebservice21&#039; is a Phidget and Dictionary server from Phidgets Inc. See www.phidgets.com for more information.&lt;br /&gt;
Usage: phidgetwebservice21 [OPTION]&lt;br /&gt;
All parameters are optional. The default parameters are: port=5001, ServerName=(Computer Name) and no password&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -p      Port&lt;br /&gt;
  -n      Server Name&lt;br /&gt;
  -P      Password&lt;br /&gt;
  -v      Debug mode&lt;br /&gt;
  -h      Display this help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will see this help regardless of whether the webservice was correctly hooked in to avahi.  In fact, you will see it even if you explicitly disabled mDNS in the {{Code|./configure}} step at compile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
  ./configure --disable-zeroconf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(To see all options, use {{Code|./configure --help}} like you would any configure script)&lt;br /&gt;
&lt;br /&gt;
To find the defaults used by {{Code|phidget21webservice}}, the command line is the fastest way to learn the default server name and IP address of your computer:&lt;br /&gt;
*For the default server name, use {{Code|hostname}} on the command line.&lt;br /&gt;
*For your IP address, use {{Code|ifconfig -a}} on the command line.&lt;br /&gt;
**A line in the return text, under your main internet connection (usually {{Code|eth0}}) will say something like {{Code|inet addr:192.168.3.178}}, which is your IP.&lt;br /&gt;
&lt;br /&gt;
Using a server name to connect would not be an option without avahi or some other mDNS service; in this case you would only have the option to use an IP address.&lt;br /&gt;
&lt;br /&gt;
===Using the WebService===&lt;br /&gt;
&lt;br /&gt;
To use a Phidget over the webservice, you&#039;ll want to:&lt;br /&gt;
* Obtain code you can use to open a Phidget remotely&lt;br /&gt;
* Start the webservice on the computer that directly connects to the Phidget&lt;br /&gt;
* Run your program on the remote computer that will control the Phidget over the network&lt;br /&gt;
&lt;br /&gt;
The easiest way to test these steps on Linux is simply to set up the webservice and run the Phidget program on the same computer, using the loopback interface.  Later, you can replace one of the two ends with a different computer and/or operating system.&lt;br /&gt;
&lt;br /&gt;
To quickly create code to run remotely, in our examples we include commented out lines with openRemote() function calls of different types.  In the C example for your device, find the line that says:&lt;br /&gt;
&lt;br /&gt;
{{Code|CPhidget_open((CPhidgetHandle) device, -1)}}&lt;br /&gt;
&lt;br /&gt;
and change it to be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 int serial_number = 37299&lt;br /&gt;
 CPhidget_openRemoteIP ((CPhidgetHandle) device, serial_number, &amp;quot;127.0.0.1&amp;quot;, 5001, NULL)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Except that you should replace &#039;&#039;&#039;37299&#039;&#039;&#039; with the serial number of your Phidget, which you can obtain from either the Phidget board itself, or from when you [[#Checking|ran the HelloWorld example code]].  The IP address &amp;quot;127.0.0.1&amp;quot; simply loops back to the same computer, and 5001 is the default port as found from using {{Code|phidget21webservice -h}} in [[#Setting Up the WebService|the Setting Up the WebService]] section.  The NULL is used to not specify a password.&lt;br /&gt;
&lt;br /&gt;
Save the changed example under a different filename.  In the walkthrough here, we are using the {{Code|InterfaceKit.c}} example, and we rename it to be {{Code|InterfaceKitRemote.c}}&lt;br /&gt;
&lt;br /&gt;
Compile your new C file. In our {{Code|InterfaceKitRemote.c}} case, this would be by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 gcc InterfaceKitRemote.c -o InterfaceKitRemote -lphidget21&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Start two terminals to run this test, usually opened via Ctrl-Alt-T.  Your [[#Setting udev Rules|udev rules]] need to be set up or you should use sudo for every command.  First, start the webservice in Terminal #1:&lt;br /&gt;
&lt;br /&gt;
[[Image:Linux_ws_start.png|link=]]&lt;br /&gt;
&lt;br /&gt;
This will broadcast any Phidget events, and receive any Phidget requests, both over the network.&lt;br /&gt;
&lt;br /&gt;
2. Start the InterfaceKitRemote program that you just compiled which will open the remote Phidget.  In this case, it is {{Code|InterfaceKitRemote}}:&lt;br /&gt;
&lt;br /&gt;
[[Image:Linux_ws_step2.png|link=]]&lt;br /&gt;
&lt;br /&gt;
3. Now, plug in the Phidget!  The {{Code|phidget21webservice}} program captures the attach and other events and sends them out over the network (in the background in Terminal #1) and the Phidget software objected opened with openRemote in Terminal #2 receives them:&lt;br /&gt;
&lt;br /&gt;
[[Image:Linux_ws_step3.png|link=]]&lt;br /&gt;
&lt;br /&gt;
4. You can confirm that the webservice was indeed behind this exchange by killing the webservice process while still allowing the remote program to run:&lt;br /&gt;
&lt;br /&gt;
[[Image:Linux_ws_step4.png|link=]]&lt;br /&gt;
&lt;br /&gt;
===Debugging the WebService===&lt;br /&gt;
&lt;br /&gt;
In addition to enabling [[General Phidget Programming#Logging|logging]] in your Phidget code, you can get additional debugging information from the WebService itself.  This additional debugging is enabled via a re-compile of the webservice.  From the webservice source code directory, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 make clean&lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-debug&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
 sudo make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you suspect multicast DNS (mDNS) may be the problem, you can:&lt;br /&gt;
* Try compiling the webservice with mDNSResponder, as described in [[#Installing the WebService|Installing the WebService]], or &lt;br /&gt;
* Try compiling the webservice completely without mDNS, as described in [[#Setting Up the WebService|Setting Up the WebService]]&lt;br /&gt;
&lt;br /&gt;
==Advanced Uses==&lt;br /&gt;
&lt;br /&gt;
===Setting udev Rules===&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to be using {{Code|sudo}} to run Phidget programs (including the webservice) forever, you will want to create a {{Code|udev}} rule to allow yourself access to the Phidget when you are not root.&lt;br /&gt;
&lt;br /&gt;
Udev has an easy way to set the owner and permissions of the USB interface of the Phidget - it finds all devices that match a given set of rules, and applies new traits to them.  But you need to give udev something to match in order to apply the new settings.  Here, we will tell udev to match the vendor code for Phidgets, Inc.  &lt;br /&gt;
&lt;br /&gt;
We recommend that you use the rules file included in the library download you have already installed.  Check the README file included in that download for information on how exactly to install it.  &lt;br /&gt;
&lt;br /&gt;
The rules for udev are kept in files in {{Code|/etc/udev/rules.d/}} and are traditionally grouped into order of running (10 runs before 20, 30, etc) and device type (cd, network, etc).  There should be one or more files in there already - if this is your first time editing udev rules take a look at them to see the syntax to use:&lt;br /&gt;
* Commas separate each pair with == or =&lt;br /&gt;
* One rule on each line, no line breaks&lt;br /&gt;
* Quotes around the value to be matched or changed&lt;br /&gt;
* Comments can be added on lines starting with #&lt;br /&gt;
&lt;br /&gt;
Strictly speaking, the files run in lexical order (i.e. the order they&#039;re listed when you use {{Code|ls}}).  A device can match many rules, and all will apply (if possible).  If conflicting rules are found, the first rule found is followed.&lt;br /&gt;
&lt;br /&gt;
===Starting the WebService at Boot===&lt;br /&gt;
&lt;br /&gt;
If you are tired of starting the webservice on the command line all the time, you can have the webservice start when your system starts, every time.&lt;br /&gt;
&lt;br /&gt;
====User Space====&lt;br /&gt;
&lt;br /&gt;
If you are running a standard Linux machine with an X-server (Unity, KDE) the easiest way to do this is to have the Phidget WebService start when your x server starts.&lt;br /&gt;
&lt;br /&gt;
In this case, the webservice will be running in user space, so your [[#Setting udev Rules|udev rules need to be set up]] for the your user permissions to be able to access the USB ports using libusb.&lt;br /&gt;
&lt;br /&gt;
Within the X-windowing system, there is usually some sort of {{Code|System &amp;amp;rarr; Settings/Preferences &amp;amp;rarr; Startup}} that you can choose to add programs that start when a user session starts.  On Ubuntu you can use Unity to find programs listing &amp;quot;startup&amp;quot; in their names to accomplish the same thing.  This will eventually lead you to a graphical tool like this to simply add the {{Code|/usr/bin/phidgetwebservice21}} program:&lt;br /&gt;
&lt;br /&gt;
[[Image:linux_ws_boot.png|400px|link=]]&lt;br /&gt;
&lt;br /&gt;
====As A Service====&lt;br /&gt;
&lt;br /&gt;
You would want to set the boot start of {{Code|phidgetwebservice21}} to be a service if you are running a server, or a headless machine.  It is handy any time you need the webservice to be started as a booted, respawning service with a presence in different run levels and for all users.&lt;br /&gt;
&lt;br /&gt;
A service is essentially a program that hangs out in the background, waiting to be used by some incoming task.  When the service is needed, the service forks a program to handle that need.  Most services that run on your Linux computer already have the ability to fork themselves.  &lt;br /&gt;
&lt;br /&gt;
The webservice, however, is just a binary on Linux - {{Code|phidgetwebservice21}} - and so we need a program that handles the forking for us.  For this, we use the {{Code|start-stop-daemon}} program to spawn a standalone process for us, or kill it, based on our service-like start, stop, and restart commands.&lt;br /&gt;
&lt;br /&gt;
To do this, we need:&lt;br /&gt;
# A script that tells the boot process how to start and handle the webservice (i.e. by using {{Code|start-stop-daemon}})&lt;br /&gt;
# A link from that script to the boot list&lt;br /&gt;
# An initialization file for the script&lt;br /&gt;
&lt;br /&gt;
First, the script.  We will walk through Debian here, both because it is such a common distribution and because it is the distribution that our [{{SERVER}}products.php?product_id=1073 Single Board Computer] runs.  But {{Code|init}} is surprisingly diverse on Linux, including everything from a different boot order, to different initialization programs and structure, and even different runlevels.  &lt;br /&gt;
&lt;br /&gt;
On Debian (including Ubuntu), the initialization script covers:&lt;br /&gt;
* Runlevels that the service should be present on&lt;br /&gt;
* Dependencies of the service&lt;br /&gt;
* Name of the service and other informative data&lt;br /&gt;
* The location of the PIDFILE, which stores the process ID (pid) for later dealing with a spawned instance&lt;br /&gt;
* Any configuration file locations&lt;br /&gt;
* What to do when the service is given instructions to &#039;&#039;&#039;start&#039;&#039;&#039;, &#039;&#039;&#039;stop&#039;&#039;&#039;, or &#039;&#039;&#039;reload&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The Debian script we use to start the webservice on the [{{SERVER}}products.php?product_id=1073 Single Board Computer]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight line start=&amp;quot;1&amp;quot; lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          phidgetwebservice&lt;br /&gt;
# Required-Start:    $network $remote_fs&lt;br /&gt;
# Required-Stop:     $network $remote_fs&lt;br /&gt;
# Should-Start:      avahi&lt;br /&gt;
# Should-Stop:       avahi&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Phidget WebService&lt;br /&gt;
# Description:       Phidget WebService for controlling Phidgets over the network.&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
DESC=&amp;quot;Phidget WebService&amp;quot;&lt;br /&gt;
NAME=phidgetwebservice&lt;br /&gt;
BIN=phidgetwebservice21&lt;br /&gt;
DAEMON=/usr/bin/$BIN&lt;br /&gt;
PIDFILE=/var/run/$NAME.pid&lt;br /&gt;
CFG=/etc/default/$NAME&lt;br /&gt;
&lt;br /&gt;
# Gracefully exit if the package has been removed.&lt;br /&gt;
test -x $DAEMON || exit 0&lt;br /&gt;
&lt;br /&gt;
# load config&lt;br /&gt;
pws_port=&amp;quot;5001&amp;quot;&lt;br /&gt;
pws_serverid=&amp;quot;&amp;quot;&lt;br /&gt;
pws_password=&amp;quot;&amp;quot;&lt;br /&gt;
[ -f $CFG ] &amp;amp;&amp;amp; . $CFG&lt;br /&gt;
&lt;br /&gt;
start() {&lt;br /&gt;
	[ -z &amp;quot;$pws_port&amp;quot; ] || OPTIONS=&amp;quot;-p $pws_port &amp;quot;&lt;br /&gt;
	[ -z &amp;quot;$pws_password&amp;quot; ] || OPTIONS=&amp;quot;$OPTIONS-P $pws_password &amp;quot;&lt;br /&gt;
&lt;br /&gt;
	if [ -z &amp;quot;$pws_serverid&amp;quot; ]; then&lt;br /&gt;
		OPTIONS=&amp;quot;$OPTIONS -n $( hostname )&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		OPTIONS=&amp;quot;$OPTIONS -n $pws_serverid&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
	&lt;br /&gt;
	echo -n &amp;quot;Starting $DESC: &amp;quot;&lt;br /&gt;
	start-stop-daemon -S -b -q -p $PIDFILE -m -x $DAEMON -- $OPTIONS &amp;amp;&amp;amp; echo &amp;quot;OK&amp;quot; || echo &amp;quot;ALREADY RUNNING&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stop() {&lt;br /&gt;
	echo -n &amp;quot;Stopping $DESC: &amp;quot;&lt;br /&gt;
	start-stop-daemon -K -q -p $PIDFILE -x $DAEMON &amp;amp;&amp;amp; echo &amp;quot;OK&amp;quot; || echo &amp;quot;NOT RUNNING&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
	start&lt;br /&gt;
	;;&lt;br /&gt;
  stop)&lt;br /&gt;
	stop&lt;br /&gt;
	;;&lt;br /&gt;
  restart|force-reload)&lt;br /&gt;
	stop&lt;br /&gt;
	sleep 1&lt;br /&gt;
	start&lt;br /&gt;
	;;&lt;br /&gt;
  *)&lt;br /&gt;
	echo &amp;quot;Usage: $0 {start|stop|restart}&amp;quot;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Save the script into a file called {{Code|phidgetwebservice}}, and use {{Code|chmod 755}} to make it executable.&lt;br /&gt;
&lt;br /&gt;
Also on Debian, startup service scripts should go in {{Code|/etc/init.d}}, and then put within the appropriate runlevel-numbered folder - by symbolic link.  There is a handy tool to do this for you, called {{Code|insserv}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 sudo insserv -d phidgetwebservice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The {{Code|insserv}} program is the program that makes use of the {{Code|### BEGIN INIT INFO...### END INIT INFO}} that appears at the top of the {{Code|phidgetwebservice}} script.  Use {{Code|man insserv}} for more information.  The {{Code|insserv}} tool handles the mess of finding the right runlevel folders (i.e. the {{Code|rc.d}} numbered folders) and making the appropriate links. You can see what links would be updated by running {{Code|insserv}} with the {{Code|-n}} option, for a dry run.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; When you run {{Code|insserv}}, all of the dependencies for the boot order are re-written.  This means that all of the initialization scripts in {{Code|/etc/init.d}} are re-examined.  So, you&#039;ll probably get a lot of output when you run the command.&lt;br /&gt;
&lt;br /&gt;
Then, you can check that {{Code|phidgetwebservice}} is on the service list with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 service --status-all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And you can start it right now without rebooting like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:linux_system_service_start.png|link=]]&lt;br /&gt;
&lt;br /&gt;
The {{Code|service}} command has many options to start and stop services like the phidgetwebservice, try {{Code|man service}} for more information.&lt;br /&gt;
&lt;br /&gt;
At this point, you can follow the client instructions on [[#Using the WebService|using the webservice]] to create a loopback test for the new webservice service that should now be running.&lt;br /&gt;
&lt;br /&gt;
The final piece, for future configuration changes, is that the {{Code|/etc/init.d}} script looks for the file {{Code|/etc/default/phidgetwebservice}} upon starting up.  The file is expected to contain the port, server ID, and password for the server side of the webservice.  These are also set in the {{Code|phidgetwebservice}} script in {{Code|init.d}}, as you can see from reading the code above, but if you want to change them a lot, you can edit the configuration file rather than changing the {{Code|phidgetwebservice}} script and re-installing by {{Code|insserv}} every time.  The configuration file in {{Code|/etc/default/}} should contain the same syntax as that used in the script source above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 pws_port=&amp;quot;5001&amp;quot;&lt;br /&gt;
 pws_serverid=&amp;quot;&amp;quot;&lt;br /&gt;
 pws_password=&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Cross-Compiling with a Custom Toolchain===&lt;br /&gt;
&lt;br /&gt;
This would allow you to have the Phidget libraries compiled to include in code for an embedded device.  When developing for an embedded device, you will often write code for it on your &#039;normal&#039; computer, and then build the code to binary with a different target than the processor in your computer.  Many microcontrollers do not have the ability to run a full operating system, and hence cannot compile code natively.  &lt;br /&gt;
&lt;br /&gt;
The collection of tools used to create binary code for a separate system is called a &#039;&#039;toolchain&#039;&#039;.  Compiling the Phidget libraries specifically for an embedded system, and placing them into the path for writing code on top of the libraries is like adding another link in this chain.&lt;br /&gt;
&lt;br /&gt;
You can use the typical {{Code|./configure}} setup for custom build targets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./configure --prefix=toolchain_location --build=this_system --host=target_system&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Phidget libraries, the {{Code|./configure}} tool works this way as well. You&#039;d use this in the [[#Installing|install the libraries section]] setup. For example, let&#039;s say you&#039;re building the libraries to develop code for the [{{SERVER}}products.php?product_id=1073 Single Board Computer] as a target.  Your system is a standard Linux system (i686-pc-linux-gnu) and the target system for the SBC is {{Code|arm-linux-gnueabi}}.  For this target, you&#039;ll need the base of the GNU embedded Debian chain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 sudo apt-get install gcc-arm-linux-gnueabi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, download the Phidget libraries [[#Quick Downloads|above]] and unpack them into a folder {{Code|phidget_libraries}}.  If {{Code|/usr/arm-linux-gnueabi}} is the location of your ARM toolchain (downloaded above in {{Code|gcc-arm-linux-gnueabi}}), type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;source&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
 ~/phidget_libraries $&amp;gt; ./configure --prefix=/usr/arm-linux-gnueabi --build=i686-pc-linux-gnu --host=arm-linux-gnueabi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux on Non-Standard Systems===&lt;br /&gt;
&lt;br /&gt;
We occasionally get requests to use Phidgets on Linux systems other than a standard laptop or desktop.  One example is the Raspberry Pi system.  Often these systems include USB ports, so the combination makes sense.&lt;br /&gt;
&lt;br /&gt;
Our libraries are installed by building from source, and their main dependency is the {{Code|libusb-1.0-0-dev}} library, so if you can get gcc on your machine (or set up a cross compiler for it) and you can also install the libusb-1.0 development headers, you can probably get Phidgets to work.  Of course, we don&#039;t offer much support for these systems, so - depending on your system - expect to spend some raw time getting it up and going.  &lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to the embedded computer thing, keep in mind that for these super basic systems, once you&#039;ve gotten a power supply, and storage, and put the kernel you want on it, and then spent a couple of days of time getting things working, and  more time getting your drivers going, costs add up pretty quickly.  If you want a compact system that works right out of the box (and which can use all of our analog sensors in addition to our USB Phidgets), check out our [{{SERVER}}products.php?product_id=1073 Single Board Computer].   Our SBC3:&lt;br /&gt;
* Has many more USB ports than super-stripped devices, and also has digital and analog ports &lt;br /&gt;
* Includes a power supply and can run on batteries easily&lt;br /&gt;
* Has a nice amount of RAM, a decent embedded processor, and built-in onboard storage (we&#039;ve run R, GRASS, and X11 on it)&lt;br /&gt;
* Includes installed Debian, working Phidget drivers, and [[Phidget WebService|networked Phidget drivers]] from the moment it ships &lt;br /&gt;
* Has access to the full Debian repository including Python, Mono .NET, Ruby, and gcc&lt;br /&gt;
* Has a kernel development kit with patch file and instructions for adding new drivers (bluetooth, wireless, and so on)&lt;br /&gt;
* Comes with very in-depth documentation and technical support by phone and email &lt;br /&gt;
* Etc, etc.&lt;br /&gt;
The [[Phidget WebService|networked support]] in particular allows it to work with your cell phone and more.  &lt;br /&gt;
&lt;br /&gt;
But if you really do want a raw hobbyist system to tinker with, go for it!  We&#039;re all nerds here - we&#039;ve been there too and we certainly understand!&lt;br /&gt;
&lt;br /&gt;
==Common Problems and Solutions==&lt;br /&gt;
&lt;br /&gt;
{{ProblemSolution|Low Speed Phidgets (Max of 8)|Linux will only schedule one low-speed interrupt transfer per millisecond.}}&lt;br /&gt;
&lt;br /&gt;
You can find out the type of your Phidget by attaching it and then running &amp;lt;code&amp;gt;&amp;lt;font size=3&amp;gt;dmesg | tail&amp;lt;/font&amp;gt;&amp;lt;/code&amp;gt;, which will display the type of Phidget from your kernel logs, as described above in the [[#Hardware|hardware section]]. The practical consequence of this is if your system has many low speed Phidgets attached, they will each be throttled down.  Low speed Phidgets require an interrupt transfer as often as every 8 milliseconds.  A Linux system could only have up to 8 of these Phidgets attached.&lt;br /&gt;
&lt;br /&gt;
{{ProblemSolution|Sample Overrun Error|The data read from a program, or the first packet on the WebService, can give a sample overrun error (EEPHIDGET_OVERRUN).}}&lt;br /&gt;
&lt;br /&gt;
Linux only polls data from the analog inputs on Phidgets when you ask it to.  So there is some delay between when you open the device and when it actually attaches when data from those inputs are accumulating...and overrunning the buffer.  This is simply in the nature of how Linux polls USB - we recommend catching (but ignoring) this one-time initial error.&lt;br /&gt;
&lt;br /&gt;
{{ProblemSolution|Raspberry Pi USB Current|Your device doesn&#039;t seem to run as expected on a Raspberry Pi.}}&lt;br /&gt;
&lt;br /&gt;
The USB ports on the standard Raspberry Pi are only capable of supplying around 100mA reliably.  Since USB specification dictates 500mA of current maximum, many USB devices require several hundred mA to run smoothly.  Since the Pi cannot supply this much current it is common to see buggy performance or complete failure to run at all.  The get around this you should use a USB hub connected to the Pi that has it&#039;s own external power supply.  This will allow the devices connected to have as much power as they require.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Linear_Motion_Guide&amp;diff=24718</id>
		<title>Linear Motion Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Linear_Motion_Guide&amp;diff=24718"/>
		<updated>2017-01-11T17:15:00Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Primer]]&lt;br /&gt;
The goal of a linear system is to have an object or other subsystem move along a linear track with a controllable velocity and position.  The key features of a linear system are the efficiency with which you can move the load, the speed you can move it at, and the accuracy with which you can position the load along the track.  Typically a linear system will consist of 1 or more rails/shafts with linear bearings which support the load.  The bearing surface is machined to be extremely smooth and is case hardened so it doesn&#039;t deform whatsoever under rated load.  Then you will also need a drive mechanism so that you can actually control the position along your track.  There are a number of options for this such as belt drives, chain drives, and ball screws.  Which you use will depend on your specific requirements so lets briefly discuss why and how you would use each.&lt;br /&gt;
&lt;br /&gt;
==Slides==&lt;br /&gt;
The first choice is for the type of track you use.  The two options available are linear shaft and rail.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Linear_slides.png|link=|700px|center]]&lt;br /&gt;
&lt;br /&gt;
In most cases using rail is preferable.  The continuous support under the shaft minimizes deflection under load and it also has many mounting holes along the track which makes for easier and more secure installation in your system.  Rail also has the potential for longer travel distances as the shaft won&#039;t experience any deflection due to it&#039;s own weight.  Of course, using rail isn&#039;t practical for all applications.  In cases where you need to span a gap of some kind or the surface you are travelling along isn&#039;t easy to mount to then using suspended shaft is a suitable alternative to rail.  There are also flange mount blocks for the shaft so you can mount to a perpendicular surface rather than the pillow blocks shown in the image above.  &lt;br /&gt;
&lt;br /&gt;
==Drive Systems==&lt;br /&gt;
There are three main ways to drive your system available from Phidgets:&lt;br /&gt;
&lt;br /&gt;
===Ball Screws===&lt;br /&gt;
Ball screws allow for very precise positioning with very little backlash.  They are also very efficient, meaning they don&#039;t require very much force to move a sizeable load in comparison to other methods.  A ball screw system typically consists of 4 or 5 elements plus something to turn the screw.  To support the screw you need a drive bearing and a support bearing.  To apply force to your object you need a nut that will move along the screw (you can also have a housing for the nut depending on how you want to attach your load).  Then you of course need the screw itself.  Here is an example of a ball screw assembly using a stepper motor to direct drive the screw:&lt;br /&gt;
&lt;br /&gt;
[[image:Ball_screw_assembly_wiki.png|link=|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since the ball screw isn&#039;t designed to apply force that is &#039;&#039;not&#039;&#039; in the direction of travel we want to use a sliding support system like the rails or shafts mentioned in the slide section.  Ideally we should use 2 rails with 1 or more bearings on each.  For example:&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[image:Ball_screw_drive_full.JPG|center|600px|link=]]||[[image:Belt_driven_ball_screw.JPG|center|600px|link=]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that here we used a belt to drive the ball screw rather than direct drive off the motor.  This was just so that we could simplify the chassis.  Belt drives allow for more misalignment than shaft couplers do.  Here is a demonstration of how it looks and sounds:&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|_brx8IxYSik}}&lt;br /&gt;
&lt;br /&gt;
===Belt Drive===&lt;br /&gt;
A sufficiently tensioned belt will move linearly between the 2 pulleys it is circulating on.  We can take advantage of this by attaching something to the belt to have it get pulled along as well.  Belt drives are not as precise as ball screws and can have some additional error if there is any slack in the belt.  However, they are easier to set up than a ball screw, are more practical for long distance runs, are cheaper, and they can generally move things more quickly.  &lt;br /&gt;
&lt;br /&gt;
All you need for a belt drive system is a belt, and 2 pulleys.  Similarly to a ball screw system the drive mechanism (your belt) won&#039;t be supporting any load other than in the axis of travel.  This means that you will need a sliding track made from shaft or rail on which to rest your load.  To attach the belt to your load we recommend using some specially designed belt clamps such as the [{{SERVER}}/products.php?product_id=TRM4226_0 TRM4226] and [{{SERVER}}/products.php?product_id=TRM4227_0 TRM4227].  They can be used to mount a belt to a flat surface on either side for example:&lt;br /&gt;
&lt;br /&gt;
[[image:Belt_clamp.png|link=|750px|center]]&lt;br /&gt;
&lt;br /&gt;
This style of clamping does reduce the maximum strength of the belt somewhat so you should factor that into your design.  Here is an example of a functional single stage belt drive system:&lt;br /&gt;
&lt;br /&gt;
[[image:Belt_drive_assembly_wiki.png|link=|1500px|center]]&lt;br /&gt;
&lt;br /&gt;
This is all in reference to linear systems.  If you want more information about belt systems in rotary systems you can refer to our [[Rotary Motion Primer]] here.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|BAnt21tCL8I}}&lt;br /&gt;
&lt;br /&gt;
===Chain Drive===&lt;br /&gt;
Chain drives work in an identical fashion to belt drives.  They are a bit more complicated to work with but they have the advantage that they can handle much more load than a belt of similar size.&lt;br /&gt;
&lt;br /&gt;
Just replace the pulleys with chain sprockets and the belt with a chain and you are done.  Attaching chain to your load is a matter of putting a screw through a hole between chain pitches.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:Chain_mount.png|link=|center|700px]]&lt;br /&gt;
&lt;br /&gt;
For more information on setting up chain systems you should have a look at our [[Rotary Motion Primer]] which goes into more depth about the specifics of working with roller chains.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Rotary_Motion_Guide&amp;diff=24717</id>
		<title>Rotary Motion Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Rotary_Motion_Guide&amp;diff=24717"/>
		<updated>2017-01-11T17:08:54Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Primer]]&lt;br /&gt;
In rotary systems, you have a rotating shaft which applies torque to do work.  Typically this shaft is turned by an electric motor of some kind and then, through a series of belts/chains/couplers transmits that power to a final output shaft or arm or wheel which accomplishes the desired task.  Why not just use the output shaft of the motor directly?  There are two main reasons:&lt;br /&gt;
&lt;br /&gt;
*You might want to gear the motor down further to increase the torque available by using pulleys or sprockets of differing sizes.  &lt;br /&gt;
*The shaft on the motor itself isn&#039;t really designed for forces other than torque.  It is difficult to put anything of significant size on the shaft without putting too much overhung (radial) load on the shaft which will stall the motor.  &lt;br /&gt;
&lt;br /&gt;
As a result, the base of any rotary system is the rotating shaft.  Phidgets has 4 sizes of shaft available: 8mm, 12mm, 17mm, and 25mm.  The 12, 17, and 25mm shafts also have a variant available with a keyway machined in the length of the shaft if you don&#039;t want to machine it yourself.  These shafts need to be suspended on bearings, we do not sell any bearings currently but they are commonly available components that you can find locally.  For the larger shaft sizes (17 and 25mm) we recommend using steel bearing housings.  &lt;br /&gt;
&lt;br /&gt;
==Motors==&lt;br /&gt;
Every system will need a motor or else there will be no motion (without external input).  Phidgets offers a wide selection of motors of a number of different types that would all be suitable for rotary systems.  For more information on this you can check out our primers for [[DC Motor and Controller Primer|DC motors]] and [[Stepper Motor and Controller Primer|Stepper motors]].&lt;br /&gt;
==Pulleys/Timing belts==&lt;br /&gt;
A belt is simply a loop of tough, flexible material such as rubber and kevlar with a series of teeth that mesh with the teeth on specially designed pulley wheels to synchronize two (or more) rotating shafts.  Belts are a cheap options for shafts that are not axially aligned and tend to run quietly and smoothly.  Belts are typically tensioned either by adjusting center to center distance between pulleys or via a tensioner/idler pulley.  This leads to very low backlash and a high efficiency (as high as 98%).  &lt;br /&gt;
&lt;br /&gt;
We have two types of belts available, 2GT (6mm wide) and 5GT (15mm wide).  Each comes in loops of varying circumferences.  The 2GT belts are rated for 6lbs of working tension while the 5GT are rated for 100lbs.  Belt systems are fairly simple, you have 2 or more pulleys and a belt that goes around all of them.  One of the pulleys is driven by your motor and the other(s) are either connected to your load or in the case of an idler pulley are simply free spinning to act as a tensioner for the belt.  For example, here is a system that uses a belt to transmit power form a stepper motor to a ball screw:&lt;br /&gt;
&lt;br /&gt;
[[image:Belt driven ball screw.JPG|700px|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Chain/Sprockets==&lt;br /&gt;
Pretty much everyone has at least seen a chain system in their life in the form of a bicycle.  This system of course is driven by human input rather than a motor.  Automated systems behave no differently though, you have several sprockets, and chain that wraps around them.  One sprocket is driven and the others perform work on the load.  Chain tends to be noisier than belts and cannot be tensioned as tightly meaning there is a bit more backlash inherent in the system.  In exchange though, chain can move much heavier loads for their size.  &lt;br /&gt;
&lt;br /&gt;
We sell ANSI#25 and #40 chain and sprockets (that is 0.25&amp;quot; pitch and 0.5&amp;quot; pitch).  The #25 is rated for 100lbs of working tension while the #40 is rated for 800lbs.  Chain is sold by the meter and you can form closed loops of any length you&#039;d like with the link kits that we sell.  To calculate how many links you will need for a particular sprocket spacing you can use [http://www.botlanta.org/converters/dale-calc/sprocket.html this calculator], just enter in the number of teeth on each sprocket, the chain pitch, and the center to center distance between the sprockets to get the number of links you will need.  If the number is not whole, you should always round up (and probably even add one).  Once you know how many links you will require you will need to use the link kit to connect your chain up.  This is where it gets a bit fiddly.  &lt;br /&gt;
&lt;br /&gt;
There are two ways to connect chain, you can either use a hammer and a pin of some kind to knock out one of the pins which you can then connect up with an offset link:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other way is if you have a chain breaker tool you can remove an entire link properly and can use a normal split link.  This process is a bit more tricky but it is stronger over all and will increase the length of the chain by a standard amount unlike the offset link which adds a sort of half link to your total length.  To use a split link you must remove the snap ring and the top plate, then slot it into the chain and replace them both.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:Chain_link_insert_wiki.png|link=|center|1200px]]&lt;br /&gt;
&lt;br /&gt;
A good example of a chain system is our MURVV robot.  Here is how it&#039;s drive mechanism works:&lt;br /&gt;
&lt;br /&gt;
[[Image:Murvv_chain.jpg|link=|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Worm Gearboxes==&lt;br /&gt;
In general, worm gearboxes are just another type of gearbox that can be fitted to a motor.  The main benefit of a worm drive is that it is all but impossible to back drive even when not powered.  This is due to the steep angle used by the gears as they mesh together.  As a result, this type of gearbox is not the most efficient.  There is a lot of frictional loss at the mesh point and they will tend to run hot.  That being said, in the context of the worm drives Phidget&#039;s sells, they are a means to substantially increase the output torque of our larger motors for applications where maximum strength is required.  All our worm gearboxes have a 30:1 gear ratio and since the bearings built into the gearbox can handle much higher axial and radial loads that motors themselves you can easily direct drive very large loads from these gearboxes without having to set up an external mechanism.&lt;br /&gt;
&lt;br /&gt;
==Bearings==&lt;br /&gt;
For the smaller bearings, installation is fairly straight forward.  Simply mount the bearing onto your surface, slot the shaft in and tighten the set screws.  However, for our larger bearings (12mm, 17mm and 25mm) there is a different system used known as an eccentric locking collar or eccentric collar lock.  This is relatively simply to set up but you may not have seen this style of attachment before so lets have a look quickly at how it works and how to install it.&lt;br /&gt;
&lt;br /&gt;
The locking mechanism works by putting a slightly eccentric hole in the bearing and using a collar with a matching hole.  This way, when the collar is twisted on the shaft it will bind.  Step by step:&lt;br /&gt;
&lt;br /&gt;
[[image:empty_bearing.jpg|center|700px|link=]]&lt;br /&gt;
&lt;br /&gt;
Notice how the wall of the bore is thinner on the right side than the left.  This is also true of the collar which slides over the top of the shaft once it is in position.  Insert the shaft in the bearing unit to the desired position:&lt;br /&gt;
&lt;br /&gt;
[[image:uncollared_shaft.jpg|center|700px|link=]]&lt;br /&gt;
&lt;br /&gt;
Next, put the collar onto the shaft and slide it down to the bearing.  Turn the collar slowly until it seats on the lip of the bearing (i.e. the eccentricity of the holes lines up).  Now you will want to tighten the collar by hand by turning it like you would a threaded cap.  You will notice that it will bind by turning it in either direction within 180°.  Be sure to turn the collar in the same direction the primary direction of rotation for the shaft in operation will be.  Once the collar is tight, you will need to use a punch and a hammer to tighten it the last bit.  Find the dead hole in the collar (not the set screw) and insert your punch.  Angle the punch against the wall of the direction you have tightened the collar and give it a few solid taps with the hammer:&lt;br /&gt;
&lt;br /&gt;
[[image:punch_collar.jpg|center|700px|link=]]&lt;br /&gt;
&lt;br /&gt;
Now just tighten the set screw to ensure it doesn&#039;t loosen up with use and you are finished.  To quickly demonstrate here is a video, note that I do not tighten the set screw in this video but that is straight forward enough so it was left out:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|0v6NOY7aRbg}}&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Linear_Motion_Guide&amp;diff=24445</id>
		<title>Linear Motion Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Linear_Motion_Guide&amp;diff=24445"/>
		<updated>2016-11-09T14:49:35Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Primer]]&lt;br /&gt;
The goal of a linear system is to have an object or other subsystem move along a linear track with a controllable velocity and position.  The key features of a linear system are the efficiency with which you can move the load, the speed you can move it at, and the accuracy with which you can position the load along the track.  Typically a linear system will consist of 1 or more rails/shafts with linear bearings which support the load.  The bearing surface is machined to be extremely smooth and is case hardened so it doesn&#039;t deform whatsoever under rated load.  Then you will also need a drive mechanism so that you can actually control the position along your track.  There are a number of options for this such as belt drives, chain drives, and ball screws.  Which you use will depend on your specific requirements so lets briefly discuss why and how you would use each.&lt;br /&gt;
&lt;br /&gt;
==Slides==&lt;br /&gt;
The first choice is for the type of track you use.  The two options available are linear shaft and rail.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Linear_slides.png|link=|700px|center]]&lt;br /&gt;
&lt;br /&gt;
In most cases using rail is preferable.  The continuous support under the shaft minimizes deflection under load and it also has many mounting holes along the track which makes for easier and more secure installation in your system.  Rail also has the potential for longer travel distances as the shaft won&#039;t experience any deflection due to it&#039;s own weight.  Of course, using rail isn&#039;t practical for all applications.  In cases where you need to span a gap of some kind or the surface you are travelling along isn&#039;t easy to mount to then using suspended shaft is a suitable alternative to rail.  There are also flange mount blocks for the shaft so you can mount to a perpendicular surface rather than the pillow blocks shown in the image above.  &lt;br /&gt;
&lt;br /&gt;
==Drive Systems==&lt;br /&gt;
There are three main ways to drive your system available from Phidgets:&lt;br /&gt;
&lt;br /&gt;
===Ball Screws===&lt;br /&gt;
Ball screws allow for very precise positioning with very little backlash.  They are also very efficient, meaning they don&#039;t require very much force to move a sizeable load in comparison to other methods.  A ball screw system typically consists of 4 or 5 elements plus something to turn the screw.  To support the screw you need a drive bearing and a support bearing.  To apply force to your object you need a nut that will move along the screw (you can also have a housing for the nut depending on how you want to attach your load).  Then you of course need the screw itself.  Here is an example of a ball screw assembly using a stepper motor to direct drive the screw:&lt;br /&gt;
&lt;br /&gt;
[[image:Ball_screw_assembly_wiki.png|link=|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since the ball screw isn&#039;t designed to apply force that is &#039;&#039;not&#039;&#039; in the direction of travel we want to use a sliding support system like the rails or shafts mentioned in the slide section.  Ideally we should use 2 rails with 1 or more bearings on each.  For example:&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[image:Ball_screw_drive_full.JPG|center|600px|link=]]||[[image:Belt_driven_ball_screw.JPG|center|600px|link=]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that here we used a belt to drive the ball screw rather than direct drive off the motor.  This was just so that we could simplify the chassis.  Belt drives allow for more misalignment than shaft couplers do.  Here is a demonstration of how it looks and sounds:&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|_brx8IxYSik}}&lt;br /&gt;
&lt;br /&gt;
===Belt Drive===&lt;br /&gt;
A sufficiently tensioned belt will move linearly between the 2 pulleys it is circulating on.  We can take advantage of this by attaching something to the belt to have it get pulled along as well.  Belt drives are not as precise as ball screws and can have some additional error if there is any slack in the belt.  However, they are easier to set up than a ball screw, are more practical for long distance runs, are cheaper, and they can generally move things more quickly.  &lt;br /&gt;
&lt;br /&gt;
All you need for a belt drive system is a belt, and 2 pulleys.  Similarly to a ball screw system the drive mechanism (your belt) won&#039;t be supporting any load other than in the axis of travel.  This means that you will need a sliding track made from shaft or rail on which to rest your load.  There are a bunch of fancy ways to attach the belt to your load but the reality is it doesn&#039;t take much.  A small metal plate and some screws is really all that is required.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:Belt_clamp.png|link=|600px|center]]&lt;br /&gt;
&lt;br /&gt;
This style of clamping does reduce the maximum strength of the belt somewhat so you should factor that into your design.  Here is an example of a functional single stage belt drive system:&lt;br /&gt;
&lt;br /&gt;
[[image:Belt_drive_assembly_wiki.png|link=|1500px|center]]&lt;br /&gt;
&lt;br /&gt;
This is all in reference to linear systems.  If you want more information about belt systems in rotary systems you can refer to our rotary primer here  INSERT LINK HERE.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|BAnt21tCL8I}}&lt;br /&gt;
&lt;br /&gt;
===Chain Drive===&lt;br /&gt;
Chain drives work in an identical fashion to belt drives.  They are a bit more complicated to work with but they have the advantage that they can handle much more load than a belt of similar size.&lt;br /&gt;
&lt;br /&gt;
Just replace the pulleys with chain sprockets and the belt with a chain and you are done.  Attaching chain to your load is a matter of putting a screw through a hole between chain pitches.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:Chain_mount.png|link=|center|700px]]&lt;br /&gt;
&lt;br /&gt;
For more information on setting up chain systems you should have a look at our [[Rotary Motion Primer]] which goes into more depth about the specifics of working with roller chains.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Rotary_Motion_Guide&amp;diff=24444</id>
		<title>Rotary Motion Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Rotary_Motion_Guide&amp;diff=24444"/>
		<updated>2016-11-09T14:49:15Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Primer]]&lt;br /&gt;
In rotary systems, you have a rotating shaft which applies torque to do work.  Typically this shaft is turned by an electric motor of some kind and then, through a series of belts/chains/couplers transmits that power to a final output shaft or arm or wheel which accomplishes the desired task.  Why not just use the output shaft of the motor directly?  There are two main reasons:&lt;br /&gt;
&lt;br /&gt;
*You might want to gear the motor down further to increase the torque available by using pulleys or sprockets of differing sizes.  &lt;br /&gt;
*The shaft on the motor itself isn&#039;t really designed for forces other than torque.  It is difficult to put anything of significant size on the shaft without putting too much overhung (radial) load on the shaft which will stall the motor.  &lt;br /&gt;
&lt;br /&gt;
As a result, the base of any rotary system is the rotating shaft.  Phidgets has 4 sizes of shaft available: 8mm, 12mm, 17mm, and 25mm.  The 12, 17, and 25mm shafts also have a variant available with a keyway machined in the length of the shaft if you don&#039;t want to machine it yourself.  These shafts need to be suspended on bearings, we do not sell any bearings currently but they are commonly available components that you can find locally.  For the larger shaft sizes (17 and 25mm) we recommend using steel bearing housings.  &lt;br /&gt;
&lt;br /&gt;
==Motors==&lt;br /&gt;
Every system will need a motor or else there will be no motion (without external input).  Phidgets offers a wide selection of motors of a number of different types that would all be suitable for rotary systems.  For more information on this you can check out our primers for [[DC Motor and Controller Primer|DC motors]] and [[Stepper Motor and Controller Primer|Stepper motors]].&lt;br /&gt;
==Pulleys/Timing belts==&lt;br /&gt;
A belt is simply a loop of tough, flexible material such as rubber and kevlar with a series of teeth that mesh with the teeth on specially designed pulley wheels to synchronize two (or more) rotating shafts.  Belts are a cheap options for shafts that are not axially aligned and tend to run quietly and smoothly.  Belts are typically tensioned either by adjusting center to center distance between pulleys or via a tensioner/idler pulley.  This leads to very low backlash and a high efficiency (as high as 98%).  &lt;br /&gt;
&lt;br /&gt;
We have two types of belts available, 2GT (6mm wide) and 5GT (15mm wide).  Each comes in loops of varying circumferences.  The 2GT belts are rated for 6lbs of working tension while the 5GT are rated for 100lbs.  Belt systems are fairly simple, you have 2 or more pulleys and a belt that goes around all of them.  One of the pulleys is driven by your motor and the other(s) are either connected to your load or in the case of an idler pulley are simply free spinning to act as a tensioner for the belt.  For example, here is a system that uses a belt to transmit power form a stepper motor to a ball screw:&lt;br /&gt;
&lt;br /&gt;
[[image:Belt driven ball screw.JPG|700px|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Chain/Sprockets==&lt;br /&gt;
Pretty much everyone has at least seen a chain system in their life in the form of a bicycle.  This system of course is driven by human input rather than a motor.  Automated systems behave no differently though, you have several sprockets, and chain that wraps around them.  One sprocket is driven and the others perform work on the load.  Chain tends to be noisier than belts and cannot be tensioned as tightly meaning there is a bit more backlash inherent in the system.  In exchange though, chain can move much heavier loads for their size.  &lt;br /&gt;
&lt;br /&gt;
We sell ANSI#25 and #40 chain and sprockets (that is 0.25&amp;quot; pitch and 0.5&amp;quot; pitch).  The #25 is rated for 100lbs of working tension while the #40 is rated for 800lbs.  Chain is sold by the meter and you can form closed loops of any length you&#039;d like with the link kits that we sell.  To calculate how many links you will need for a particular sprocket spacing you can use [http://www.botlanta.org/converters/dale-calc/sprocket.html this calculator], just enter in the number of teeth on each sprocket, the chain pitch, and the center to center distance between the sprockets to get the number of links you will need.  If the number is not whole, you should always round up (and probably even add one).  Once you know how many links you will require you will need to use the link kit to connect your chain up.  This is where it gets a bit fiddly.  &lt;br /&gt;
&lt;br /&gt;
There are two ways to connect chain, you can either use a hammer and a pin of some kind to knock out one of the pins which you can then connect up with an offset link:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other way is if you have a chain breaker tool you can remove an entire link properly and can use a normal split link.  This process is a bit more tricky but it is stronger over all and will increase the length of the chain by a standard amount unlike the offset link which adds a sort of half link to your total length.  To use a split link you must remove the snap ring and the top plate, then slot it into the chain and replace them both.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:Chain_link_insert_wiki.png|link=|center|1200px]]&lt;br /&gt;
&lt;br /&gt;
A good example of a chain system is our MURVV robot.  Here is how it&#039;s drive mechanism works:&lt;br /&gt;
&lt;br /&gt;
[[Image:Murvv_chain.jpg|link=|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Worm Gearboxes==&lt;br /&gt;
In general, worm gearboxes are just another type of gearbox that can be fitted to a motor.  The main benefit of a worm drive is that it is all but impossible to back drive even when not powered.  This is due to the steep angle used by the gears as they mesh together.  As a result, this type of gearbox is not the most efficient.  There is a lot of frictional loss at the mesh point and they will tend to run hot.  That being said, in the context of the worm drives Phidget&#039;s sells, they are a means to substantially increase the output torque of our larger motors for applications where maximum strength is required.  All our worm gearboxes have a 30:1 gear ratio and since the bearings built into the gearbox can handle much higher axial and radial loads that motors themselves you can easily direct drive very large loads from these gearboxes without having to set up an external mechanism.&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=T-Slot_Guide&amp;diff=24443</id>
		<title>T-Slot Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=T-Slot_Guide&amp;diff=24443"/>
		<updated>2016-11-09T14:48:49Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|- valign=middle&lt;br /&gt;
| align=center width=300px| __TOC__ &lt;br /&gt;
| [[Image:tsl_header.jpg|500px|link=]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Primer]]&lt;br /&gt;
&lt;br /&gt;
T-Slot is a framing system composed of extruded aluminum profiles which use the namesake slot as a mounting point for various hardware components.  Phidgets carries three different series of T-Slot extrusions.  A 20mm, 30mm, and 40mm standard.  For each series we carry a single (20x20mm, 30x30mm, 40x40mm) and double (20x40mm, 30x60mm, 40x80mm) wide extrusion.  The series you end up using depends where on the weight vs. strength scale your project ends up falling.  Obviously the smaller extrusions will not be as strong and rigid as the larger extrusions.  The manufacturer provides equations for calculating how strong the extrusions are on pages 11 and 12 of their catalogue which can be found [{{SERVER}}/documentation/Modular_Assembly_System.pdf here].  The modulus of elasticity is listed as approximately 70,000N/mm².  The moment of inertia is listed under the specifications for the specific extrusion profile you are using.  With those two parameters you should be able to calculate with reasonable accuracy the relationship between force applied and resultant beam deflection.  &lt;br /&gt;
&lt;br /&gt;
The first thing you will need to do is cut the extrusions to length.  There are 2 ways to do with.  Either with a band saw or a chop saw with an appropriate blade (there are carbide blades designed for cutting aluminum).  Once your extrusions are cut down to size you will want to connect them together:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Connecting Extrusions Together==&lt;br /&gt;
In order for this whole system to be useful you need a way to combine individual extrusions into a more complicated structure.  There are a number of options available for this, each better suited for different situations.  &lt;br /&gt;
&lt;br /&gt;
===Screw Connectors===&lt;br /&gt;
These are the most basic form of connection.  A simple bolt that goes from one extrusion to the next.  In order to use a screw connector there are 2 prerequisite steps you must do before installing.  You need to tap the first extrusion with an appropriate tap for the series you are using (check the product page for the screw connector for which tap is required), and you need to drill a hole in the second extrusion big enough to allow Allen key access to the head of the screw connector.  For example, here is a piece of 30x60mm extrusion prepped for connecting:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screw_connector_prep.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
Once this is done you can screw the connector into the newly tapped extrusion.  When you get close to the end, slide the head of the connector into the slot on the other extrusion and tighten the rest of the way through the hole you drilled. &lt;br /&gt;
&lt;br /&gt;
[[image:Screw_connections.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
===Brackets===&lt;br /&gt;
The diecast aluminum as well as the T and L plate steel brackets allow you to strengthen joints that will experience particularly heavy loads.  You should always use them to reinforce joints which already use another type of connector rather than connecting the extrusions &#039;&#039;purely&#039;&#039; via the brackets.  For all three styles of bracket you will need a few nuts.  We recommend preset or square, the T nuts won&#039;t work well for this application.  Installation is fairly simple, you don&#039;t have to drill and preliminary holes or anything.  Just insert the nuts and bolt the brackets on.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:Tsl_brackets.png|link=|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
===Inner Brackets===&lt;br /&gt;
The inner brackets are a special variant of bracket that are different enough from the other brackets that they deserve their own section.  These brackets do not need to be used with other connection methods.  They are suitable by themselves (though you could use a reinforcement as well if you wanted to).  The one important distinction to make with these brackets is that there are two models of bracket, A and B.  The difference is that the set screw hole is slightly canted so that the set screw pushes the bracketed extrusion into the other extrusion to tighten the hold.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:inner_bracket_ab.jpg|center|700px|link=]]&lt;br /&gt;
&lt;br /&gt;
Notice how both brackets have the set screws canted towards the extrusion.  This way the extrusion you are connecting to this one will be pulled in towards it when the set screws are tightened.  The effect is small but important.  The left-hand bracket in this case is the A series while the right-hand one is the B series.  Here is a diagram showing which series is appropriate for which connection a bit more clearly:&lt;br /&gt;
&lt;br /&gt;
[[image:Inner_bracket_ab_diagram.png|center|600px|link=]]&lt;br /&gt;
&lt;br /&gt;
You should always use 2 inner brackets to connect 2 extrusions together.  &lt;br /&gt;
&lt;br /&gt;
[[image:TSL_90deg01_Small.jpg|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Butt Connectors===&lt;br /&gt;
These connectors are ideally suited to connecting an extrusion to the middle of another extrusion in a T junction.  They have a similar effect to the screw connectors but don&#039;t require access to the other side of the perpendicular extrusion (for example if you had another extrusion there already for a + configuration).  They can also be used with the plate brackets if you want an even stronger connection (but not the diecast brackets).  They do require that you drill a hole into the extrusion to use however.  Specifically 13mm hole, 11mm deep and 16mm in from the end of the extrusion for the PG30 variant and a 17mm hole, 14mm deep and 22mm in from the end of the extrusion for the PG40 variant.  These connectors should always be used in pairs (on opposite sides of an extrusion) so you will need to drill 2 such holes.  Once done, you can insert the connectors and bolt the extrusions together using preset nuts or square nuts.&lt;br /&gt;
&lt;br /&gt;
[[image:Butt_connector.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice that because of the way these connectors line up with the nuts they won&#039;t make a clean 90° corner.  This is why they are better suited for use in the middle of an extrusion somewhere to make a T junction.  For cleaner corners, we recommend you use the screw connectors instead.  &lt;br /&gt;
&lt;br /&gt;
===Cubic Connectors===&lt;br /&gt;
In addition to making 2D right angle corners, you may want to connect 3 extrusions together like in the corner of a cube.  For this, you will want to use the cubic connectors.  These connectors behave very much like screw connectors in that you must tap out the central hole on the end of the extrusion.  You will then also need to insert a bore reducing sleeve (included with the connector) into the hole which will allow you to bolt the connector on.  The PG30 variant requires an M12 tap while the PG40 variant requires an M14 tap.    &lt;br /&gt;
&lt;br /&gt;
[[image:Cubic_connector.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Linear Bar Connectors===&lt;br /&gt;
To join two extrusions together to make a longer extrusion you can use linear bar connectors.  They come in packages of 4 so that you can connect all 4 slots for strength but you could get away with just using 2 and it will be plenty strong.  We recommend not using 2 at the minimum though.  Nothing special needs to be done to prep the extrusions, you can simply slot the bar into the extrusions and tighten the set screws.  &lt;br /&gt;
&lt;br /&gt;
[[image:linear_connector.jpg|link=|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Anchor Connectors===&lt;br /&gt;
Anchor connectors are the only real option available for connecting extrusions at &#039;&#039;non&#039;&#039;-right angles.  While they can also connect extrusions at right angles, there are other connection methods that are better suited for this case.  To use an anchor connector you will need to drill a hole in the extrusion being butted up against the other.  For the PG30 variant it will need to be a 12mm hole, 21mm deep and 30mm from the end of the extrusions (measure from the center of the extrusion if you have cut it at an angle) and for the PG40 variant it will need to be a 15mm hole, 27mm deep and 32mm from the end of the extrusion.  Then, back out the hex head on the anchor so that it comes apart into two pieces:&lt;br /&gt;
&lt;br /&gt;
[[image:anchor_disassembled.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
The half with the hex head will insert into the hole you have drilled while the half with the actual anchor slides into the central hole in the profile of the extrusion.  Slide the pieces back together and tighten the hex head just enough that it bites and holds the halves together again.  You can now slide the pivoting head into the slot on your other extrusion and tighten the hex head to clamp the extrusions together.&lt;br /&gt;
&lt;br /&gt;
[[image:Anchor_install.png|center|1000px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Connecting Things to Extrusions==&lt;br /&gt;
T-Slot offers a convenient way to build frames for all manner of different applications.  None of that is useful of course if you can&#039;t easily mount things to that frame.  There are two main methods for attaching things to a frame.  You can either bolt it directly to the frame with a small bracket or plate that is bolted on with some form of nut, or alternatively use the slot profile reducers to insert a panel into the frame which you can then mount to.&lt;br /&gt;
&lt;br /&gt;
===Preset/Square/T Nuts===&lt;br /&gt;
Bolting something directly to the frame is the easiest method for attaching things to T-Slot structures.  There are 3 options for nuts that work with each series (PG20, 30, 40).  &lt;br /&gt;
&lt;br /&gt;
====Preset nuts====&lt;br /&gt;
The preset nut is shaped to fit loosely into the slot so it can slide back and forth into position but not turn.  This allows you to tighten the bolts to it with no fuss.  These are the fastest possible option, with a good combination of strength and ease of use.  Here is an example of an acrylic plate mounted to an extrusion with some preset nuts.  &lt;br /&gt;
&lt;br /&gt;
[[image:Preset_nut.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
One note on the bolts:  The size of bolt required is dictated by the size of hole in the nut being used obviously.  We have several bore sizes for each series of nut (20,30,40).  The length of the bolt though is the tricky part.  The bolt should &#039;&#039;not&#039;&#039; touch the extrusion at all, you want to make sure that the bolt is long enough to go through the object you are mounting on and sink into the nut far enough to get a strong connection but not so long that it sticks out the far side of the nut and digs into the aluminum as this will cause some wiggle in the mounting point.  For example, for the 5mm thick acrylic plate above M6x10mm bolts were used.  Since the nuts are about 6mm thick in the case of PG30 (which is what was used for this example) that lets the bolt go deep enough into the nut to be secure while still leaving about 1mm of clearance plus the distance between the nut and the extrusion.&lt;br /&gt;
&lt;br /&gt;
====Square nuts====&lt;br /&gt;
Square nuts behave in almost exactly the same way as preset nuts except that they require you to put the tension spring on them and slid into the profile a bit more carefully.  Technically the tensioner isn&#039;t totally necessary but it helps keep the nut in place while you are bolting to it.  It also allows you to bolt things to a vertical surface more easily.  See the preset nut section about the size and length of bolts you should use.&lt;br /&gt;
&lt;br /&gt;
[[image:Square_nut.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
====T nuts====&lt;br /&gt;
T nuts are the trickiest to use as well as the least secure of the 3 nut variants but in return they are the only one that can be used after the fact or on extrusions where the ends are not accessible for one reason or another.  The ability to install T nuts directly on the side of an extrusion is very useful.  They also allow you to disconnect a component quickly.  To use a T nut you should start by screwing it on to the object loosely.  Then orient the nuts so they are aligned and slot them into the extrusion.  Finally, carefully turn the bolt heads until the nut is turned 90 degrees and is seated in the extrusion.  Then tighten the bolts the rest of the way and you are done.  See the preset nut section about the size and length of bolts you should use.&lt;br /&gt;
&lt;br /&gt;
[[image:T_nut.png|link=|center|1200px]]&lt;br /&gt;
&lt;br /&gt;
===Profile Reducers and Panel Mounts===&lt;br /&gt;
The profile reducers are plastic inserts for the T-slot slots which allow you to put panels in your structure.  While the profile reducers grip surprisingly strong we still recommend you border the panel on at least 2 sides to ensure a secure hold though you could border the panel on all 4 sides if you wanted to be extra secure.  The profile reducers are simple to cut to length with side cutters or even a sharp utility knife and they slot into the extrusions with minimal effort.  They accept panels anywhere from 3-5mm in width.  Here is an example of an acrylic panel being used but you could use anything you&#039;d like (steel or aluminum plate, other types of plastic, even cardboard if you do desired).  &lt;br /&gt;
&lt;br /&gt;
[[image:Slot_reducers.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Feet and Castors===&lt;br /&gt;
In order to connect feet or castor wheels to your structure you will first have to install an adapter end plate.  This requires tapping the face of the extrusion with an M6 tap or M14 tap for the 40x40mm and 40x80mm profiles respectively.  These plates are only available for the PG40 series extrusions.  Once the plate it installed, the foot or castor will screw into the central hole.&lt;br /&gt;
&lt;br /&gt;
[[image:End_cap.png|center|link=|1200px]]&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=T-Slot_Guide&amp;diff=24442</id>
		<title>T-Slot Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=T-Slot_Guide&amp;diff=24442"/>
		<updated>2016-11-09T14:48:33Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|- valign=middle&lt;br /&gt;
| align=center width=300px| __TOC__ &lt;br /&gt;
| [[Image:tsl_header.jpg|500px|link=]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Primer]]&lt;br /&gt;
&lt;br /&gt;
T-Slot is a framing system composed of extruded aluminum profiles which use the namesake slot as a mounting point for various hardware components.  Phidgets carries three different series of T-Slot extrusions.  A 20mm, 30mm, and 40mm standard.  For each series we carry a single (20x20mm, 30x30mm, 40x40mm) and double (20x40mm, 30x60mm, 40x80mm) wide extrusion.  The series you end up using depends where on the weight vs. strength scale your project ends up falling.  Obviously the smaller extrusions will not be as strong and rigid as the larger extrusions.  The manufacturer provides equations for calculating how strong the extrusions are on pages 11 and 12 of their catalogue which can be found [{{SERVER}}/documentation/Modular_Assembly_System.pdf here].  The modulus of elasticity is listed as approximately 70,000N/mm².  The moment of inertia is listed under the specifications for the specific extrusion profile you are using.  With those two parameters you should be able to calculate with reasonable accuracy the relationship between force applied and resultant beam deflection.  &lt;br /&gt;
&lt;br /&gt;
The first thing you will need to do is cut the extrusions to length.  There are 2 ways to do with.  Either with a band saw or a chop saw with an appropriate blade (there are carbide blades designed for cutting aluminum).  Once your extrusions are cut down to size you will want to connect them together:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Connecting Extrusions Together==&lt;br /&gt;
In order for this whole system to be useful you need a way to combine individual extrusions into a more complicated structure.  There are a number of options available for this, each better suited for different situations.  &lt;br /&gt;
&lt;br /&gt;
===Screw Connectors===&lt;br /&gt;
These are the most basic form of connection.  A simple bolt that goes from one extrusion to the next.  In order to use a screw connector there are 2 prerequisite steps you must do before installing.  You need to tap the first extrusion with an appropriate tap for the series you are using (check the product page for the screw connector for which tap is required), and you need to drill a hole in the second extrusion big enough to allow Allen key access to the head of the screw connector.  For example, here is a piece of 30x60mm extrusion prepped for connecting:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screw_connector_prep.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
Once this is done you can screw the connector into the newly tapped extrusion.  When you get close to the end, slide the head of the connector into the slot on the other extrusion and tighten the rest of the way through the hole you drilled. &lt;br /&gt;
&lt;br /&gt;
[[image:Screw_connections.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
===Brackets===&lt;br /&gt;
The diecast aluminum as well as the T and L plate steel brackets allow you to strengthen joints that will experience particularly heavy loads.  You should always use them to reinforce joints which already use another type of connector rather than connecting the extrusions &#039;&#039;purely&#039;&#039; via the brackets.  For all three styles of bracket you will need a few nuts.  We recommend preset or square, the T nuts won&#039;t work well for this application.  Installation is fairly simple, you don&#039;t have to drill and preliminary holes or anything.  Just insert the nuts and bolt the brackets on.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:Tsl_brackets.png|link=|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
===Inner Brackets===&lt;br /&gt;
The inner brackets are a special variant of bracket that are different enough from the other brackets that they deserve their own section.  These brackets do not need to be used with other connection methods.  They are suitable by themselves (though you could use a reinforcement as well if you wanted to).  The one important distinction to make with these brackets is that there are two models of bracket, A and B.  The difference is that the set screw hole is slightly canted so that the set screw pushes the bracketed extrusion into the other extrusion to tighten the hold.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:inner_bracket_ab.jpg|center|700px|link=]]&lt;br /&gt;
&lt;br /&gt;
Notice how both brackets have the set screws canted towards the extrusion.  This way the extrusion you are connecting to this one will be pulled in towards it when the set screws are tightened.  The effect is small but important.  The left-hand bracket in this case is the A series while the right-hand one is the B series.  Here is a diagram showing which series is appropriate for which connection a bit more clearly:&lt;br /&gt;
&lt;br /&gt;
[[image:Inner_bracket_ab_diagram.png|center|600px|link=]]&lt;br /&gt;
&lt;br /&gt;
You should always use 2 inner brackets to connect 2 extrusions together.  &lt;br /&gt;
&lt;br /&gt;
[[image:TSL_90deg01_Small.jpg|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Butt Connectors===&lt;br /&gt;
These connectors are ideally suited to connecting an extrusion to the middle of another extrusion in a T junction.  They have a similar effect to the screw connectors but don&#039;t require access to the other side of the perpendicular extrusion (for example if you had another extrusion there already for a + configuration).  They can also be used with the plate brackets if you want an even stronger connection (but not the diecast brackets).  They do require that you drill a hole into the extrusion to use however.  Specifically 13mm hole, 11mm deep and 16mm in from the end of the extrusion for the PG30 variant and a 17mm hole, 14mm deep and 22mm in from the end of the extrusion for the PG40 variant.  These connectors should always be used in pairs (on opposite sides of an extrusion) so you will need to drill 2 such holes.  Once done, you can insert the connectors and bolt the extrusions together using preset nuts or square nuts.&lt;br /&gt;
&lt;br /&gt;
[[image:Butt_connector.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice that because of the way these connectors line up with the nuts they won&#039;t make a clean 90° corner.  This is why they are better suited for use in the middle of an extrusion somewhere to make a T junction.  For cleaner corners, we recommend you use the screw connectors instead.  &lt;br /&gt;
&lt;br /&gt;
===Cubic Connectors===&lt;br /&gt;
In addition to making 2D right angle corners, you may want to connect 3 extrusions together like in the corner of a cube.  For this, you will want to use the cubic connectors.  These connectors behave vary much like screw connectors in that you must tap out the central hole on the end of the extrusion.  You will then also need to insert a bore reducing sleeve (included with the connector) into the hole which will allow you to bolt the connector on.  The PG30 variant requires an M12 tap while the PG40 variant requires an M14 tap.    &lt;br /&gt;
&lt;br /&gt;
[[image:Cubic_connector.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Linear Bar Connectors===&lt;br /&gt;
To join two extrusions together to make a longer extrusion you can use linear bar connectors.  They come in packages of 4 so that you can connect all 4 slots for strength but you could get away with just using 2 and it will be plenty strong.  We recommend not using 2 at the minimum though.  Nothing special needs to be done to prep the extrusions, you can simply slot the bar into the extrusions and tighten the set screws.  &lt;br /&gt;
&lt;br /&gt;
[[image:linear_connector.jpg|link=|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Anchor Connectors===&lt;br /&gt;
Anchor connectors are the only real option available for connecting extrusions at &#039;&#039;non&#039;&#039;-right angles.  While they can also connect extrusions at right angles, there are other connection methods that are better suited for this case.  To use an anchor connector you will need to drill a hole in the extrusion being butted up against the other.  For the PG30 variant it will need to be a 12mm hole, 21mm deep and 30mm from the end of the extrusions (measure from the center of the extrusion if you have cut it at an angle) and for the PG40 variant it will need to be a 15mm hole, 27mm deep and 32mm from the end of the extrusion.  Then, back out the hex head on the anchor so that it comes apart into two pieces:&lt;br /&gt;
&lt;br /&gt;
[[image:anchor_disassembled.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
The half with the hex head will insert into the hole you have drilled while the half with the actual anchor slides into the central hole in the profile of the extrusion.  Slide the pieces back together and tighten the hex head just enough that it bites and holds the halves together again.  You can now slide the pivoting head into the slot on your other extrusion and tighten the hex head to clamp the extrusions together.&lt;br /&gt;
&lt;br /&gt;
[[image:Anchor_install.png|center|1000px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Connecting Things to Extrusions==&lt;br /&gt;
T-Slot offers a convenient way to build frames for all manner of different applications.  None of that is useful of course if you can&#039;t easily mount things to that frame.  There are two main methods for attaching things to a frame.  You can either bolt it directly to the frame with a small bracket or plate that is bolted on with some form of nut, or alternatively use the slot profile reducers to insert a panel into the frame which you can then mount to.&lt;br /&gt;
&lt;br /&gt;
===Preset/Square/T Nuts===&lt;br /&gt;
Bolting something directly to the frame is the easiest method for attaching things to T-Slot structures.  There are 3 options for nuts that work with each series (PG20, 30, 40).  &lt;br /&gt;
&lt;br /&gt;
====Preset nuts====&lt;br /&gt;
The preset nut is shaped to fit loosely into the slot so it can slide back and forth into position but not turn.  This allows you to tighten the bolts to it with no fuss.  These are the fastest possible option, with a good combination of strength and ease of use.  Here is an example of an acrylic plate mounted to an extrusion with some preset nuts.  &lt;br /&gt;
&lt;br /&gt;
[[image:Preset_nut.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
One note on the bolts:  The size of bolt required is dictated by the size of hole in the nut being used obviously.  We have several bore sizes for each series of nut (20,30,40).  The length of the bolt though is the tricky part.  The bolt should &#039;&#039;not&#039;&#039; touch the extrusion at all, you want to make sure that the bolt is long enough to go through the object you are mounting on and sink into the nut far enough to get a strong connection but not so long that it sticks out the far side of the nut and digs into the aluminum as this will cause some wiggle in the mounting point.  For example, for the 5mm thick acrylic plate above M6x10mm bolts were used.  Since the nuts are about 6mm thick in the case of PG30 (which is what was used for this example) that lets the bolt go deep enough into the nut to be secure while still leaving about 1mm of clearance plus the distance between the nut and the extrusion.&lt;br /&gt;
&lt;br /&gt;
====Square nuts====&lt;br /&gt;
Square nuts behave in almost exactly the same way as preset nuts except that they require you to put the tension spring on them and slid into the profile a bit more carefully.  Technically the tensioner isn&#039;t totally necessary but it helps keep the nut in place while you are bolting to it.  It also allows you to bolt things to a vertical surface more easily.  See the preset nut section about the size and length of bolts you should use.&lt;br /&gt;
&lt;br /&gt;
[[image:Square_nut.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
====T nuts====&lt;br /&gt;
T nuts are the trickiest to use as well as the least secure of the 3 nut variants but in return they are the only one that can be used after the fact or on extrusions where the ends are not accessible for one reason or another.  The ability to install T nuts directly on the side of an extrusion is very useful.  They also allow you to disconnect a component quickly.  To use a T nut you should start by screwing it on to the object loosely.  Then orient the nuts so they are aligned and slot them into the extrusion.  Finally, carefully turn the bolt heads until the nut is turned 90 degrees and is seated in the extrusion.  Then tighten the bolts the rest of the way and you are done.  See the preset nut section about the size and length of bolts you should use.&lt;br /&gt;
&lt;br /&gt;
[[image:T_nut.png|link=|center|1200px]]&lt;br /&gt;
&lt;br /&gt;
===Profile Reducers and Panel Mounts===&lt;br /&gt;
The profile reducers are plastic inserts for the T-slot slots which allow you to put panels in your structure.  While the profile reducers grip surprisingly strong we still recommend you border the panel on at least 2 sides to ensure a secure hold though you could border the panel on all 4 sides if you wanted to be extra secure.  The profile reducers are simple to cut to length with side cutters or even a sharp utility knife and they slot into the extrusions with minimal effort.  They accept panels anywhere from 3-5mm in width.  Here is an example of an acrylic panel being used but you could use anything you&#039;d like (steel or aluminum plate, other types of plastic, even cardboard if you do desired).  &lt;br /&gt;
&lt;br /&gt;
[[image:Slot_reducers.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Feet and Castors===&lt;br /&gt;
In order to connect feet or castor wheels to your structure you will first have to install an adapter end plate.  This requires tapping the face of the extrusion with an M6 tap or M14 tap for the 40x40mm and 40x80mm profiles respectively.  These plates are only available for the PG40 series extrusions.  Once the plate it installed, the foot or castor will screw into the central hole.&lt;br /&gt;
&lt;br /&gt;
[[image:End_cap.png|center|link=|1200px]]&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=T-Slot_Guide&amp;diff=24441</id>
		<title>T-Slot Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=T-Slot_Guide&amp;diff=24441"/>
		<updated>2016-11-09T14:48:07Z</updated>

		<summary type="html">&lt;p&gt;Burley: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|- valign=middle&lt;br /&gt;
| align=center width=300px| __TOC__ &lt;br /&gt;
| [[Image:tsl_header.jpg|500px|link=]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{category:Primer}}&lt;br /&gt;
&lt;br /&gt;
T-Slot is a framing system composed of extruded aluminum profiles which use the namesake slot as a mounting point for various hardware components.  Phidgets carries three different series of T-Slot extrusions.  A 20mm, 30mm, and 40mm standard.  For each series we carry a single (20x20mm, 30x30mm, 40x40mm) and double (20x40mm, 30x60mm, 40x80mm) wide extrusion.  The series you end up using depends where on the weight vs. strength scale your project ends up falling.  Obviously the smaller extrusions will not be as strong and rigid as the larger extrusions.  The manufacturer provides equations for calculating how strong the extrusions are on pages 11 and 12 of their catalogue which can be found [{{SERVER}}/documentation/Modular_Assembly_System.pdf here].  The modulus of elasticity is listed as approximately 70,000N/mm².  The moment of inertia is listed under the specifications for the specific extrusion profile you are using.  With those two parameters you should be able to calculate with reasonable accuracy the relationship between force applied and resultant beam deflection.  &lt;br /&gt;
&lt;br /&gt;
The first thing you will need to do is cut the extrusions to length.  There are 2 ways to do with.  Either with a band saw or a chop saw with an appropriate blade (there are carbide blades designed for cutting aluminum).  Once your extrusions are cut down to size you will want to connect them together:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Connecting Extrusions Together==&lt;br /&gt;
In order for this whole system to be useful you need a way to combine individual extrusions into a more complicated structure.  There are a number of options available for this, each better suited for different situations.  &lt;br /&gt;
&lt;br /&gt;
===Screw Connectors===&lt;br /&gt;
These are the most basic form of connection.  A simple bolt that goes from one extrusion to the next.  In order to use a screw connector there are 2 prerequisite steps you must do before installing.  You need to tap the first extrusion with an appropriate tap for the series you are using (check the product page for the screw connector for which tap is required), and you need to drill a hole in the second extrusion big enough to allow Allen key access to the head of the screw connector.  For example, here is a piece of 30x60mm extrusion prepped for connecting:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screw_connector_prep.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
Once this is done you can screw the connector into the newly tapped extrusion.  When you get close to the end, slide the head of the connector into the slot on the other extrusion and tighten the rest of the way through the hole you drilled. &lt;br /&gt;
&lt;br /&gt;
[[image:Screw_connections.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
===Brackets===&lt;br /&gt;
The diecast aluminum as well as the T and L plate steel brackets allow you to strengthen joints that will experience particularly heavy loads.  You should always use them to reinforce joints which already use another type of connector rather than connecting the extrusions &#039;&#039;purely&#039;&#039; via the brackets.  For all three styles of bracket you will need a few nuts.  We recommend preset or square, the T nuts won&#039;t work well for this application.  Installation is fairly simple, you don&#039;t have to drill and preliminary holes or anything.  Just insert the nuts and bolt the brackets on.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:Tsl_brackets.png|link=|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
===Inner Brackets===&lt;br /&gt;
The inner brackets are a special variant of bracket that are different enough from the other brackets that they deserve their own section.  These brackets do not need to be used with other connection methods.  They are suitable by themselves (though you could use a reinforcement as well if you wanted to).  The one important distinction to make with these brackets is that there are two models of bracket, A and B.  The difference is that the set screw hole is slightly canted so that the set screw pushes the bracketed extrusion into the other extrusion to tighten the hold.  For example:&lt;br /&gt;
&lt;br /&gt;
[[image:inner_bracket_ab.jpg|center|700px|link=]]&lt;br /&gt;
&lt;br /&gt;
Notice how both brackets have the set screws canted towards the extrusion.  This way the extrusion you are connecting to this one will be pulled in towards it when the set screws are tightened.  The effect is small but important.  The left-hand bracket in this case is the A series while the right-hand one is the B series.  Here is a diagram showing which series is appropriate for which connection a bit more clearly:&lt;br /&gt;
&lt;br /&gt;
[[image:Inner_bracket_ab_diagram.png|center|600px|link=]]&lt;br /&gt;
&lt;br /&gt;
You should always use 2 inner brackets to connect 2 extrusions together.  &lt;br /&gt;
&lt;br /&gt;
[[image:TSL_90deg01_Small.jpg|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Butt Connectors===&lt;br /&gt;
These connectors are ideally suited to connecting an extrusion to the middle of another extrusion in a T junction.  They have a similar effect to the screw connectors but don&#039;t require access to the other side of the perpendicular extrusion (for example if you had another extrusion there already for a + configuration).  They can also be used with the plate brackets if you want an even stronger connection (but not the diecast brackets).  They do require that you drill a hole into the extrusion to use however.  Specifically 13mm hole, 11mm deep and 16mm in from the end of the extrusion for the PG30 variant and a 17mm hole, 14mm deep and 22mm in from the end of the extrusion for the PG40 variant.  These connectors should always be used in pairs (on opposite sides of an extrusion) so you will need to drill 2 such holes.  Once done, you can insert the connectors and bolt the extrusions together using preset nuts or square nuts.&lt;br /&gt;
&lt;br /&gt;
[[image:Butt_connector.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice that because of the way these connectors line up with the nuts they won&#039;t make a clean 90° corner.  This is why they are better suited for use in the middle of an extrusion somewhere to make a T junction.  For cleaner corners, we recommend you use the screw connectors instead.  &lt;br /&gt;
&lt;br /&gt;
===Cubic Connectors===&lt;br /&gt;
In addition to making 2D right angle corners, you may want to connect 3 extrusions together like in the corner of a cube.  For this, you will want to use the cubic connectors.  These connectors behave vary much like screw connectors in that you must tap out the central hole on the end of the extrusion.  You will then also need to insert a bore reducing sleeve (included with the connector) into the hole which will allow you to bolt the connector on.  The PG30 variant requires an M12 tap while the PG40 variant requires an M14 tap.    &lt;br /&gt;
&lt;br /&gt;
[[image:Cubic_connector.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Linear Bar Connectors===&lt;br /&gt;
To join two extrusions together to make a longer extrusion you can use linear bar connectors.  They come in packages of 4 so that you can connect all 4 slots for strength but you could get away with just using 2 and it will be plenty strong.  We recommend not using 2 at the minimum though.  Nothing special needs to be done to prep the extrusions, you can simply slot the bar into the extrusions and tighten the set screws.  &lt;br /&gt;
&lt;br /&gt;
[[image:linear_connector.jpg|link=|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Anchor Connectors===&lt;br /&gt;
Anchor connectors are the only real option available for connecting extrusions at &#039;&#039;non&#039;&#039;-right angles.  While they can also connect extrusions at right angles, there are other connection methods that are better suited for this case.  To use an anchor connector you will need to drill a hole in the extrusion being butted up against the other.  For the PG30 variant it will need to be a 12mm hole, 21mm deep and 30mm from the end of the extrusions (measure from the center of the extrusion if you have cut it at an angle) and for the PG40 variant it will need to be a 15mm hole, 27mm deep and 32mm from the end of the extrusion.  Then, back out the hex head on the anchor so that it comes apart into two pieces:&lt;br /&gt;
&lt;br /&gt;
[[image:anchor_disassembled.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
The half with the hex head will insert into the hole you have drilled while the half with the actual anchor slides into the central hole in the profile of the extrusion.  Slide the pieces back together and tighten the hex head just enough that it bites and holds the halves together again.  You can now slide the pivoting head into the slot on your other extrusion and tighten the hex head to clamp the extrusions together.&lt;br /&gt;
&lt;br /&gt;
[[image:Anchor_install.png|center|1000px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Connecting Things to Extrusions==&lt;br /&gt;
T-Slot offers a convenient way to build frames for all manner of different applications.  None of that is useful of course if you can&#039;t easily mount things to that frame.  There are two main methods for attaching things to a frame.  You can either bolt it directly to the frame with a small bracket or plate that is bolted on with some form of nut, or alternatively use the slot profile reducers to insert a panel into the frame which you can then mount to.&lt;br /&gt;
&lt;br /&gt;
===Preset/Square/T Nuts===&lt;br /&gt;
Bolting something directly to the frame is the easiest method for attaching things to T-Slot structures.  There are 3 options for nuts that work with each series (PG20, 30, 40).  &lt;br /&gt;
&lt;br /&gt;
====Preset nuts====&lt;br /&gt;
The preset nut is shaped to fit loosely into the slot so it can slide back and forth into position but not turn.  This allows you to tighten the bolts to it with no fuss.  These are the fastest possible option, with a good combination of strength and ease of use.  Here is an example of an acrylic plate mounted to an extrusion with some preset nuts.  &lt;br /&gt;
&lt;br /&gt;
[[image:Preset_nut.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
One note on the bolts:  The size of bolt required is dictated by the size of hole in the nut being used obviously.  We have several bore sizes for each series of nut (20,30,40).  The length of the bolt though is the tricky part.  The bolt should &#039;&#039;not&#039;&#039; touch the extrusion at all, you want to make sure that the bolt is long enough to go through the object you are mounting on and sink into the nut far enough to get a strong connection but not so long that it sticks out the far side of the nut and digs into the aluminum as this will cause some wiggle in the mounting point.  For example, for the 5mm thick acrylic plate above M6x10mm bolts were used.  Since the nuts are about 6mm thick in the case of PG30 (which is what was used for this example) that lets the bolt go deep enough into the nut to be secure while still leaving about 1mm of clearance plus the distance between the nut and the extrusion.&lt;br /&gt;
&lt;br /&gt;
====Square nuts====&lt;br /&gt;
Square nuts behave in almost exactly the same way as preset nuts except that they require you to put the tension spring on them and slid into the profile a bit more carefully.  Technically the tensioner isn&#039;t totally necessary but it helps keep the nut in place while you are bolting to it.  It also allows you to bolt things to a vertical surface more easily.  See the preset nut section about the size and length of bolts you should use.&lt;br /&gt;
&lt;br /&gt;
[[image:Square_nut.png|center|link=|1200px]]&lt;br /&gt;
&lt;br /&gt;
====T nuts====&lt;br /&gt;
T nuts are the trickiest to use as well as the least secure of the 3 nut variants but in return they are the only one that can be used after the fact or on extrusions where the ends are not accessible for one reason or another.  The ability to install T nuts directly on the side of an extrusion is very useful.  They also allow you to disconnect a component quickly.  To use a T nut you should start by screwing it on to the object loosely.  Then orient the nuts so they are aligned and slot them into the extrusion.  Finally, carefully turn the bolt heads until the nut is turned 90 degrees and is seated in the extrusion.  Then tighten the bolts the rest of the way and you are done.  See the preset nut section about the size and length of bolts you should use.&lt;br /&gt;
&lt;br /&gt;
[[image:T_nut.png|link=|center|1200px]]&lt;br /&gt;
&lt;br /&gt;
===Profile Reducers and Panel Mounts===&lt;br /&gt;
The profile reducers are plastic inserts for the T-slot slots which allow you to put panels in your structure.  While the profile reducers grip surprisingly strong we still recommend you border the panel on at least 2 sides to ensure a secure hold though you could border the panel on all 4 sides if you wanted to be extra secure.  The profile reducers are simple to cut to length with side cutters or even a sharp utility knife and they slot into the extrusions with minimal effort.  They accept panels anywhere from 3-5mm in width.  Here is an example of an acrylic panel being used but you could use anything you&#039;d like (steel or aluminum plate, other types of plastic, even cardboard if you do desired).  &lt;br /&gt;
&lt;br /&gt;
[[image:Slot_reducers.png|center|link=|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Feet and Castors===&lt;br /&gt;
In order to connect feet or castor wheels to your structure you will first have to install an adapter end plate.  This requires tapping the face of the extrusion with an M6 tap or M14 tap for the 40x40mm and 40x80mm profiles respectively.  These plates are only available for the PG40 series extrusions.  Once the plate it installed, the foot or castor will screw into the central hole.&lt;br /&gt;
&lt;br /&gt;
[[image:End_cap.png|center|link=|1200px]]&lt;/div&gt;</summary>
		<author><name>Burley</name></author>
	</entry>
</feed>