Android Bluetooth joystick

Edit, problem solved, Thanks KAS for the time you have put in, I will upload a "dummy's guide" later in a bid to contribte : )

Glad you sorted it out Your contribution will be very welcome ;)

First of all thank you. It's really nice to see something this simple and well documented. I'll try it as soon as my exams are over. Referring back to an older post I believe as well that the addition of accelerometer to the available control options would be really nice. :)

Hi kovacsgellert, thanks for your comments

Referring back to an older post I believe as well that the addition of accelerometer to the available control options would be really nice. :)

I had the idea to develop an accelerometer based application, but it didn't generate enough interest here, to justify development time :~

HI,

I downloaded this sketch for my UNO R3 and have version 3.1 of BT Joystick Commander on a nexus tablet.

the Bluetooth connection works as follows:

pressing button 1 on the android produces button on, button off on the arduino serial terminal.

no other functions work..

Joystick data is displayed,on the android but not on the arduino terminal

i have read through the many threads on ths topic and see no obvious fixes for the joystick problem.

Please send suggestions.

Hi hib1,

I am currently on holydays and will be home next week In the meantime, please make sure you are using the latest AndroLED Arduino demo sketch (V10.2) modify:

boolean DEBUG = false;

to:

boolean DEBUG = true;

DEBUG can also be toggled using Button #2

Let me know the outcome

@all Merry Xmas :) :)

Great app KAS, bad thing is not working on IOIO board,just tested out :frowning: ,do u think in a future could make one to be IOIO otg compatible?..once again ,this app is the best,on Google Store :wink: Thank you

any chance that you can add a window to show the feed from a wifi camera? Then we will have the ultimate robot controller.

Hi juycce

do u think in a future could make one to be IOIO otg compatible?

Sorry, no experience yet with IOIO :~

this app is the best,on Google Store

Gracias :blush:

any chance that you can add a window to show the feed from a wifi camera? Then we will have the ultimate robot controller

:roll_eyes: :roll_eyes: :roll_eyes: that's a slightly more complex story ;)

any chance that you can add a window to show the feed from a wifi camera? Then we will have the ultimate robot controller

:roll_eyes: :roll_eyes: :roll_eyes: that's a slightly more complex story

OK Did some research, looks definitly doable I will order a Foscam IP camera which is well supported and documented

I already started development using another android device (Sony Xperia Mini) as an IP camera

Thanks tolisn63 for this smart idea, and... for keeping me busy ;)

Great news, if you want I can also test. I have a wanscam IP camera (similar to foscam)

Great news, if you want I can also test. I have a wanscam IP camera (similar to foscam)

Why not :)

This a screen shot of "Total RC Commander" V0.1B: The application is working but for the moment, the screen is optimized only for a 8" tablet I suspect the application needs at least 7" to display the information correctly sorry, no phones :~ :~

Do you have a tablet ?? Please let me have size and resolution

Wow, that was quick. Yes I do have a tablet. Nexus 7 (2012) 7" 1280*800

Let me have your email via PM

PM sent

Check your mail

Hi, kas! I am unable to implement your VERY COOL 8) app simply due to my inability to modify the Arduino sketch to meet my needs. I have little experience with microcontrollers, or in any programming in general, having started about 6 months ago with the Arduino, and have spent countless brain numbing hours since trying to understand basic sketch examples with little results. But I am very interested in figuring this out, as you mentioned in post #1, the possibilities are endless!

I have installed V.3.1 of your joystick app on my phone(samsung galaxy s3) and installed the v10.2 sketch from your post #99. I have the JY_MCU bluetooth module and everything seems to be communicating properly.

I wonder if you would consider my intentions, and provide some guidance on modifying the code/code snippets to ease me along?

My interest right now is simply to turn on and off three LEDs with the Android buttons(pressing Android button one turns on led1, press it again turns it off, same for button2 for led2 and button3 for led3) and drive one standard r/c servo both directions(CW, 0, CCW) using the joystick x axis. So far, I have been able to get some results with LEDs by using "digital.write" following several of the eight "case" statements, but for the most part the results are unreliable/unpredictable from what I expect. In viewing the serial monitor after my sketch modifications, I can not make sense of what is happening and why. I have not even attempted anything with the joystick, figured the LEDs would be easier first.

Many thanks for sharing your work, it is very nice!

I wonder if you would consider my intentions, and provide some guidance on modifying the code/code snippets to ease me along?

OK

First step

  1. Which Arduino board are you using ?

  2. download and run this sketch and confirm baurate + firmware version

// JY-MCU Bluetooth Dongle configurator
// Credit to Jeff Simpson

// Utility will display actual Baud rate and as an option, 
// set up a new Baud rate

// TX BT board pin to Arduino D2
// RX BT board pin to Arduino D3
// 5V BT board pin to Arduino 5V
// GND BT board pin to Arduino GND

#include "SoftwareSerial.h"

SoftwareSerial mySerial(2, 3);          // BlueTooth module TX RX
char response[21];                      // responses from module
int rv = 0;                             // return value
boolean found = false;                  // module found
int bps;

void setup()  {
  Serial.begin(57600);
  mySerial.begin(57600);
  delay(300);
  Serial.print("\n\nJY-MCU Bluetooth Dongle configurator ");
  Serial.print("\nSearching ");            // Search for BT module on 12 possible baudrates
  long baud[12] = {1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400};
  for(int a = 0; a < 12; a++)
  {  mySerial.begin(baud[a]);
     delay(300);
     mySerial.write("AT");               // "AT" will respond with "OK" if it is working
     delay(20);
     mySerial.readBytes(response, 2);
     delay(20);
     if (strncmp(response, "OK", 2) == 0)
     {  Serial.print("\nBluetooth Module found at BAUD ");
        Serial.println(baud[a]);
        found=true;
        break;
     } else  Serial.print(".");
  }
  if (found==false)
  { Serial.println("\nERROR: Bluetooth Module not responding!");
    Serial.println("Make sure there are no active bluetooth connection and try again");
    while(1);
  }
  
  delay(100);
  mySerial.write("AT+VERSION");           // Check the firmware version
  while(mySerial.available() == 0);
  mySerial.readBytes(response,2);
  if (strncmp(response, "OK", 2)==0)
  { rv = mySerial.readBytes(response, 20);
    response[rv] = 0;
    Serial.print("Firmware Version: ");
    Serial.println(response);
    Serial.println();
  }  else  {  
    Serial.println("Error checking BT Version");
    Serial.println();
    while(1);
  }

  while(Serial.available())   Serial.read();
  Serial.println("To modify Baud rate, enter:");  
  Serial.println("  1  for   1200 bps");  
  Serial.println("  2  for   2400 bps");  
  Serial.println("  3  for   4800 bps");  
  Serial.println("  4  for   9600 bps");  
  Serial.println("  5  for  19200 bps");  
  Serial.println("  6  for  38400 bps");  
  Serial.println("  7  for  57600 bps");  
  Serial.println("  0  to Exit\n");
  Serial.print("Selected: ");
  
  while(Serial.available()==0);
  bps = Serial.read();
  if(bps>=48 & bps<=56)  {    // '0' < bps < '8'
  Serial.println(bps-48);
    if(bps>48)  {
      mySerial.write("AT+BAUD");           // Set the BAUD
      mySerial.write(bps);
      while(mySerial.available()==0);
      mySerial.readBytes(response, 2);
      if (strncmp(response, "OK", 2)==0)  { 
        rv = mySerial.readBytes(response, 7);
        response[rv] = 0;
        Serial.print("New BAUD setting: ");
        Serial.println(response);
      }  else  {
        Serial.println("Error Setting BAUD");
        Serial.println(response);
      }
      Serial.println("Bluetooth Setup Completed  ** End **");
      while(1);
    }  else  {
      Serial.println("No modification  ** End **");
      while(1);
    }
  }
  else    Serial.println("non valid entry  ** End **");
}

void loop() { }

Exit code by pressing “0”

  1. for the good sake, confirm that the JY_MCU led changes from blinking to solid red when connecting within Android BT Joystick

hello, thanks kas for the help! :) ....If I could return the favor in any way...feel free to ask.

1) breadboarded UNO 2)yes, I previously did the BT configuration. Baudrate is 57600, firmware is limnor(?) 1.8. I used the openpilot sketch for the configuration if you are familiar. 3) yes the JY-MCU red led goes solid upon connection, I definitely have BT comms working.

since my last post......I have had some success with the led portion. I am able to turn on and off one led with button1 using the following code snippets. However, the operation of the green button indicator lights on the phone eludes me. I would expect the indicator to stay on as long as the ledpin is on, however it just lights briefly after I press the button. I'm sure this is exactly as the code intends, But I don't understand which portion of the sketch controls this.

I tried blindly playing with this line with no idea what I was doing: buttonStatus &= B0001;  including deleting it altogether, with no obvious affect on the operation. I can't figure out what action these lines in each of the case blocks perform .

this is the code I modified to some success. Is it reasonable?

int b1state=1

switch (buttonStatus) {
    case '1':
      buttonStatus &= B0001;          // Button_1: ON
      if (b1state==1){
      Serial.println("Button_1: ON");   
      digitalWrite(ledPin, HIGH);}
      if (b1state==0){
      Serial.println("Button_1: OFF");
      digitalWrite(ledPin,LOW);}
      b1state= 1- b1state;               // toggle led
      break;

forgot to mention that I also had to comment out the lines following "case 2" or else it would immediately turn the ledpin back off.

edited for clarity

Hi billcat

I finally could reproduce the problem, my fault :blush:
Please download and run attached sketch (V10.3)

  • button #1 controls on board LED (D13)
  • button #2 controls debug mode (output to Serial Monitor)
  • button #3 and #4 are just configured as push button (momentary contact)

Please let me know the outcome, especially for button #1

AndroLEDV10_3.ino (4.97 KB)