Show Posts
Pages: 1 2 3 [4] 5 6 ... 26
46  Community / Exhibition / Gallery / Re: Android controlled RC tank with on-board Video on: June 01, 2014, 10:11:11 am
Quote
Also there is a flasing indicator(red-blue) in the mini router
That's good new

Go back to your Mini router web configuration pages
LAN/setup
LAN IP address
change 192.168.100.1  to 192.168.1.1
47  Using Arduino / Networking, Protocols, and Devices / BT card configuration for dummies on: June 01, 2014, 03:39:31 am
Quote
Please show me the way to check and configure my bluetooth card
thanks, Christian

Bluetooth cards come in a many flavors HC-05, HC-06, HC-07, HC-08 ...

I personally own an HC-06


and an a convenient Arduino/HC-05 combo



Configuration methods are quite different according to board type

For 57600 bps setup:
Code:
HC-05:        AT+UART=57600,0,0\r\n        (with linefeed + return)
HC-06:        AT+BAUD7                     (w/o linefeed + return)
The all point is to access the board configuration mode
My HC-05 board has a built in switch + reset button for easy operation (see above)

Arduino member Nick_Pyner has produced a very interesting document, I learned a lot from it
Don't forget to increase Nick's Karma by hitting the green "+" sign below his name

Complete AT command set:
HC-05
HC-06

Further readings here

Finally, I attach two sketches for configuring HC-05 and HC-06 boards


Enjoy the fascinating Bluetooth universe  smiley-wink


@all
Feel free to post your personal experience and additional links

48  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 31, 2014, 05:56:25 am
@n3kx
Quote
My problem was in bautrate
Glad it finally works  smiley


Quote
and also you must press 3.rd button to get work .... so you overwrite setbuttonfeedback=false to  setbuttonfeedback=true and it work for my
smiley-roll-blue smiley-roll-blue smiley-roll-blue   setButtonFeedback was created for handling push buttons
This is a flag to send an earlier feed back to Android, for a consistent visual effect
setButtonFeedback is reset to False with each sendBlueToothData() call:
Code:
 if(setButtonFeedback == true)  {                      // allow momentary button visual effect
    previousMillis = currentMillis + 250;  
    setButtonFeedback = false;
  }
This code snippet could be safely omitted (will be removed in next release):

setButtonFeedback is misplaced and should be moved from Button #3 to Button #5 (push button)
I edited accordingly AndroTest V1.4 in response #212

49  Community / Exhibition / Gallery / Re: Android controlled RC tank with on-board Video on: May 31, 2014, 05:52:07 am
@tolisn63
Quote
This just came in. Ho do you go about configuring it to use with the camera and what would the URL be so it can be inserted into the application ?

Connect the camera (ethernet cable)
The router will appear as MIFI-XXXX in your available wireless network listing, along with your home network and your neibourgh's
Connect to MIFI-XXXX default password: 1234567890
To access the router home page, type 192.168.100.1 in your browser

Use your Wanscam Search tool to detect your camera, should be 192.168.1.XX5
Make sure the camera address is static and voilà   smiley-wink

You can access the camera from Total RC Commander using the same settings as for your home router, nothing to change within the App

Did you receive an operator manual with the router ??

50  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 30, 2014, 04:58:42 am

For those who still have a Bluetooth card configured @9600bps, please add a one millisecond delay after the second "while(mySerial.available())"

Code:
void loop() {
  if(mySerial.available())  {
    delay(2);
    cmd[0] =  mySerial.read();  
    if(cmd[0] == STX)  {
      i=1;      
      while(mySerial.available())  {
     delay(1);                     //  <<mod     <-------------<<<
        cmd[i] = mySerial.read();
        ...........
 
}
 
This will prevent  while(mySerial.available())  to return before the complete data frame is received
I have modified AndroTest V1.4 to reflect this modification (now Version 1.41)

I only work @57600bps and never bothered checking lower data speeds  smiley-red
Thanks Topicja for bringing this point to my attention

A sweet thought for the Microsoft developers who deal with thousands different hardware configurations and get bashed by users because...  "it doesn't work on MY specific setup"   smiley-wink
51  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 29, 2014, 10:39:51 am
@Topicja
Quote
I could recompile V3.1, but it makes much more sense to have your own program fixed and working
Joystick transmission has not been modified and should work, does it??
Please let me have your original Arduino sketch, I will fix it for you
I will send you the modified sketch tomorrow evening
There are too many transmission errors at 9600 bps
Please, in the meantime, configure your BT card at 57600 bps

Are you able to do it by yourself ??
Otherwise, let me have a link to your specific model
52  Using Arduino / Networking, Protocols, and Devices / Joystick bluetooth Commander - older version on: May 29, 2014, 12:29:44 am
@Topicja
Quote
Hi Kas
I really like your excellent android app but after last update i cannot get it to work. I tried to rewrite my program but i don't receive any data. Could you please send me apk file of older version? Version 3.1 was working well for me. My e-mail address is xxxxxxxx@xxx.com

Thank you for your response and your willingness

I could recompile V3.1, but it makes much more sense to have your own program fixed and working
Joystick transmission has not been modified and should work, does it??
Please let me have your original Arduino sketch, I will fix it for you


@all
Should you encounter same difficulties, please contact me via PM

53  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 28, 2014, 12:05:44 pm
Quote
This version V4.1 works fine.
Wherever you touch on the yellow spot is returned as coordinate 0,0 (x,y) which is exactly what I was looking for.
No jumpy servos anymore. - Many thanks
Thanks, I will include this feature in V5.0 (pure ASCII protocol)

Quote
1. As information can be sent from Arduino to Android, is it possible to use the Android like a Serial monitor to display this information with rolling values - just like the USB to computer screen. You could give the option to change from Joystick to Monitor to make space on the Android screen.
Android Bluetooth joystick is a small footprint App (78Ko), its only task is to emulate a joystick  smiley-wink
There are very good App for serial monitoring, BlueTerm is one of those

Quote
My Samsung GT-S5570 phone won't recognise the HC-05 so I can't test on mobile phone
Try sending AT command
Code:
AT+CLASS=1
Should work
54  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 28, 2014, 02:59:19 am
Quote
I addressed the situation  smiley-wink
Please let me have your email via PM, I will send you V4.1 for testing

Check your mail ...
55  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 27, 2014, 12:13:01 pm
@ Bob1943

Quote
Quote
3. When you first touch the yellow joystick dot, it immediately moves to the centre of the touch point. This changes the xy numbers – most noticeable when you touch the edge. (I want to control two servos but don’t want them to move until the joystick is moved intentionally).
Can the touch point be recognised without moving the yellow dot?
I understand your concern, makes sense, let me think about it...

I addressed the situation  smiley-wink
Please let me have your email via PM, I will send you V4.1 for testing
56  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 26, 2014, 08:37:42 am
Quote
The swipe-to-close feature is about 40 seconds into video at this site:
http://blog.laptopmag.com/9-awesome-android-ice-cream-sandwich-tips
This method is what was causing problem about no data from Arduino to Android. I wonder if this happens with other users?
I can't replicate the "swipe" problem both on Galaxy Tab3 tablet and Motorola G phone (V4.4.2)
Please let me have a step by step procedure
57  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 25, 2014, 12:23:03 pm
Quote
2. In the Android app can you recognise when the app has been closed ‘illegally’ and act upon that action next time the app is opened. Might make it idiot proof.
Not sure to understand, please clarify "This allows Apps to be closed by swiping the minimized app icon off the screen"

Quote
Can the touch point be recognised without moving the yellow dot?
I understand your concern, makes sense, let me think about it...

Quote
4. What do I need to change to alter the data fields fed back to the Android and can it be coded in “Your code here” areas in the Arduino sketch.
I am doing number crunching on Arduino from Joystick positions and would like to send three values back to android.
To send back three values to Android (data_1, data_2,data_3,)  just modify sendBlueToothData()

Code:
void sendBlueToothData()  {

    ......................
    ......................

    mySerial.print((char)0x2);                                                 // Start of Transmission
    mySerial.print(getButtonStatusString());      mySerial.print((char)0x1);   // buttons status feedback
    mySerial.print(data_1);                       mySerial.print((char)0x4);   // datafield #1
    mySerial.print(data_2);                       mySerial.print((char)0x5);   // datafield #2
    mySerial.print(data_3);                                                    // datafield #3
    mySerial.print((char)0x3);                                                 // End of Transmission
  }  
}
58  Using Arduino / Networking, Protocols, and Devices / ** AndroTest.ino V1.41 ** on: May 25, 2014, 12:00:56 pm
Here it is

Code:
#define VERSION     "\n\nAndroTest V1.41 - @kas2014\ndemo for V4.X  (6 button version)"

// V1.41 minor modifications
// V1.4  improved communication errors handling
// V1.3  renamed for publishing, posted on 09/05/2014
// V1.2  Text display   ** not backward compatible **
// V1.1  Integer display
// V1.0  6 buttons + 4 data char implemented

// Demo setup:
// Button #1 controls pin13 LED
// Button #2 starts DEBUG
// Button #3 displays demo message
// Button #4 toggle datafield display rate
// Button #5 configured as "push" button (momentary)

// Arduino pin#2 to TX BlueTooth module
// Arduino pin#3 to RX BlueTooth module
// make sure your BT board is set @57600 bps
// better remove SoftSerial for PWM based projects

// For Mega 2560:
// remove   #include "SoftwareSerial.h", SoftwareSerial mySerial(2,3);
// search/replace  mySerial  >> Serial1
// pin#18 to RX bluetooth module, pin#19 to TX bluetooth module

#include "SoftwareSerial.h"

#define    STX          0x01
#define    ETX          0x00
#define    ledPin       13
#define    SLOW         1000                           // Datafields refresh rate (ms)
#define    FAST         250                            // Datafields refresh rate (ms)

SoftwareSerial mySerial(2,3);                           // BlueTooth module: pin#2=TX pin#3=RX
int i=0;
byte cmd[6] = {0, 0, 0, 0, 0, 0};                       // bytes received
byte buttonStatus = 0;                                  // first Byte sent to Android device
long previousMillis = 0;                                // will store last time Buttons status was updated
boolean setButtonFeedback = false;                      // momentary buttons feedback to Android device
long sendInterval = SLOW;                               // interval between Buttons status transmission (milliseconds)
String displayStatus = "xxxx";                          // message to Android device

void setup()  {
  Serial.begin(57600);
  mySerial.begin(57600);                                // 57600 = max value for softserial
  pinMode(ledPin, OUTPUT);    
  Serial.println(VERSION);
  while(mySerial.available())  mySerial.read();         // empty RX buffer    //  <<mod XXXXXXXX
}

void loop() {
  if(mySerial.available())  {                            // data received from smartphone
    delay(2);                                                              //  <<mod XXXXXXXX
    cmd[0] =  mySerial.read();  
    if(cmd[0] == STX)  {
      i=1;      
      while(mySerial.available())  {
        delay(1);                                                          //  <<mod XXXXXXXX
        cmd[i] = mySerial.read();
        if(cmd[i]>127 || i>5)                               break;   // Communication error << XXX Mod
        if((cmd[i]==ETX) && ((i==2 && cmd[1]>2) || i==5))   break;   // Button or Joystick data
        i++;
      }
      if     (i==2 && cmd[1]>48 && cmd[1]<68)     getButtonState(cmd[1]);                         // 3 Bytes
      else if(i==5 && cmd[1]<3  && cmd[3]<3 )     getJoystickState(cmd);                          // 6 Bytes
    }
  }
  sendBlueToothData();                                                       //  <<mod XXXXXXXX
//    delay(5);                                                              //  <<mod XXXXXXXX
// your code here
}

void sendBlueToothData()  {
  static long previousMillis = 0;                            
  long currentMillis = millis();
  if(setButtonFeedback == true)  {                      // allow momentary button visual effect
    previousMillis = currentMillis + 250;  
    setButtonFeedback = false;
  }
  if(currentMillis - previousMillis > sendInterval) {   // send data to smartphone
    previousMillis = currentMillis;

// Data frame transmitted back from Arduino to Android device:
// < 0X02   Buttons state   0X01   DataField#1   0x04   DataField#2   0x05   DataField#3    0x03 >  
// < 0X02       01011       0X01      120.00     0x04      -4500      0x05   Motor enabled  0x03 >    // example

    mySerial.print((char)0x2);                                                 // Start of Transmission
    mySerial.print(getButtonStatusString());      mySerial.print((char)0x1);   // buttons status feedback
    mySerial.print(GetDataField_1_int());         mySerial.print((char)0x4);   // datafield #1
    mySerial.print(GetDataField_2_float());       mySerial.print((char)0x5);   // datafield #2
    mySerial.print(displayStatus);                                             // datafield #3
    mySerial.print((char)0x3);                                                 // End of Transmission
  }  
}

String getButtonStatusString()  {
  String bStatus = "";
  for(int i=0; i<6; i++)  {
    if(buttonStatus & (B100000 >>i))      bStatus += "1";
    else                                  bStatus += "0";
  }
  return bStatus;
}

int GetDataField_1_int()  {            // Data dummy values sent to Android device for demo purpose
  static int i= -30;                   // Replace with your own code
  i ++;
  if(i >0)    i = -3000;
  return i;  
}

float GetDataField_2_float()  {       // Data dummy values sent to Android device for demo purpose
  static float i=50;                  // Replace with your own code
  i-=.5;
  if(i <-50)    i = 50;
  return i;  
}

void getJoystickState(byte data[6])    {                             //  <<mod XXXXXXXX   nasty bug, was byte data[5]
  int joyX = (data[1]<<7) + data[2];
  int joyY = (data[3]<<7) + data[4];
  joyX = joyX - 200;                                            // Offset to avoid
  joyY = joyY - 200;                                            // transmitting negative numbers
  if(joyX<-100 || joyX>100 || joyY<-100 || joyY>100)    return; // commmunication error
  
  Serial.print("Joystick position:  ");
  Serial.print(joyX); Serial.print(", "); Serial.println(joyY);
    
// Your code here ...
}

void getButtonState(int bStatus)  {
  switch (bStatus) {
// -----------------  BUTTON #1  -----------------------
    case '1':
      buttonStatus |= B000001;        // ON
      Serial.println("\n** Button_1: ON **");    // your code here...
      displayStatus = "LED <ON>";
      Serial.println(displayStatus);
      digitalWrite(ledPin, HIGH);
      break;
    case '2':
      buttonStatus &= B111110;        // OFF
      Serial.println("\n** Button_1: OFF **");    // your code here...
      displayStatus = "LED <OFF>";
      Serial.println(displayStatus);
      digitalWrite(ledPin, LOW);
      break;
// -----------------  BUTTON #2  -----------------------
    case '3':
      buttonStatus |= B000010;        // ON
      Serial.println("\n** Button_2: ON **");    // your code here...
      break;
    case '4':
      buttonStatus &= B111101;        // OFF
      Serial.println("\n** Button_2: OFF **");    // your code here...
      break;
// -----------------  BUTTON #3  -----------------------
    case '5':
      buttonStatus |= B000100;        // ON
     // setButtonFeedback = true;            moved to button #5 (for push buttons)
      Serial.println("\n** Button_3: ON **");    // your code here...
      displayStatus = "Motor #1 enabled"; // Demo text message
      Serial.println(displayStatus);
      break;
    case '6':
      buttonStatus &= B111011;      // OFF
      Serial.println("\n** Button_3: OFF **");    // your code here...
      displayStatus = "Motor #1 stopped";
      Serial.println(displayStatus);
      break;
// -----------------  BUTTON #4  -----------------------
    case '7':
      buttonStatus |= B001000;       // ON
      Serial.println("\n** Button_4: ON **");    // your code here...
      displayStatus = "Datafield update <FAST>";
      Serial.println(displayStatus);
      sendInterval = FAST;
      break;
    case '8':
      buttonStatus &= B110111;    // OFF
      Serial.println("\n** Button_4: OFF **");    // your code here...
      displayStatus = "Datafield update <SLOW>";
      Serial.println(displayStatus);
      sendInterval = SLOW;
     break;
// -----------------  BUTTON #5  -----------------------
    case '9':           // configured as momentary button
//      buttonStatus |= B010000;        // ON
      setButtonFeedback = true;                     // moved from button #3
      Serial.println("\n** Button_5: + pushed + **"); // your code here...
      displayStatus = "Button_5: ++ pushed ++";
      break;
//   case 'A':
//     buttonStatus &= B101111;        // OFF
//     break;
// -----------------  BUTTON #6  -----------------------
    case 'B':
      buttonStatus |= B100000;        // ON
      Serial.println("\n** Button_6: ON **");    // your code here...
       displayStatus = "Button #6 ON"; // Demo text message
     break;
    case 'C':
      buttonStatus &= B011111;        // OFF
      Serial.println("\n** Button_6: OFF **");    // your code here...
      displayStatus = "Button #6 OFF";
      break;
// -----------------------------------------------------
  }
}

EDIT: moved       setButtonFeedback        from button #3 to button #5 (push button)
          Added 1ms delay after while(mySerial.available())
          Renamed to AndroTest V1.41        see Reply #225

59  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 25, 2014, 01:58:58 am
Quote
Data flow from Arduino to Android problem SOLVED
.....
It is great to see the care and level of attention that you provide to the users of your App.
Again many thanks - Brilliant App
Bob
Thanks Bob for the good new and the kind words  smiley-cool

I am investing time because this App should bring a lot to the Arduino community
It is a universal remote for most projects, using wide spread (Android) technologies.
I told my friend to download the App and within a minute he took control of my RC tank
He was rather impressed  smiley-eek smiley-eek smiley-eek

During my support session, I did some interesting stress tests yesterday.
I tried various data refresh interval at different baud rates and found some minor glitches.
Please use AndroTest_V14.ino

Code:
#define VERSION     "\n\nAndroTest V1.4 - @kas2014\ndemo for V4.X  (6 button version)"

// V1.4  improved communication errors handling
// V1.3  renamed for publishing, posted on 09/05/2014
// V1.2  Text display   ** not backward compatible **
// V1.1  Integer display
// V1.0  6 buttons + 4 data char implemented

    **  The message exceeds the maximum allowed length (9500 characters)  **
See next message

This updated sketch features optimized timing and better transmission error management
Again, make sure your BT board is set @57600bps
Avoid using 25ms refresh interval and continuous timeout count, that's too much data
I am also preparing V5.0, with a pure ASCII communication protocole
60  Using Arduino / Networking, Protocols, and Devices / Re: Android Bluetooth joystick on: May 24, 2014, 02:11:15 pm
@Bob1943
Quote
Still only xxx showing bottom left
Are you referring to the joystick position field at bottom left of android device screen ??   smiley-eek
This should indicate joystick position at App start up, even before any connection
It should read (-100,-100) for South West position and (100,100) for North East position

Quote
Interesting point is that button B5 stays locked the same as other buttons until pressed again to release. (I did notice at one time it did act like a push button – maybe that was when data got fed back).
This is normal behavior when not connected

Quote
My only problem now (apart from error in BT board configurator mentioned above) is the failure to get a signal from Arduino to Android.
- You can follow joystick position and buttons state on you Serial Monitor
- Datafields don't update, B5 is not in "push" mode
Correct ??

Quote
Answers to 9 question in reply #197
1..Version v4.0.4
I was talking about App version, should be V4.0       OK ??

Quote
the AT command AT+UART? returned: 57600,0,0 Is that OK?
Yes
According to documentation
Param2 = stop bit:   0->1 bit  1->2 bits
Param3 = parity bit:   0->None  1->Odd parity  2->Even parity
Arduino serial is 8N1 (1 stop bit, no parity)

Quote
UNO TX LED flashes about every 2 seconds and whenever a button is pressed. When the joystick is moved it constantly flickers,
This reflects the data flowing from Arduino to Serial Monitor

Quote
then after about 10 seconds of continuous joystick movement the TX LED locks on. Opening the serial monitor window seems to return it  back to normal.
Strange  smiley-slim smiley-slim


Did you change any setting in Advanced options ??
Try "reset Option" to restore initial parameters
EDIT: also set Refresh interval @100ms, Timeout count @every 10 intervals

Finally let me have a link to your specific BT board
Pages: 1 2 3 [4] 5 6 ... 26