Вы находитесь на странице: 1из 68

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

ANNIKKEN ANDEE USER GUIDE

Piasim Corporation Pte Ltd


Revision F5

1/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Table of Contents
1 What is Annikken Andee?......................................................................................... 5 2 Getting Started...........................................................................................................7
2.1 Hardware Setup........................................................................................................... 7 2.1.1 Connecting Arduino with Computer.................................................................... 7 2.1.2 Annikken Andee Setup......................................................................................... 7 2.2 Bluetooth Pairing........................................................................................................ 8 2.2.1 Annikken Andee and Android Device.................................................................. 8 2.3 Software Setup............................................................................................................ 8

3 Hardware Overview.................................................................................................10
3.1 Power Connections.................................................................................................... 10 3.2 SPI Connections........................................................................................................ 10 3.3 SD Card..................................................................................................................... 10 3.4 LEDs......................................................................................................................... 11

4 Andee Library For Arduino..................................................................................... 13


4.1 Installing Andee Library............................................................................................ 13 4.2 Running the Example - Hello World...................................................................... 15 4.3 Basic Program Loop.................................................................................................. 17 4.4 Output Data on Android from Arduino...................................................................... 17 4.5 Beyond Basic Program Loop.....................................................................................24 4.6 Input Data from Android to Arduino......................................................................... 29 4.6.1 BUTTON_IN Displays...................................................................................... 29 4.6.2 KEYBOARD_IN Displays................................................................................ 31 4.7 Removing Displays................................................................................................... 36 4.8 Getting For Annikken Andee Status.......................................................................... 41 4.9 Disconnect and Connection Status............................................................................ 43 4.10 Read and Write SD Card........................................................................................ 44
Piasim Corporation Pte Ltd
Revision F5

2/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

4.10.1 Reading A Line From SD................................................................................. 46 4.10.2 Read A Number Of Bytes From SD................................................................. 48 4.10.3 Writing Data to SD........................................................................................... 50 4.11 Sending SMS and Creating Notifications................................................................ 51

5 String Limits............................................................................................................ 53 6 Connector SV2 Functionality.................................................................................. 54 7 Upgrading Firmware................................................................................................54 8 Annikken Andee Specifications...............................................................................57
8.1 Data Rate................................................................................................................... 57 8.2 Dimensions................................................................................................................ 58

Piasim Corporation Pte Ltd


Revision F5

3/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Version Changes F2 F3 F4 Separated API reference to another document. -added function description of SV2 of Annikken Andee Major change of memory management.

Piasim Corporation Pte Ltd


Revision F5

4/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

1 What is Annikken Andee?

Illustration 1: Annikken Andee

Illustration 2: Function calls in Arduino to create displays on Android

Annikken Andee is a Bluetooth add-on shield for the popular Arduino platform. With Annikken Andee's library and its Android app, you can easily create touch interfaces, display data and use phone functions, like SMS on Android platforms without writing any Android code. From your Arduino code, just call a simple function and watch your data simply appearing on your android device! Annikken Andee is your handy mailman in sending and receiving data to and from a mobile device. Piasim Corporation Pte Ltd
Revision F5

Illustration 3: Screenshot of created display 5/68


July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Annikken Andee is also capable creating displays with touch capabilities, capturing user touch events and sending it to Arduino, where you can code a function to handle the Android touch event in Arduino code. Annikken Andee is also capable of creating displays which allows Android users to key in passwords, text, numbers using the Android keyboard. This information will, likewise, be sent to your Arduino, where you can handle the input. Furthermore, Annikken Andee is designed to take up minimal amount of memory on Arduino. Using the Andee library will take up about (330 + 2n) bytes of memory, where n is the number of displays you wish to create on Annikken Andee. Annikken Andee stores information about what to display in its own memory, and not your Arduino's memory, so as to free up precious Arduino memory for your design. Annikken Andee holds in its memory the data to display on the connected Android device. Your work only involves configuring these memory, i.e. helper.setData(Hello
World), or giving Annikken Andee instructions, i.e. helper.update(), in your Arduino

code. Annikken Andee takes care of the complicated bluetooth wireless management stuff for you. The Andee Library for Arduino abstracts complicated SPI communications between Arduino and Annikken Andee. You only worry about your Arduino design. If you have an existing application with Arduino and wish create an interface on Android, Annikken Andee clearly is THE choice!

Piasim Corporation Pte Ltd


Revision F5

6/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

2 Getting Started
2.1 Hardware Setup 2.1.1 Connecting Arduino with Computer

You should make sure your Arduino board is functioning properly first. Connect Arduino to your computer using USB, note the COM number being assigned by your computer. For mac users, you will be assigned a /dev/tty* instead. Next, launch the Arduino IDE and connect to it using the assigned com port number. You should now load some Arduino examples. For detailed instructions on setting up your Arduino, visit www.arduino.cc to look for setup instructions of your Arduino board.

2.1.2

Annikken Andee Setup

NOTE! Remove power to Arduino first before plugging in Annikken Andee. Plug Annikken Andee on top of Arduino as shown. Connection is made between the two via the ICSP connector (Arduino) and pin 8. Annikken Andee is powered via the 5V pin of Arduino's ICSP connector.

Illustration 4: Annikken Andee with Arduino Uno

Piasim Corporation Pte Ltd


Revision F5

7/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 5: Blinking LD2 Power up Arduino either by USB (recommended) or power adapter. Led LD2 of Annikken Andee should be blinking, indicating its ready for connection. USB is recommended because it can debug and program Arduino.

2.2 Bluetooth Pairing 2.2.1 Annikken Andee and Android Device

Annikken Andee pairs with Android devices without requiring any pin code. From your Android device: Settings -> Bluetooth -> Scan

Click on the Annikken Andee device that shows up after scanning to pair with it. Should your device request for a pin code, key in 0000.

2.3 Software Setup


Download the Annikken Andee App from Google Play Store and install it onto your Android device. Enable Bluetooth on your Android device. Make sure Annikken Andee is plugged onto Arduino and powered on. Pair Annikken Andee with you Android using the android's system settings. Launch Annikken Andee App. You should be prompted with a bluetooth connection screen. If not, press the Connect icon from the app's activity bar.

Piasim Corporation Pte Ltd


Revision F5

8/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Connect Button

Illustration 6: Connect icon from app's activity bar

Illustration 7: Bluetooth list of devices to connect

Select the Annikken Andee device you with to connect with. Annikken Andee's LD2 should be blinking red, indicating an active connection.

Install Annikken Andee Library and run the examples. The library can be downloaded from www.annikken.com/annikkenandee/AndeeLibrary.zip. Detailed instructions are in section 4.1 Installing Andee Library. You should see data appearing in the app by running the example sketches provided under Examples -> Andee of Arduino IDE (Arduino code are called sketches).

Piasim Corporation Pte Ltd


Revision F5

9/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

3 Hardware Overview
3.1 Power Connections

Illustration 8: ICSP and Pin8

Annikken Andee draws a 5V supply from Arduino. Internal circuitry onboard then steps down this to 3.3V to power all of Annikken Andee. Power connection is made via the ICSP connector of Arduino.

3.2 SPI Connections


Pin 8 of Arduino is connected to Annikken Andee. ICSP of Arduino is also connected to Annikken Andee. These pins provide SPI connections for transferring of data. Arduino is configured as a master and Annikken Andee a slave. Pin 8 acts as a slave select pin from Arduino to Annikken Andee. You should avoid using pin 8 or Arduino to make any external connections.

3.3 SD Card
The SD Card slots accepts standard sd cards. It allows users to have an extra memory storage should they need it. The read write functions are provided in the Andee library Piasim Corporation Pte Ltd
Revision F5

10/68
July 2, 2013

Annikken Andee
for Arduino.

Bluetooth Shield For Arduino


By Annikken

3.4 LEDs
There are 3 leds. ON: Indicates that power is being supplied to Annikken Andee LD1:

Blinking Green Indication presence of write activity to Annikken Andee. LD2: Blinking Green No bluetooth connection with Android

Blinking Red Active Connection with Android

LD1 and LD2: Both blinking red SDCard not present or image.hex file not found. (Bootload mode)

Piasim Corporation Pte Ltd


Revision F5

11/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Alternate Green (LD1) and Red (LD2) Firmware programming in progress. (Bootload mode)

Alternate Green/Green and Red/Red Downloaded firmware is corrupted. (Bootload mode)

Piasim Corporation Pte Ltd


Revision F5

12/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

4 Andee Library For Arduino


Arduino programmers can use the Andee Library for Arduino to send and fetch data from Annikken Andee. Annikken Andee will, likewise, send and fetch your data between itself and Annikken Andee App on Android. There's no need not meddle with Android programming for the mobile phone, initiating and maintaining wireless connections, or setting up SPI connections. It simply works. You create Android interfaces (with Annikken Andee App) using function calls, provided by the library, in Arduino.

4.1 Installing Andee Library


Here are the instruction to install the Andee library. Once installed, you can easily use the functions to create new Arduino sketches or integrate them with existing ones. (Arduino programs are known as sketches). Firstly make sure you have already installed the Arduino IDE. Get the correct version of Arduino IDE from www.arduino.cc. The following instructions will guide you through on how to install Andee library so your Arduino IDE can use it. Note: For a detailed instruction on creating and installing an external library, you can look up this link: http://arduino.cc/en/Hacking/LibraryTutorial 1. First, download the zip file from www.annikken.com/annikkenandee/AndeeLibrary.zip. 2. Locate the libraries sub-directory of your Arduino sketchbook directory. For windows, its normally found at: C:\Users\<username>\Documents\Arduino Mac users, ~\Documents\Arduino

Piasim Corporation Pte Ltd


Revision F5

13/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 9: Libraries folder created by Arduino 3. Here create a directory named Libraries if it does not exists. Normally this library will be create when you install Arduino and ran it. 4. Unzipped the downloaded file AndeeLibrary.zip, and copy the entire Andee folder into the Libraries folder. Note that your Libraries folder may contain other libraries contributed by other Arduino users.

Illustration 10: Copy Andee Folder into Libraries 5. Launch the Arduino IDE. Go to Sketch -> Import Library. You should see the Andee library listed. Note: You may need to restart Arduino IDE to see the library listed. You can now use the Annikken Andee library for your Arduino projects.

Piasim Corporation Pte Ltd


Revision F5

14/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 11: Import library into sketches

4.2 Running the Example - Hello World


In this section, we will be guiding print a text Hello World to an Android screen. Plug Annikken Andee on top of your Arduino board. Connect Arduino with your computer using USB and launch Arduino IDE. This will also power up Annikken Andee and you should see a blinking green led (LD2).

Piasim Corporation Pte Ltd


Revision F5

15/68
July 2, 2013

Annikken Andee
From Arduino, open up the example Demo1_HelloWorld. From Arduino, select File->Examples ->Andee -> Demo1_HelloWorld On Android, turn on bluetooth, pair your Android with your Annikken Andee. Annikken Andee should have a name like Andee XXXX, where XXXX are numbers. On Android, launch Annikken Andee App (available from Google Play store). Click on Bluetooth List if its available to you. Choose the appropriate Annikken Andee by checking

Bluetooth Shield For Arduino


By Annikken

its box and click the 'Connect' button at the bottom of Illustration 12: Bluetooth the list. Once connected, you should notice that LD2 List of devices of Annikken Andee is blinking red. Upload your program by clicking the 'Upload' button from your Arduino IDE. Your program should compile and once loaded you should see a screen like this on your Android device. If data is not showing, please reset Arduino.

Illustration 13: Demo1_HelloWorld Screenshot Congratulations! Your Android is now communicating with Annikken Andee.

Piasim Corporation Pte Ltd


Revision F5

16/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

4.3 Basic Program Loop


This a basic loop to get your data to be displayed on an Android.

Illustration 14: Basic Program Flow We will use Demo1_HelloWorld demo program included with the Andee library to show you where to perform these tasks in an Arduino sketch.

4.4 Output Data on Android from Arduino


To output data from Arduino to Android, you use a DATA_OUT display. Here is a screenshot of a DATA_OUT display that spans the full width of Android. Displays can occupy 1/4, 1/3, 1/2, 2/3, 3/4 or the FULL width of Android screen. Let's use the Demo1_HelloWorld example to illustrate this. Here is the code you need to write in Arduino to display a DATA_OUT display on Android. Piasim Corporation Pte Ltd
Revision F5

17/68
July 2, 2013

Annikken Andee

//Program outputs Hello World to a display #include <SPI.h> #include <Andee.h> #include <time.h> //to use delay function

Bluetooth Shield For Arduino


By Annikken

//Declare an instance of AndeeHelper to help manage our display. AndeeHelper andeeHelper; void setup(){ //Setup communications between Annikken Andee and Arduino Andee.begin(); andeeHelper.setId(14); //Give this helper a unique ID andeeHelper.setType(DATA_OUT); //Set Type to DATA_OUT andeeHelper.setLocation(0, 0, FULL); //Row, Order, Span //Set the title, data and units fields of our display. AndeeHelper.setTitle("Hello Title"); AndeeHelper.setData("This is Data Field"); andeeHelper.setUnit("Units Field"); } Andee.clear();//Clear the screen of any previous displays

void loop(){ // Tell Andee to display our DATA_OUT andeeHelper.update(); //Delay for 1 second, here we send update every second. delay(1000); }

To use Andee in Arduino sketches, we need to include the necessary libraries. Since our Andee.h library uses the SPI.h library, be sure to include it in your sketch.

#include <SPI.h> #include <Andee.h>

Create Helpers Tasks refer to flowchart of previous section. We need to use AndeeHelper class to help manage our display on Android. You should have a AndeeHelper instance for each display on Android. This this example, we only want one DATA_OUT display. So we declare just one andeeHelper object. Next we will declare a AndeeHelper variable.

Piasim Corporation Pte Ltd


Revision F5

18/68
July 2, 2013

Annikken Andee

#include <SPI.h> #include <Andee.h> AndeeHelper andeeHelper;

Bluetooth Shield For Arduino


By Annikken

We use this instance to save data, like title and location or the text to display on Android, in Annikken Andee's memory via various function calls. Every Arduino sketch/program needs to have: void setup(){ } void loop() {}

The Arduino's setup() function is only called once during the execution of the Arduino program. Normally, we do some setup here. It is here we do things that needs to be done first, or things that need to be done only once.
#include <SPI.h> #include <Andee.h> AndeeHelper andeeHelper; void setup(){ Andee.begin(); andeeHelper.setId(14); andeeHelper.setType(DATA_OUT); andeeHelper.setLocation(0,0,FULL);

Andee.begin() We call Andee.begin() to setup communications between Annikken Andee and the Arduino board.

void setId(int id) When you call setId(id), you are associating this andeeHelper with a MemBlock inside Annikken Andee. Annikken Andee will initialize MemBlock[id] with defaults upon receiving this command.

Piasim Corporation Pte Ltd


Revision F5

19/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 15: Memory Management in Annikken Andee After you have associated the andeeHelper with a MemBlock in Annikken Andee, any functions you call with andeeHelper will be directed at the MemBlock[id]. In our example we are using MemBlock[14], setId(14). void setType(char type) Use the pre-defined macros, DATA_OUT: data display, BUTTON_IN: button display, KEYBOARD_IN: display which allow user to send characters typed by Android keyboard to Arduino. This our example, we set to DATA_OUT as we want to simply display something. void setLocation(int row, int order, int span) This function, we give our helper location information for our display. For row, give it an integer from 0 to 3, corresponding to row 1 to row 4 of android display. For order, we set it to zero first. Order dictates the order (left-to-right) in which displays on the same row appears. A bigger order will be place on the right hand side of a smaller order. Order 1 Order 2 Order 3

Piasim Corporation Pte Ltd


Revision F5

20/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

By setting it to zero, we are leaving it for the program to decide. Displays that are called to be output first will appear on the leftmost. For span, we want this display to fill the width of Android screen, so we use the macro FULL. Other macros you can use are: ONE_THIRD TWO_THIRD ONE_QUART THREE_QUART HALF Fills one third of width Fills two third of width Fills one quarter of width Fills three quarters of width Fills half the width

Next, we give information to our helper that tells it what to populate our display with. Data displays have three fields we can use: title, data and unit. They can be used with the following functions.

setTitle(char*)

setData(char*) setUnit(char*)

Illustration 16: Fields you can populate data with


#include <SPI.h> #include <Andee.h> AndeeHelper andeeHelper; void setup(){ Andee.begin(); andeeHelper.setId(0); andeeHelper.setType(DATA_OUT); andeeHelper.setLocation(0,0,FULL); andeeHelper.setTitle("Hello Title"); andeeHelper.setData("This is Data Field"); AndeeHelper.setUnit("Units Field"); Andee.clear();//Clear the screen of any previous displays

Piasim Corporation Pte Ltd


Revision F5

21/68
July 2, 2013

Annikken Andee
void setTitle(char* title) void setData(char* data) void setUnit(char* unit)

Bluetooth Shield For Arduino


By Annikken

Use the the above function to provide title, data and unit information to our DATA_OUT display. You can also use override functions to set title, data or unit. Character strings are limited to a maximum of 64 bytes.
void setTitle(char*) void setTitle(int value) void setTitle(float value, int numberOfDecimalPlaces) void setTitle(double value, int numberOfDecimalPlaces) void setData(char*) void setData(int value) void setData(float value, int numberOfDecimalPlaces) void setData(double value, int numberOfDecimalPlaces) void setUnit(char*) void setUnit(int value) void setUnit(float value, int numberOfDecimalPlaces) void setUnit(double value, int numberOfDecimalPlaces)

void clear() We call this to clear the Android screen of all previous displays. Note that by calling this, Annikken Andee's MemBlocks are not erased. The previous fields you saved in Annikken Andee's MemBlocks are intact. Update Helper With Data Task We move on to create the Arduino's loop() function. This Arduino program will keep calling its loop() function when its running. Normally, we perform data acquisitions or updates in the loop() function. You can think of this as the program's main loop. For this example, we do not have any data to update. Let's move on to the next task. Piasim Corporation Pte Ltd
Revision F5

22/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

#include <SPI.h> #include <Andee.h> AndeeHelper andeeHelper; void setup(){ ... } void loop(){ }

Up till now, if you compile and upload the Arduino sketch, you will not see anything appear on your Android screen. This is because all we have done up till this point was only to give information to our Annikken Andee. You have not instructed Annikken Andee to create any display yet. Update Android Screen Task void update() Let's tell our helper to inform Android about our display.
#include <SPI.h> #include <Andee.h> AndeeHelper andeeHelper; void setup(){ ... } void loop(){ andeeHelper.update(); Delay(1000); //Delay 1 second before the next update. }

When this function is called, Annikken Andee will inform Android where and what to display based on the information we gave it in our setup loop. Now we can upload this program to our Arduino board. You should see the display appearing on your Android screen.

Piasim Corporation Pte Ltd


Revision F5

23/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

4.5 Acquiring Analog Data and Output to Android

Illustration 17: Snapshot of Demo2_SendAnalogReadings Notice that we create a function called setInitialData() helper functions to configure the MemBlocks of Annikken Andee. Let's bring the attention to the loop() of Arduino. Instead of using setData(...) and update() in sequence, we tell Annikken Andee to display data using updateData(...) function. Calling this will instruct Annikken Andee to update Android using the data we pass in. It has the effect of setData(...) and update() together, but it is less heavy in Piasim Corporation Pte Ltd
Revision F5

24/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

the sense that only a single instruction is sent from Arduino to Annikken Andee.
void updateData(char*) void updateData(int value) void updateData(float value, int numberOfDecimalPlaces) void updateData(double value, int numberOfDecimalPlaces)

Illustration 18: Demo2_SendAnalogReadings Screenshot

You should see the above screen after you upload the sketch to Arduino. Everything in blue can be confusing, you may want to bring attention to a certain analog pin, let's say A1 of Arduino, to show red. You can do so using the setColor(char*
argb) and setTitleColor(char* argb) function. Let's add this function call inside

our setInitialData() helper function.

Illustration 19: Snapshot of setInitialData() code changes

Compile and upload the program and you should see the following screen. Piasim Corporation Pte Ltd
Revision F5

25/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 20: Snapshot of color change for DATA_OUT Let's change some more colors, say for Analog A2. Let's change it to a light gray box with a white title bar.

Illustration 21: Changing more colors Compile and upload to see the change.

Illustration 22: Light colors Seems like we cannot see out text with light backgrounds. In Annikken Andee, you have a choice of white text or black text, i.e. TEXT_LIGHT, TEXT_DARK. Use the Piasim Corporation Pte Ltd
Revision F5

26/68
July 2, 2013

Annikken Andee
following function to set them.

Bluetooth Shield For Arduino


By Annikken

Illustration 24: DATA_OUT white background with black text Illustration 23: Setting the text colors to white or black Here is a list of settable color macros, you can pass in your own 8 character string as well: Macros BLACK LIGHT_BLUE BLUE CYAN DKGRAY GRAY TRANSPARENT ARGB String "FF000000" "FF33B5E5" "FF0099CC" "FF00FFFF" "FF444444" "FF888888" "00FFFFFF" Macros LTGRAY GREEN MAGENTA RED WHITE YELLOW ARGB String "FFCCCCCC" "FF00FF00" "FFFF00FF" "FFFF0000" "FFFFFFFF" "FFFFFF00"

TEXT_LIGHT '0' TEXT_DARK '1'

Piasim Corporation Pte Ltd


Revision F5

27/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

4.6 Input Data from Android to Arduino

Illustration 25: BUTTON_IN and KEYBOARD_IN displays There are two ways to send messages from Android to Arduino through Annikkken Andee. BUTTON_IN displays send touch events to Arduino and KEYBOARD_IN sends a text entered by Android's soft keyboard to Arduino. Demo3_ ButtonAndKeyboard from examples shows you these two inputs.

4.6.1

BUTTON_IN Displays

BUTTON_IN displays sends a message to Annikken Andee when a user touches it. Your Arduino sketch can catch this using the isPressed() function. Below is a code of how to create a button on Android and catch the response.

Piasim Corporation Pte Ltd


Revision F5

28/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

If you touch the BUTTON_IN display on Android, you will notice it will be overlay with a spinner when you touch it, and sometime later it goes away and a tick is shown at the bottom right corner of the BUTTON_IN display. In Annikken Andee App, all buttons and keyboards will show a waiting for ack spinner when user touches them. In the case for KEYBOARD_IN, waiting for ack spinner shows after users sends a text input out. The waiting for ack will disappear and a tick will be shown once the app receives an ack from Annikken Andee. Arduino users must instruct Annikken Andee to send ack using the ack() function. This will allow user to know if Arduino has handled the touch event already or not.

Illustration 27: Waiting for ack

Illustration 26: After App receives ack

Illustration 28: Feedback box updated after BUTTON is pressed Piasim Corporation Pte Ltd
Revision F5

29/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 29: Code section generating the above interface

Piasim Corporation Pte Ltd


Revision F5

30/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 30: Options shown after long press on "waiting for ack" button In the event when and ack is not received after sometime, the Android user can choose to resend the touch event (Resend), cancel it (Cancel Click) or continue waiting (Do Nothing). These options are made available via a long press on the BUTTON_IN display.

4.6.2

KEYBOARD_IN Displays

KEYBOARD_IN displays allows an Android user to send a character string (not more than 64 characters) from Android to Arduino. When an Android user touches a KEYBOARD_IN button, the Android app will provide a keyboard for user to key in a message to be sent to Annikken Andee. The way Arduino gets notified is similar to the way BUTTON_IN displays notify, via isPressed() function. Note the similarity of the code. Note that button and keyboard are AndeeHelpers instances, i.e. AndeeHelper Piasim Corporation Pte Ltd
Revision F5

31/68
July 2, 2013

Annikken Andee

button, keyboard;

Bluetooth Shield For Arduino


By Annikken

Illustration 31: Comparing BUTTON_IN and KEYBOARD_IN code Arduino code need to call getKeyboardMessage(char* buffer) to retrieve the user message from Annikken Andee. Note that userKeyboardInput is a char buffer you have to define in Arduino, i.e. userKeyboardInput[32]. Piasim Corporation Pte Ltd
Revision F5

32/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 33: Soft keyboard shown when user presses button Illustration 32: Feedback updated with user keyboard input You can control the keyboard type using Arduino code. i.e. obscuring text or not obscuring text. This is normally used where user is to enter a password but do not wish the entered characters to be shown. Keyboard type is set using
setKeyboardType(char) function. In the example below, we used setKeyboardType(ALPHA_NUMERIC_PW).

Piasim Corporation Pte Ltd


Revision F5

33/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 34: Obscured text input There is a total of 8 types of keyboard input you can set. The first four as described are using Android's system soft keyboard, or any other third-party keyboard the user has installed. A _PW appended behind each macros would mean that the entered text will be obscured.

Piasim Corporation Pte Ltd


Revision F5

34/68
July 2, 2013

Annikken Andee
Keyboard Type MACRO Description

Bluetooth Shield For Arduino


By Annikken

Screenshot

Piasim Corporation Pte Ltd


Revision F5

35/68
July 2, 2013

Annikken Andee
ALPHA_NUMERIC ALPHA_NUMERIC_PW The full set of Android keyboard with numbers and characters.

Bluetooth Shield For Arduino


By Annikken

ANDROID_NUMERIC ANDROID_NUMERIC_PW

Android's numbers only keyboard.

ANDEE_NUMERIC_A ANDEE_NUMERIC_A_PW Piasim Corporation Pte Ltd


Revision F5

Andee's numeric only keyboard. Differs from

(Landscape)

36/68
July 2, 2013

Annikken Andee
Android numeric keyboard in the sense that it shows the button while in landscape mode. For Android numeric keyboard, only the keyboard and text entry field is shown.

Bluetooth Shield For Arduino


By Annikken

(Portrait)

ANDEE_NUMERIC_B ANDEE_NUMERIC_B_PW

Similar to ANDEE_NUMERIC_A but allows entry of decimals and negative numbers.

(Landscape)

Piasim Corporation Pte Ltd


Revision F5

37/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

(Portrait)

4.7 Removing Displays


For some applications, you may wish to show or hide certain buttons or displays at certain times. For example, you may wish to hide a open door button until the user positively authenticated himself/herself. We will be using Demo4_RemoveAndDestroy. Demo4 is an extension of Demo3_ButtonAndKeyboard, the difference is that we will be adding handling functions to demonstrate the removal and destroying of displays on Android screen. Also there will be 2 additional DATA_OUT displays for the demonstration of remove() function. Upload Demo4_RemoveAndDestroy to your Arduino and you should see the following screen. Please take a look at the flowchart of the program to help you understand the program flow.

Piasim Corporation Pte Ltd


Revision F5

38/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Piasim Corporation Pte Ltd


Revision F5

39/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 35: Screenshot


Demo4_RemoveDisplays

Let's see the setInitialData() function. Here you should notice that the two displays are updated here instead of inside the Arduino's loop function. This is so not to recreate the displays once remove() has been called. If we call update() on the two displays in the loop(), the displays will reappear after remove() has been called.

Piasim Corporation Pte Ltd


Revision F5

40/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Piasim Corporation Pte Ltd


Revision F5

41/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 36: Code snippet of setInitialData for Demo4_RemoveAndDestroy

Now for the handleKeyboardMessage() function. First we get the message from Annikken Andee using getKeyboardMessage(char*) function.

Illustration 37: handleKeyboardMessage() Then we call remove() on display[0] or display[1], depending on which what the user entered. The handleKeyboardMessage() is called in Arduino's loop function. Piasim Corporation Pte Ltd
Revision F5

42/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 38: Arduino's loop function

Piasim Corporation Pte Ltd


Revision F5

43/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 40: User enters '2'

Illustration 39: User enters '1'

You should notice that display number 2 is automatically flushed to the left of Android screen. This is the default behavior even when you have set the order of display to 1. Because in the first row, there is no displays before display 2, therefore it appears at the leftmost. If you wish for the display 2 to occupy the same position even after removing display 1, try modifiying display[0] to have transparent title and field color instead of calling remove(). This is demonstrated using the Set Transparent button.

Illustration 41: Creating a transparent display Here is the code for createTransparentUnit(). When pressing the button Set Transparent, you should see the following screen.

Piasim Corporation Pte Ltd


Revision F5

44/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 43: Code for create transparent unit

Illustration 42: Demo4 with a transparent display

4.8 Getting Annikken Andee Status


At times, you may be interested to know Annikken Andee's information. E.g. Annikken Andee's bluetooth name. To get such status information, your Arduino code needs to use the following functions:
bool AndeeClass::sendCommand(char* command, char* reply);

To illustrate the use of these functions, check out DEMO5_GetConnectedMACID. Annikken Andee keeps track of the unique bluetooth mac id a connected Android device. This mac id can be obtained with the request command GET CONNECTED MAC_ID. You need to open up Arduino's serial port monitor to see the error message when no Android is connected.

Piasim Corporation Pte Ltd


Revision F5

45/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 44: Icon to click to open Arduino's serial port monitor

Illustration 45: Snippet of sendCommand function Here is a table of commands you can use: Command String GET CONNECTED MAC_ID Description Get the unique bluetooth mac id of connected Android append with RSSI data. GET BTADDR GET BT NAME Get the unique bluetooth mac id of Annikken Andee Get Annikken Andee's Bluetooth name SET BT NAME <new name> Set Annikken Andee's Bluetooth name to <new name> No reply to this request. Note that you still need to supply a rcvdBuffer for the function. The replies, often text messages, will be saved into the buffer you supplied. In this case example, cmdReply[64]. If successful, sendCommand() function returns a true, else it returns a false, with the error message copied inside cmdReply, or the buffer you supply into the function. Piasim Corporation Pte Ltd
Revision F5

Reply E.g. 00:00:11:11:ed:da -54

E.g. 00:00:11:11:ed:da E.g. Andee 1001

46/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Piasim Corporation Pte Ltd


Revision F5

47/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 47: If no Android is connected, Illustration 46: Screenshot of Demo5_GetConnectedMACID serial port shows this

4.9 Disconnect and Connection Status


You can use disconnect() and isConnected() functions provided by the AndeeClass to better manage connection. The disconnect() function allows Arduino to instruct Annikken Andee to disconnect its existing bluetooth connection with Android. Demo6_DisconnectConnect will show you this. The program is simple as shown below.

Piasim Corporation Pte Ltd


Revision F5

48/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 48: Demo6 Source Code Arduino program will instruct Annikken Andee to display a DISCONNECT button if Andee.isConnected() returns true. And if the button is being touched by a user, Arduino instructs Annikken Andee to disconnect from the Android device by calling
Andee.disconnect(). Once disconnected, you should see the screen as shown below.

Piasim Corporation Pte Ltd


Revision F5

49/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 49: Screen observed after calling Andee.disconnect()

4.10

Read and Write SD Card


Annikken Andee provides an SD card slot to provide a non-volatile storage option

for Arduino users. For Arduino coder, you need to complicated yourself with setting up of SPI for the sdcard. Data to be written and sent is also being done via the following API calls from Andee library:
int readLineFromSD(char* filename, int offset, char* replyBuffer, int maxLen, char* delimitString) int readBytesFromSD(char* filename, int offset, char* replyBuffer, int numOfBytesToRead) int appendSD(char* filename, char* contents, char* errorMsgBuffer)

Piasim Corporation Pte Ltd


Revision F5

50/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

int writeSD(char* filename, char* contents, int offset, char* errorMsgBuffer)

Note that filenames should not contain the character ';' and ','. All these functions returns an integer specifying the current file location. If a '-1' is returned, it means an exception has occurred while performing the functions. The detailed error message will be saved in errorMsgBuffer[] - which is a character buffer you have to defined it in Arduino. Demo7_SDFunctions demonstrate the above functions. To run the above demo, you need to have a sdcard. Create a text file, name it as demo7.txt and load it with the contents as shown.

Illustration 50: Contents of demo7.txt

Next upload Demo7_SDFunctions to an Arduino can run it. Connect with an Android device and you should see the following screen.

Piasim Corporation Pte Ltd


Revision F5

51/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Piasim Corporation Pte Ltd


Revision F5

52/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

To show more controls

Illustration 51: Screenshot of Demo7_SDFunctions

Illustration 52: Revealing more buttons hidden on right

Notice for 2nd and 3rd line of display, there are small white right-pointing arrows on the right side of display. This means that there are more displays on the right and can be accessed by dragging your finger across the row from right to left.

4.10.1

Reading A Line From SD

Reading a line from SD card is accomplished by the function:


int readLineFromSD(char* filename, int offset, char* replyBuffer, int maxLen, char* delimitString) In Demo7_SDFunctions, this function is implemented via a button press with title Read Line. Here is the code.

Piasim Corporation Pte Ltd


Revision F5

53/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 53: Variables defined globally for use in Demo7 Illustration 54: Initialization of button

Piasim Corporation Pte Ltd


Revision F5

54/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Piasim Corporation Pte Ltd


Revision F5

55/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 55: Code segment from loop() The readLineFromSD(...) functions returns an int indicating the current file position. For example if 5 bytes were to be read, the value returned would be 5. Therefore, in this example, if you were to read the next line beginning from where you left off, you would pass in a value of 5 as the offset value. Try pressing the Read Line button once.

Illustration 56: DATA_OUT display showing the read contents and returned file pointer position as variable offset Current file pointer position

File pointer

0 L

1 i

2 n

3 e

4 1

6 t

7 e

8 s

9 t

10 i

11 n

12 g

13 \n

14 L

15 i

Contents

Delimiter not included in returned sd contents Continue pressing the Read Line button will show you the contents of demo7.txt line-by-line delimited by \n. Once end of file is reached, you should see this.

Piasim Corporation Pte Ltd


Revision F5

56/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 57: Display showing end of file Remember that a returned value of -1 indicated an exception, and the exception description is placed in your received contents buffer, in this case cmdReply[64].

4.10.2

Read A Number Of Bytes From SD

Here is the function prototype:


int readBytesFromSD(char* filename, int offset, char* replyBuffer, int numOfBytesToRead)

In Demo7_SDFunctions, there are two buttons to to be used with this function. Set Offset and Set Number Bytes.

Illustration 58: Set Offset and Set Number Bytes Variable offset will shift the file position pointer
File pointer

0 L

1 i

2 n

3 e

4 1

6 t

7 e

8 s

9 t

10 i

11 n

12 g

13 \n

14 L

15 i

Contents

NumOfBytesToRead specifies number of bytes to read from file position Here is the code segment for Set Offset button and Set Number Bytes button.

Piasim Corporation Pte Ltd


Revision F5

57/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 59: Code segment for Set Offset and Set Number Bytes button

Illustration 60: What the Read Bytes button do For example, set offset to 1 and numBytesToRead to 5 will show you the following result.

Illustration 61: readContents display after setting offset and numBytesToRead

Illustration 62: readContents display after pressing Read Bytes button

4.10.3

Writing Data to SD

You have two functions to use to write data to sdcard. Piasim Corporation Pte Ltd
Revision F5

58/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

int appendSD(char* filename, char* contents, char* errorMsgBuffer)

int writeSD(char* filename, char* contents, int offset, char* errorMsgBuffer)

The appendSD(...) function write contents starting from the end of file specified by filename. The writeSD(...) writes contents starting from file position specified by offset.

Illustration 63: Code segment of appendSD and writeSD For writeSD, the offset is set using the Set Offset button also. The WRITE SD button is hidden on the right side of APPEND SD function. Here is the list of possible errors you may received during any SD read/write functions: Error Message NO SDCARD FILE NOT FOUND OPENING FILE ERROR READ FILE ERROR EOF REACHED UNABLE TO CLOSE FILE Description SD card not insert or not properly inserted. Cannot find the specified file. There was an error opening the file. Error reading file, most probably corrupted. End of file. An error occurred while trying to close the file after reading 59/68
July 2, 2013

Piasim Corporation Pte Ltd


Revision F5

Annikken Andee
or writing.

Bluetooth Shield For Arduino


By Annikken

4.11

Sending SMS and Creating Notifications


This section shows you how to instruct Annikken Andee to use the connected

Android device, to send sms to a recipient or to create a notification. You need to create AndeeHelper instances and set the proper messages as shown.

Piasim Corporation Pte Ltd


Revision F5

60/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 64: Variables to declare

Piasim Corporation Pte Ltd


Revision F5

61/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 65: Setup function

Piasim Corporation Pte Ltd


Revision F5

62/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

Illustration 66: loop function

Illustration 67: Screenshot of Demo10_SMSandNotification

The Arduino's loop function basically handles the displaying of buttons on Android screen using the update() function and performing the sms.send() and
notice.notify() function.

Piasim Corporation Pte Ltd


Revision F5

63/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

5 String Limits
There is a maximum limit you the fields in Annikken Andee can take. Display Type DATA_OUT Settable Fields Title Data Unit BUTTON_IN KEYBOARD_IN Title Title User Input HintText SD ReadWrite SMS_SENDER NOTIFICATION Read and write contents Recipient Message Title Message Ticker Max Characters (Bytes) 64 64 64 64 64 64 64 64 in one function call 64 64 64 64 64

Piasim Corporation Pte Ltd


Revision F5

64/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

6 Connector SV2 Functionality


Annikken Andee has a 8-pin through-hole port labelled SV2 as shown.

SV2 Pin Number 1 2 3 4 5 6 7 8

Function Reserved. Reserved. Digital HIGH when LD2 = RED. Digital HIGH when LD2 = GREEN. Reserved. Reserved. Reserved. Reserved.

Users can wire these pins to their external systems for detection purposes. For example, you may need to put Annikken Andee into an enclosure. However, doing that will obscure the LD2 from view. Users may still want to be notified of connection status via the LD2 led. Instead of soldering your own wire to the surface mounted LD2, you can instead use pin 3 and pin 4 of SV2 to connect it to your external LED.

7 Upgrading Firmware
Annikken Andee's firmware can be upgraded using a sdcard. Firmware releases can Piasim Corporation Pte Ltd
Revision F5

65/68
July 2, 2013

Annikken Andee
be obtained from Annikken Andee's website,

Bluetooth Shield For Arduino


By Annikken

www.annikken.com/annikkenandee/AndeeLibrary.zip. The correct firmware to use with a library build is included in the zip file. Copy the <name>.hex file to a SDCARD and rename it to image.hex.

Rename file to image.hex

Insert the SDCARD (with firmware file) into Annikken Andee's SDCARD slot. Apply power to Annikken Andee. Annikken Andee's LD2 should be showing a blinking green light. This shows that it is in normal mode.

Put Annikken Andee into bootloading mode with the following steps: Press and hold BTN2 While still holding BTN2, press and release the RESET button.

(2) Press and RELEASE reset button.

(1) Press and HOLD reset button.

Piasim Corporation Pte Ltd


Revision F5

66/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

LD1 will flash RED and LD2 will flash GREEN alternately, indicating firmware programming is in progress. You can release BTN2 once you observed this.

Annikken Andee will put itself back to normal mode once firmware programming is done indicated by LD2 blinking green light.

Note that SV2 will not be working under bootloading mode.

Piasim Corporation Pte Ltd


Revision F5

67/68
July 2, 2013

Annikken Andee

Bluetooth Shield For Arduino


By Annikken

8 Annikken Andee Specifications


8.1 Dimensions
TOP VIEW

SIDE VIEW Dimensions in mm

Enquiries:

sales@piasim.com

Tech Support: support@piasim.com Website: www.annikken.com

Piasim Corporation Pte Ltd


Revision F5

68/68
July 2, 2013

Вам также может понравиться