Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

1º Connecting Knowledge - ADK

No description
by

Ricardo Ogliari

on 6 February 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of 1º Connecting Knowledge - ADK

1º Connecting Knowledge
ADK - Android Development Kit
Versões
Versões
Diversas opções no mercado.. só googlar
ADK do Google
ADK do Google não é fácil achar;
Até mesmo no Arduino AtMega328
Versões
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

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

Introdução - ADK
AOA
Android Open Accessory Protocol
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
Código
<uses-library android:name="com.android.future.usb.accessory" />
Código
<activity ... >
<intent-filter>
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
</activity>
Código
//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>
No Android;
AndroidManifest.xml;
Configurar IntentFilter para o componente
desejado;
Meta-dado para descrever o hardware
Código
No Arduino
#include <AndroidAccessory.h>

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

void loop(){}

void setup(){}

Ligação
Código
No Arduino
void setup() {
acc.powerOn();
}

void loop() {
if (acc.isConnected()) {
//fazer algo
}
}
Código
private UsbManager mUsbManager;
private UsbAccessory mAccessory;
private ParcelFileDescriptor mFileDescriptor;
private FileInputStream mInputStream;
private FileOutputStream mOutputStream;
Código
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);
}
}
Continuando
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();
}
}
}
};
Classes necessárias no código Java
Verificação no onResume
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 (...) { .... }
}
}
}
};

Troca de Dados
Código
No Arduino
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
Open e Close
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;
}
}
Obrigado

@mobilidadetudo
@thingshackertm
rogliariping@gmail.com
Full transcript