Generalized adaptation of the WiiChuk_compat library.

Fork of WiiChuk_compat by Greg Brush

Committer:
d34d
Date:
Fri Dec 19 18:10:44 2014 +0000
Revision:
1:a5dbc8a15c83
Child:
2:9c4ac1a64c30
Clean up this implementation so that it is more generic and can be used for just about any project where you need a Wii nunchuck.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
d34d 1:a5dbc8a15c83 1 /*
d34d 1:a5dbc8a15c83 2 * Copyright (c) 2011 Greg Brush
d34d 1:a5dbc8a15c83 3 *
d34d 1:a5dbc8a15c83 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
d34d 1:a5dbc8a15c83 5 * of this software and associated documentation files (the "Software"), to deal
d34d 1:a5dbc8a15c83 6 * in the Software without restriction, including without limitation the rights
d34d 1:a5dbc8a15c83 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
d34d 1:a5dbc8a15c83 8 * copies of the Software, and to permit persons to whom the Software is
d34d 1:a5dbc8a15c83 9 * furnished to do so, subject to the following conditions:
d34d 1:a5dbc8a15c83 10 *
d34d 1:a5dbc8a15c83 11 * The above copyright notice and this permission notice shall be included in
d34d 1:a5dbc8a15c83 12 * all copies or substantial portions of the Software.
d34d 1:a5dbc8a15c83 13 *
d34d 1:a5dbc8a15c83 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
d34d 1:a5dbc8a15c83 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
d34d 1:a5dbc8a15c83 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
d34d 1:a5dbc8a15c83 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
d34d 1:a5dbc8a15c83 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
d34d 1:a5dbc8a15c83 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
d34d 1:a5dbc8a15c83 20 * THE SOFTWARE.
d34d 1:a5dbc8a15c83 21 *
d34d 1:a5dbc8a15c83 22 * This code based on:
d34d 1:a5dbc8a15c83 23 * WiiChuck
d34d 1:a5dbc8a15c83 24 * http://mbed.org/users/FrankWeissenborn/libraries/WiiChuck/lnae1a
d34d 1:a5dbc8a15c83 25 * 2011-03-14
d34d 1:a5dbc8a15c83 26 * New initialization compatible with 3rd party controllers
d34d 1:a5dbc8a15c83 27 *
d34d 1:a5dbc8a15c83 28 */
d34d 1:a5dbc8a15c83 29
d34d 1:a5dbc8a15c83 30 #ifndef __WIICHUCK_H
d34d 1:a5dbc8a15c83 31 #define __WIICHUCK_H
d34d 1:a5dbc8a15c83 32
d34d 1:a5dbc8a15c83 33 #include "mbed.h"
d34d 1:a5dbc8a15c83 34
d34d 1:a5dbc8a15c83 35 #define NUNCHUCK_ADDR 0xA4 // 0x52 << 1
d34d 1:a5dbc8a15c83 36 #define NUNCHUCK_READLEN 0x06 //
d34d 1:a5dbc8a15c83 37 #define I2C_ACK 0
d34d 1:a5dbc8a15c83 38 #define I2C_READ_DELAY 0.0001
d34d 1:a5dbc8a15c83 39
d34d 1:a5dbc8a15c83 40 #define Joy_X 0
d34d 1:a5dbc8a15c83 41 #define Joy_Y 1
d34d 1:a5dbc8a15c83 42 #define Acc_X 2
d34d 1:a5dbc8a15c83 43 #define Acc_Y 3
d34d 1:a5dbc8a15c83 44 #define Acc_Z 4
d34d 1:a5dbc8a15c83 45 #define Button 5
d34d 1:a5dbc8a15c83 46
d34d 1:a5dbc8a15c83 47 // ----------------------------------------------------------------------------
d34d 1:a5dbc8a15c83 48 // Control values
d34d 1:a5dbc8a15c83 49 // ----------------------------------------------------------------------------
d34d 1:a5dbc8a15c83 50 #define BUTTON_PREV_VALUE '1'
d34d 1:a5dbc8a15c83 51 #define BUTTON_NEXT_VALUE '2'
d34d 1:a5dbc8a15c83 52 #define BUTTON_OK_VALUE '3'
d34d 1:a5dbc8a15c83 53 #define BUTTON_CANCEL_VALUE '4'
d34d 1:a5dbc8a15c83 54 #define BUTTON_RESET_VALUE 'r'
d34d 1:a5dbc8a15c83 55 #define BUTTON_VOLUME_PLUS '+'
d34d 1:a5dbc8a15c83 56 #define BUTTON_VOLUME_MINUS '-'
d34d 1:a5dbc8a15c83 57
d34d 1:a5dbc8a15c83 58 typedef struct nunchuck_data_s {
d34d 1:a5dbc8a15c83 59 uint8_t joyX;
d34d 1:a5dbc8a15c83 60 uint8_t joyY;
d34d 1:a5dbc8a15c83 61 uint16_t accX;
d34d 1:a5dbc8a15c83 62 uint16_t accY;
d34d 1:a5dbc8a15c83 63 uint16_t accZ;
d34d 1:a5dbc8a15c83 64 bool buttonC;
d34d 1:a5dbc8a15c83 65 bool buttonZ;
d34d 1:a5dbc8a15c83 66 } nunchuck_data_t;
d34d 1:a5dbc8a15c83 67
d34d 1:a5dbc8a15c83 68 typedef void(*pt2Func)(int);
d34d 1:a5dbc8a15c83 69
d34d 1:a5dbc8a15c83 70 class WiiChuck {
d34d 1:a5dbc8a15c83 71 public:
d34d 1:a5dbc8a15c83 72 bool Error;
d34d 1:a5dbc8a15c83 73 WiiChuck(PinName data, PinName clk);
d34d 1:a5dbc8a15c83 74 bool read(nunchuck_data_t* data);
d34d 1:a5dbc8a15c83 75 void start();
d34d 1:a5dbc8a15c83 76 void stop();
d34d 1:a5dbc8a15c83 77 void attach(pt2Func function);
d34d 1:a5dbc8a15c83 78 private:
d34d 1:a5dbc8a15c83 79 I2C _i2c;
d34d 1:a5dbc8a15c83 80 pt2Func _callback_input;
d34d 1:a5dbc8a15c83 81 Ticker _getValues;
d34d 1:a5dbc8a15c83 82 void getValues();
d34d 1:a5dbc8a15c83 83 bool _oldC;
d34d 1:a5dbc8a15c83 84 bool _oldZ;
d34d 1:a5dbc8a15c83 85 };
d34d 1:a5dbc8a15c83 86
d34d 1:a5dbc8a15c83 87 #endif