Added .ino file

main
thomasballantine 1 year ago
parent d388d116af
commit d0e08458f4

@ -0,0 +1,125 @@
/*
* AUTHOR: Thomas Ballantine
* Website: thomasballantine.com
* Licence: GNU Lesser General Public License v3.0
* Created: 19/05/2023
*
* A program to enable usage of a Nintendo Wii Nunchuk as a computer mouse
* All design and test carried out using an MKR1000 and 2 nunchuks, one genuine,
* one fake, on Arduino IDE 1.8.19
* For SAMD usage, roll back to Arduino SAMD boards 1.6.21 in board manager as per
* https://github.com/arduino/ArduinoCore-samd/issues/423
*
* Inspiration:
* https://www.raphnet.net/electronique/wusbmote/index_en.php
*
* Please get in touch if you make this spaghetti work better
* At present all values are hard coded, adjust as necessary for your needs
*
* TODO: Implement proper scrolling. Perhaps use accelerometer?
*/
#include <WiiChuck.h> //Can be found in Library manager
#include <Mouse.h> //Arduino builtin library
int mouse_x_axis = 0;
int mouse_y_axis = 0;
int flag_1 = 0;
int flag_z = 0;
int flag_c = 0;
//https://github.com/arduino/ArduinoCore-samd/issues/423 Must use Arduino SAMD boards 1.6.21 to compile
Accessory nunchuck;
void setup() {
Mouse.begin();
nunchuck.begin();
if (nunchuck.type == Unknown) {
nunchuck.type = NUNCHUCK;
}
}
void loop() {
nunchuck.readData(); // Read inputs
// Determining mouse movement amounts from joystick values
//Only 2 levels of speed here, nunchuk doesn't have great sensitivity
if (nunchuck.getJoyX() > 140) mouse_x_axis = 1;
if (nunchuck.getJoyX() > 170) mouse_x_axis = 3;
if (nunchuck.getJoyX() < 116) mouse_x_axis = -3;
if (nunchuck.getJoyX() < 88) mouse_x_axis = -1;
if (nunchuck.getJoyY() > 140) mouse_y_axis = -1;
if (nunchuck.getJoyY() > 170) mouse_y_axis = -3;
if (nunchuck.getJoyX() < 116) mouse_y_axis = 1;
if (nunchuck.getJoyY() < 88) mouse_y_axis = 3;
//Lots of ifs here, to set and unset the press/release flags
//Works much smoother than when it was using the mouse.click() method
if (nunchuck.getButtonZ() == 1 && nunchuck.getButtonC() == 0){
Mouse.press(MOUSE_RIGHT);
flag_z = 1;
if (flag_1 == 1){
Mouse.release(MOUSE_MIDDLE);
flag_1 = 0;
}
if (flag_c == 1){
Mouse.release();
flag_c = 0;
}
}
if (nunchuck.getButtonC() == 1 && nunchuck.getButtonZ() == 0){
Mouse.press();
flag_c = 1;
if (flag_1 == 1){
Mouse.release(MOUSE_MIDDLE);
flag_1 = 0;
}
if (flag_z == 1){
Mouse.release(MOUSE_RIGHT);
flag_z = 0;
}
}
if (nunchuck.getButtonC() == 1 && nunchuck.getButtonZ() == 1){
Mouse.press(MOUSE_MIDDLE);
flag_1 = 1;
if (flag_z == 1){
Mouse.release(MOUSE_RIGHT);
flag_z = 0;
}
if (flag_c == 1){
Mouse.release();
flag_c = 0;
}
}
if (nunchuck.getButtonC() == 0 && nunchuck.getButtonZ() == 0){
if (flag_1 == 1){
Mouse.release(MOUSE_MIDDLE);
flag_1 = 0;
}
if (flag_c == 1){
Mouse.release();
flag_c = 0;
}
if (flag_z == 1){
Mouse.release(MOUSE_RIGHT);
flag_z = 0;
}
}
Mouse.move(mouse_x_axis, mouse_y_axis,0); //sending mouse movement data
mouse_x_axis = 0; //resetting the mouse movements
mouse_y_axis = 0;
delay(5); // polling at about 200Hz, plenty fast enough for anyone
}
Loading…
Cancel
Save