The board is this one-
http://www.hobbytronics.co.uk/usb-host-joystick
If you use it, remember to set it to hex output. Much easier to read with an Arduino.
Code: Select all
#include <Wire.h>
#define baudRate 115200 // Serial port baud rate
#include <Servo.h>
#include "joystick.h"
Servo panservo;
Servo tiltservo;
Servo vertservo1;
Servo vertservo2;
Servo latservo;
Servo portaftservo;
Servo stbdaftservo;
Servo stbdfwdservo;
Servo portfwdservo;
Servo dimmer;
int hat = 0x0F;
int panvalue = 2500;
int panvaluescale;
int tiltvalue = 2500;
int tiltvaluescale;
int buttons_1_8 = 0;
int buttons_9_13 = 0;
int vertvalue1 = 127;
int vertvalue2 = 127;
int vertvalue1scale;
int vertvalue2scale;
int portaftvalue = 127;
int portaftvaluescale;
int stbdaftvalue = 127;
int stbdaftvaluescale;
int stbdfwdvalue = 127;
int stbdfwdvaluescale;
int portfwdvalue = 127;
int portfwdvaluescale;
int dimmervalue;
int dimmervaluescale;
int dimmerlatch = 0;
void setup() {
Serial.begin(baudRate);
panservo.attach(2);
tiltservo.attach(3);
vertservo1.attach(4);
vertservo2.attach(5);
portaftservo.attach(6);
stbdaftservo.attach(7);
portfwdservo.attach(8);
stbdfwdservo.attach(9);
//dimmer.attach(13);
panservo.write(89);
tiltservo.write(89);
vertservo1.write(89);
vertservo2.write(89);
portaftservo.write(89);
stbdaftservo.write(89);
portfwdservo.write(89);
stbdfwdservo.write(89);
delay(2000);
analogWrite(13, 255);
delay(200);
analogWrite(13, 0);
delay(200);
analogWrite(13, 255);
delay(200);
analogWrite(13, 0);
}
void loop() {
get_joystick();
if(joystick_ok==1)
{
vertvalue1 = (255 - joystick.slider);
vertvalue1scale = map(vertvalue1, 0, 255, 0, 179);
vertservo1.write(vertvalue1scale);
vertvalue2 = (255 - joystick.joystick_z);
vertvalue2scale = map(vertvalue2, 0, 255, 0, 179);
vertservo2.write(vertvalue2scale);
portaftvalue = (((joystick.joystick_rz) - (joystick.joystick_x) - (joystick.joystick_y)) + 255);
if (portaftvalue >= 255){
portaftvalue = 255;
}
if (portaftvalue <= 0){
portaftvalue = 0;
}
stbdaftvalue = (((joystick.joystick_x) - (joystick.joystick_y) - (joystick.joystick_rz)) + 255);
if (stbdaftvalue >= 255){
stbdaftvalue = 255;
}
if (stbdaftvalue <= 0){
stbdaftvalue = 0;
}
portfwdvalue = (((joystick.joystick_x) - (joystick.joystick_y) + (joystick.joystick_rz)));
if (portfwdvalue >= 255){
portfwdvalue = 255;
}
if (portfwdvalue <= 0){
portfwdvalue = 0;
}
stbdfwdvalue = (512 - ((joystick.joystick_x) + (joystick.joystick_y) + (joystick.joystick_rz)));
if (stbdfwdvalue >= 255){
stbdfwdvalue = 255;
}
if (stbdfwdvalue <= 0){
stbdfwdvalue = 0;
}
portaftvaluescale = map(portaftvalue, 0, 255, 0, 179);
portaftservo.write(portaftvaluescale);
stbdaftvaluescale = map(stbdaftvalue, 0, 255, 0, 179);
stbdaftservo.write(stbdaftvaluescale);
portfwdvaluescale = map(portfwdvalue, 0, 255, 0, 179);
portfwdservo.write(portfwdvaluescale);
stbdfwdvaluescale = map(stbdfwdvalue, 0, 255, 0, 179);
stbdfwdservo.write(stbdfwdvaluescale);
hat = joystick.hat;
if (hat == 0x06 or hat == 0x07 or hat == 0x08){
if (panvalue < 10000){
panvalue = panvalue + 1;
panvaluescale = map(panvalue, 0, 5000, 0, 179);
panservo.write(panvaluescale);
}
}
if (hat == 0x02 or hat == 0x03 or hat == 0x04){
if (panvalue > 0){
panvalue = panvalue - 1;
panvaluescale = map(panvalue, 0, 5000, 0, 179);
panservo.write(panvaluescale);
}
}
if (hat == 0x08 or hat == 0x01 or hat == 0x02){
if (tiltvalue < 4500){
tiltvalue = tiltvalue + 1;
tiltvaluescale = map(tiltvalue, 0, 5000, 0, 179);
tiltservo.write(tiltvaluescale);
}
}
if (hat == 0x04 or hat == 0x05 or hat == 0x06){
if (tiltvalue > 500){
tiltvalue = tiltvalue - 1;
tiltvaluescale = map(tiltvalue, 0, 5000, 0, 179);
tiltservo.write(tiltvaluescale);
}
}
buttons_1_8 = joystick.buttons_1_8;
if (bitRead(buttons_1_8, 0) == 1 and hat == 0x0F){
panvalue = 2500;
panvaluescale = map(panvalue, 0, 5000, 0, 179);
panservo.write(89);
tiltvalue = 2500;
tiltvaluescale = map(tiltvalue, 0, 5000, 0, 179);
tiltservo.write(89);
}
buttons_9_13 = joystick.buttons_9_13;
if ((bitRead(buttons_9_13, 3) == 1) and dimmerlatch == 0 and dimmervalue < 10){
dimmervalue = dimmervalue +1;
dimmervaluescale = map(dimmervalue, 0, 10, 0, 255);
analogWrite(13, dimmervaluescale);
dimmerlatch = 1;
}
if ((bitRead(buttons_9_13, 4) == 1) and dimmerlatch == 0 and dimmervalue > 0){
dimmervalue = dimmervalue -1;
dimmervaluescale = map(dimmervalue, 0, 10, 0, 255);
analogWrite(13, dimmervaluescale);
dimmerlatch = 1;
}
if (bitRead(buttons_9_13, 3) == 0 and bitRead(buttons_9_13, 4) == 0)
dimmerlatch = 0;
}
}