2013-01-17 00:07:56 +01:00
/*
Example sketch for the Wii libary showing the IR camera functionality . This example
is for the Bluetooth Wii library developed for the USB shield from Circuits @ Home
2013-11-15 19:05:25 +01:00
2013-07-18 19:43:21 +02:00
Created by Allan Glover and Kristian Lauszus .
Contact Kristian : http : //blog.tkjelectronics.dk/ or send an email at kristianl@tkjelectronics.com.
2013-01-17 00:07:56 +01:00
Contact Allan at adglover9 .81 @ gmail . com
2013-11-15 19:05:25 +01:00
To test the Wiimote IR camera , you will need access to an IR source . Sunlight will work but is not ideal .
2013-07-18 19:43:21 +02:00
The simpleist solution is to use the Wii sensor bar , i . e . emitter bar , supplied by the Wii system .
Otherwise , wire up a IR LED yourself .
2013-01-17 00:07:56 +01:00
*/
# include <Wii.h>
2013-08-13 21:31:52 +02:00
# include <usbhub.h>
2013-12-05 03:56:06 +01:00
// Satisfy IDE, which only needs to see the include statment in the ino.
# ifdef dobogusinclude
# include <spi4teensy3.h>
# endif
2013-08-13 21:31:52 +02:00
2013-01-17 00:47:38 +01:00
# ifndef WIICAMERA // Used to check if WIICAMERA is defined
2013-12-30 16:19:34 +01:00
# error "Please set ENABLE_WII_IR_CAMERA to 1 in settings.h"
2013-01-17 00:47:38 +01:00
# endif
2013-08-13 21:31:52 +02:00
2013-01-17 00:07:56 +01:00
USB Usb ;
2013-11-24 15:17:19 +01:00
//USBHub Hub1(&Usb); // Some dongles have a hub inside
2013-01-17 00:07:56 +01:00
BTD Btd ( & Usb ) ; // You have to create the Bluetooth Dongle instance like so
/* You can create the instance of the class in two ways */
2013-11-15 19:05:25 +01:00
WII Wii ( & Btd , PAIR ) ; // This will start an inquiry and then pair with your Wiimote - you only have to do this once
2013-07-18 19:43:21 +02:00
//WII Wii(&Btd); // After the Wiimote pairs once with the line of code above, you can simply create the instance like so and re upload and then press any button on the Wiimote
2013-01-17 00:07:56 +01:00
2013-01-23 22:28:40 +01:00
bool printAngle ;
uint8_t printObjects ;
2013-01-17 00:07:56 +01:00
void setup ( ) {
Serial . begin ( 115200 ) ;
2013-10-21 19:58:03 +02:00
while ( ! Serial ) ; // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
2013-01-17 00:07:56 +01:00
if ( Usb . Init ( ) = = - 1 ) {
Serial . print ( F ( " \r \n OSC did not start " ) ) ;
2013-11-15 19:05:25 +01:00
while ( 1 ) ; //halt
2013-01-17 00:07:56 +01:00
}
Serial . print ( F ( " \r \n Wiimote Bluetooth Library Started " ) ) ;
}
void loop ( ) {
Usb . Task ( ) ;
2013-11-15 19:05:25 +01:00
if ( Wii . wiimoteConnected ) {
if ( Wii . getButtonClick ( HOME ) ) { // You can use getButtonPress to see if the button is held down
2013-01-17 00:07:56 +01:00
Serial . print ( F ( " \r \n HOME " ) ) ;
2013-01-23 22:47:47 +01:00
Wii . disconnect ( ) ;
}
2013-01-17 00:07:56 +01:00
else {
2013-11-15 19:05:25 +01:00
if ( Wii . getButtonClick ( ONE ) )
2013-01-17 00:07:56 +01:00
Wii . IRinitialize ( ) ; // Run the initialisation sequence
2013-11-15 19:05:25 +01:00
if ( Wii . getButtonClick ( MINUS ) | | Wii . getButtonClick ( PLUS ) ) {
if ( ! Wii . isIRCameraEnabled ( ) )
2013-01-23 22:28:40 +01:00
Serial . print ( F ( " \r \n Enable IR camera first " ) ) ;
else {
2013-11-15 19:05:25 +01:00
if ( Wii . getButtonPress ( MINUS ) ) { // getButtonClick will only return true once
if ( printObjects > 0 )
printObjects - - ;
2013-01-24 00:21:59 +01:00
}
else {
2013-11-15 19:05:25 +01:00
if ( printObjects < 4 )
2013-01-24 00:21:59 +01:00
printObjects + + ;
}
Serial . print ( F ( " \r \n Tracking " ) ) ;
Serial . print ( printObjects ) ;
Serial . print ( F ( " objects " ) ) ;
2013-01-23 22:28:40 +01:00
}
}
2013-11-15 19:05:25 +01:00
if ( Wii . getButtonClick ( A ) ) {
2013-01-23 22:28:40 +01:00
printAngle = ! printAngle ;
Serial . print ( F ( " \r \n A " ) ) ;
2013-01-17 00:07:56 +01:00
}
2013-11-15 19:05:25 +01:00
if ( Wii . getButtonClick ( B ) ) {
2013-01-23 22:28:40 +01:00
Serial . print ( F ( " \r \n Battery level: " ) ) ;
Serial . print ( Wii . getBatteryLevel ( ) ) ; // You can get the battery level as well
2013-01-17 00:07:56 +01:00
}
}
2013-11-15 19:05:25 +01:00
if ( printObjects > 0 ) {
if ( Wii . getIRx1 ( ) ! = 0x3FF | | Wii . getIRy1 ( ) ! = 0x3FF | | Wii . getIRs1 ( ) ! = 0 ) { // Only print if the IR camera is actually seeing something
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \r \n x1: " ) ) ;
2013-11-15 19:05:25 +01:00
Serial . print ( Wii . getIRx1 ( ) ) ;
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \t y1: " ) ) ;
2013-11-15 19:05:25 +01:00
Serial . print ( Wii . getIRy1 ( ) ) ;
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \t s1: " ) ) ;
Serial . print ( Wii . getIRs1 ( ) ) ;
}
2013-11-15 19:05:25 +01:00
if ( printObjects > 1 ) {
if ( Wii . getIRx2 ( ) ! = 0x3FF | | Wii . getIRy2 ( ) ! = 0x3FF | | Wii . getIRs2 ( ) ! = 0 ) {
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \r \n x2: " ) ) ;
2013-11-15 19:05:25 +01:00
Serial . print ( Wii . getIRx2 ( ) ) ;
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \t y2: " ) ) ;
2013-11-15 19:05:25 +01:00
Serial . print ( Wii . getIRy2 ( ) ) ;
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \t s2: " ) ) ;
Serial . print ( Wii . getIRs2 ( ) ) ;
}
2013-11-15 19:05:25 +01:00
if ( printObjects > 2 ) {
if ( Wii . getIRx3 ( ) ! = 0x3FF | | Wii . getIRy3 ( ) ! = 0x3FF | | Wii . getIRs3 ( ) ! = 0 ) {
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \r \n x3: " ) ) ;
2013-11-15 19:05:25 +01:00
Serial . print ( Wii . getIRx3 ( ) ) ;
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \t y3: " ) ) ;
2013-11-15 19:05:25 +01:00
Serial . print ( Wii . getIRy3 ( ) ) ;
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \t s3: " ) ) ;
Serial . print ( Wii . getIRs3 ( ) ) ;
}
2013-11-15 19:05:25 +01:00
if ( printObjects > 3 ) {
if ( Wii . getIRx4 ( ) ! = 0x3FF | | Wii . getIRy4 ( ) ! = 0x3FF | | Wii . getIRs4 ( ) ! = 0 ) {
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \r \n x4: " ) ) ;
2013-11-15 19:05:25 +01:00
Serial . print ( Wii . getIRx4 ( ) ) ;
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \t y4: " ) ) ;
2013-11-15 19:05:25 +01:00
Serial . print ( Wii . getIRy4 ( ) ) ;
2013-01-24 00:21:59 +01:00
Serial . print ( F ( " \t s4: " ) ) ;
Serial . print ( Wii . getIRs4 ( ) ) ;
}
2013-01-23 22:28:40 +01:00
}
}
}
2013-11-15 19:05:25 +01:00
}
if ( printAngle ) { // There is no extension bytes available, so the MotionPlus or Nunchuck can't be read
2013-01-23 22:28:40 +01:00
Serial . print ( F ( " \r \n Pitch: " ) ) ;
Serial . print ( Wii . getPitch ( ) ) ;
Serial . print ( F ( " \t Roll: " ) ) ;
Serial . print ( Wii . getRoll ( ) ) ;
2013-01-17 00:07:56 +01:00
}
}
}