Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading…
Transcript

TDC Porto Alegre 2013

Arduino

ADK trabalha encima do Arduino Mega;

ATMega328 versus ATMega2560;

14 portas digitais e 6 analógicas;

54 portas digitais e 16 portas analógicas;

15 portas PWS versus 6 portas PWM

ADK - Android Development Kit

Versões

AOA

Android Open Accessory Protocol

Até mesmo no Arduino AtMega328

Quer usar Arduino Mega? Pode... mas..

Biblioteca no Arduino e no Android;

- reconhecimento do hardware

- identificação do hardware

- troca de dados com classes extensamente usadas

Introdução - ADK

Versões

ADK do Google

ADK do Google não é fácil achar;

Introdução

ADK

Comunicação e Troca de Dados

Conclusão de Demos

Ricardo da Silva Ogliari

Instrutor Android e Programação Globalcode

Sócio Still-Rocker

Twing Studio

Pseudo-escritor: 200 publicações

Diversas opções no mercado.. só googlar

Código

No Arduino

#include <AndroidAccessory.h>

AndroidAccessory acc("Fabricande", "Modelo", "Descrição", "Versão", "URI", "Serial");

void loop(){}

void setup(){}

Código

No Arduino

void setup() {

acc.powerOn();

}

void loop() {

if (acc.isConnected()) {

//fazer algo

}

}

Ligação

Fim: A Thread

Fica ouvindo chegada de dados

Runnable commRunnable = new Runnable() {

public void run() {

int ret = 0;

byte[] buffer = new byte[255];

while (ret >= 0) {

try {

ret = mInputStream.read(buffer);

} catch (IOException e) { break; }

switch (buffer[0]) {

case COMMAND_X:

int textLength = buffer[1];

for (...) { .... }

}

}

}

};

Código

Meta-dado para descrever o hardware

No Android;

AndroidManifest.xml;

<uses-library android:name="com.android.future.usb.accessory" />

//AndroidManifest, no IntentFilter

<activity ... >

<intent-filter ...>

<meta-data

android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"

android:resource="@xml/accessory_filter" />

</activity>

//res->xml->accessory_filter

<resources>

<usb-accessory manufacturer="Fabricante" model="Modelo" version="Versao" />

</resources>

Open e Close

Código

No Arduino

Código

private void openAccessory(UsbAccessory accessory) {

mFileDescriptor = mUsbManager.openAccessory(accessory);

if (mFileDescriptor != null) {

mAccessory = accessory;

FileDescriptor fd = mFileDescriptor.getFileDescriptor();

mInputStream = new FileInputStream(fd);

mOutputStream = new FileOutputStream(fd);

Thread thread = new Thread(null, commRunnable, TAG);

thread.start();

} else {}

}

private void closeAccessory() {

try {

if (mFileDescriptor != null) {

mFileDescriptor.close();

}

} catch (IOException e) {}

finally {

mFileDescriptor = null;

mAccessory = null;

}

}

byte rcvmsg[255];

byte sntmsg[1] = {0xe};

//retorna o número de bytes - vetor de bytes, tamanho deste, naklimits

int len = acc.read(rcvmsg, sizeof(rcvmsg), 1);

if (len > 0) {

if (rcvmsg[0] == COMANDO_MORSE) { ... }

}

acc.write(sntmsg, 1); //vetor de bytes e tamanho

Configurar IntentFilter para o componente

desejado;

Troca de Dados

<activity ... >

<intent-filter>

<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />

</intent-filter>

</activity>

Código

Continuando

Classes necessárias no código Java

private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (ACTION_USB_PERMISSION.equals(action)) {

synchronized (this) {

UsbAccessory accessory = UsbManager.getAccessory(intent);

if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {

openAccessory(accessory);

} else {}

}

} else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {

UsbAccessory accessory = UsbManager.getAccessory(intent);

if (accessory != null && accessory.equals(mAccessory)) {

closeAccessory();

}

}

}

};

private UsbManager mUsbManager;

private UsbAccessory mAccessory;

private ParcelFileDescriptor mFileDescriptor;

private FileInputStream mInputStream;

private FileOutputStream mOutputStream;

Código

Verificação no onResume

UsbAccessory[] accessories = mUsbManager.getAccessoryList();

UsbAccessory accessory = (accessories == null ? null : accessories[0]);

if (accessory != null) {

if (mUsbManager.hasPermission(accessory)) {

openAccessory(accessory);

} else {

synchronized (mUsbReceiver) {

if (!mPermissionRequestPending) {

mUsbManager.requestPermission(accessory, mPermissionIntent);

}

}

Obrigado

@mobilidadetudo

@thingshackertm

rogliariping@gmail.com

Learn more about creating dynamic, engaging presentations with Prezi