前面Android ADK 编程简介 介绍了ADK编程的一般步骤,这里给出一个简单的实例说明Android手机如果通过USB端口来控制LED。
所使用的Arduino 板子为Freetronics 的 EtherTen ,就一红一绿LED连接到7,8口上。如下图所示:
参考DemoKit的 Arudino 代码,为LED 驱动编写如下代码:
#include <avrpins.h>
#include <max3421e.h>
#include <usbhost.h>
#include <usb_ch9.h>
#include <Usb.h>
#include <usbhub.h>
#include <avr/pgmspace.h>
#include <address.h>
#include <adk.h>
#include <printhex.h>
#include <message.h>
#include <hexdump.h>
#include <parsetools.h>
USB Usb;
USBHub hub0(&Usb);
USBHub hub1(&Usb);
ADK adk(&Usb,"Guidebee Pty Ltd.",
"LedDemoKit",
"DemoKit Arduino Board",
"1.0",
"http://www.imobilebbs.com",
"0000000012345678");
uint8_t b, b1;
#define START_MOTOR 8
#define STOP_MOTOR 7
#define ERROR_INDICATOR 13
void setup();
void loop();
void init_leds()
{
pinMode(START_MOTOR, OUTPUT);
pinMode(STOP_MOTOR, OUTPUT);
digitalWrite(START_MOTOR, LOW);
digitalWrite(STOP_MOTOR, LOW);
}
void setup()
{
Serial.begin(115200);
Serial.println("\r\nADK demo start");
if (Usb.Init() == -1) {
Serial.println("OSCOKIRQ failed to assert");
while(1); //halt
}//if (Usb.Init() == -1...
init_leds();
}
void loop()
{
uint8_t rcode;
uint8_t msg[3] = { 0x00 };
Usb.Task();
if( adk.isReady() == false ) {
digitalWrite(ERROR_INDICATOR, HIGH);
return;
}else{
digitalWrite(ERROR_INDICATOR, LOW);
}
uint16_t len = sizeof(msg);
rcode = adk.RcvData(&len, msg);
if(len > 0) {
USBTRACE("\r\nData Packet.");
// assumes only one command per packet
if (msg[0] == 0x2) {
switch( msg[1] ) {
case 0:
USBTRACE("LED 1\r\n.");
if(msg[2]>128){
digitalWrite(START_MOTOR, HIGH);
} else{
digitalWrite(START_MOTOR, LOW);
}
break;
case 1:
USBTRACE("LED 2\r\n.");
if(msg[2]>128){
digitalWrite(STOP_MOTOR, HIGH);
} else{
digitalWrite(STOP_MOTOR, LOW);
}
break;
}//switch( msg[1]...
}
}//if( len > 0...
msg[0] = 0x1;
delay( 10 );
}
编写一个简单的Android应用,包含四个按钮,如下:
这里设计一个帮助类ArduinoHelper,用于和Arduino板子USB通信,这个类可以和任意的Activity绑定,因此很容易应用到你自己的代码中。参见代码下载。
有了ArduinoHelper, Android应用和Arduino板子通信就非常简单,在OnCreate 中创建ArudinoHelp 的实例, 在onResume和onDestroy 方法中调用ArduinoHelper 的对于的方法:
public class ArduinoLedDemoActivity extends Activity {
/** Called when the activity is first created. */
protected ArduinoHelper mArduinoHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mArduinoHelper = new ArduinoHelper(this);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mArduinoHelper.sendCommand(ArduinoHelper.LED_SERVO_COMMAND,
(byte) 0x1, 250);
}
});
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mArduinoHelper.sendCommand(ArduinoHelper.LED_SERVO_COMMAND,
(byte) 0x1, 1);
}
});
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mArduinoHelper.sendCommand(ArduinoHelper.LED_SERVO_COMMAND,
(byte) 0x0, 250);
}
});
Button button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mArduinoHelper.sendCommand(ArduinoHelper.LED_SERVO_COMMAND,
(byte) 0x0, 1);
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
mArduinoHelper.onDestroy();
}
@Override
public void onResume() {
super.onResume();
mArduinoHelper.onResume();
}
}
代码下载
分享到:
相关推荐
Google ADK USB Accessory功能演示代码,能实现用手机通过USB控制ZC-ADK的LED,读取AD与按键等功能,相比MEGA-ADK实现原理更直接更简单,适合批量开发应用。 使用说明,请见:...
ARM_Android ADK V1.2
能够支持Android ADK开发的Arduino开发环境。基于Arduino 0023,已经添加该IDE兼容的ADK工具包。能够直接使用的。
android app开发之手把手教你搭建安卓开发环境 java JDK android ADK IDE Android Studio.zip
Beginning Android ADK with Arduino Book Description Whether you’re new to Arduino and Android development, or you’ve tinkered a bit with either one, this is the book for you. Android has always ...
Usb Host ADK是指不采用USB驱动,直接用java与设备编程的 这样让Android 可以无需修改内核和驱动情况下方便与各种USB外设通讯
Android设备与外设不仅可以用USB来通信,还可以用蓝牙(无线了)来通信。这个更新很重要。关于蓝牙我还没有仔细研究,如果真的可以和usb一样方便的连接Android设备和外设的话,前景是很广阔的。 2,增加了对音频的...
详细介绍了Android 开发环境搭建过程,包括Ubuntu虚拟机的安装配置,以及Android开发环境的装配置,以及ADK开发的入门例程编译烧写的方法
ZC-ADK是一款基于PIC24FJ64GB004的控制器板,可作为Android周边外设开发套件(Accessory Developer Kit) , 通过USB或蓝牙实现与Android手机的数据通讯, 将Android手机的各类传感器、声控、摄像头等丰富功能充分...
Arduino与Android的连接,包括Android传感器的调用
ADK3.0的示例代码,blinking_lights part2 改进,需要加include <led.h>
Android SDK Platform-Tools is a component for the Android SDK. It includes tools that interface with the Android platform, such as adb, fastboot, and systrace. These tools are required for Android app...
usb-serial-for-android 是一个驱动程序库,用于与 Android 上的 Arduinos 和其他 USB 串行硬件进行通信,使用 Android 3.1+ 上可用的 。 不需要 root 访问、ADK 或特殊的内核驱动程序; 所有驱动程序均以Java实现...
android安卓app开发之手把手教你安装 ADK 4.0.3 安装过程.zip
这是一个驱动程序库,用于与Android上的Arduino和其他USB串行硬件通信,使用从Android 3.1开始可用的并且从Android 4.2开始可靠地工作。 不需要root访问权限,ADK或特殊的内核驱动程序; 所有驱动程序均以Java实现...
2011年Google 推出Android开放配件协议AOA(Android Open Accessory Protoco1)及配件开发工具包ADK(Accessory Development Kit)提供了Android设备与Android配件通过USB或蓝牙进行通信的API,为基于Android系统的智能...
android百度地图开发sdk,有助于安卓地图应用开发
这是一个驱动程序库,可使用Android 3.1+上可用的与Arduino和Android上的其他USB串行硬件进行通信。 不需要root访问权限,ADK或特殊的内核驱动程序; 所有驱动程序均以Java实现。 您将获得带有read() , write()和...
用于手机控制外部usb设备,需手机端的ADK配合使用
Android 官方SDK文档 Intent。Android 官方SDK文档 Intent