Go Down

Topic: [Arduino Vs Android] Open accessory protocol: problema (Read 721 times) previous topic - next topic

CG82

Da pochissimo avvicinatomi all'ambiente Arduino cerco subito lumi.
Devo gestire un certo scambio dati tra Arduino e terminale Android, pertanto come prima cosa ho cercato di testare un sample di comunicazione che mi hanno passato:

Code: [Select]
#include <Max3421e.h>
#include <Usb.h>
#include <AndroidAccessory.h>

#define ARRAY_SIZE 12

AndroidAccessory acc("Manufacturer",
"Model",
"Description",
"Version",
"http://mondocrudele.com",
"0000000012345678");

char hello[ARRAY_SIZE] = {'h','e','l','l','o',' ',
'w','o','r','l','d','!'};
char alo[ARRAY_SIZE] = {'t','e',' ','l','o',' ',
's','c','o','r','d','i'};

void setup() {
  Serial.begin(9600);
  acc.powerOn();
}

void loop() {
  if (acc.isConnected()) {
    for(int x = 0; x < ARRAY_SIZE; x++) {
      Serial.print(hello[x]);
      delay(250);
    }
    Serial.println();
    delay(250);
  }
  else {
  for(int x = 0; x < ARRAY_SIZE; x++) {
      Serial.print(alo[x]);
      delay(250);
    }
  Serial.println();
  delay(250);
}
}


Inserite le librerie, compilo il codice e lo carico sulla scheda (ARDUINO MEGA ADK).
A quel punto collegando la scheda al terminale Android il monitor seriale non dovrebbe visualizzare in loop il messaggio? Non visualizza neanche quello relativo al ramo else.
Testato con i seguenti smartphone:
Sony xperia Arc aggiornato ad ICS, kernel 2.6.32.9
Samsung Galaxy S Android 2.3.4, kernel 2.6.35
Ho letto che è stato fatto il backport dell'open accessory alle versioni 2.3.4 quindi mi chiedo:
sbaglio qualcosa? o i due terminali non supportano l'OA?

Madwriter

#1
Jul 12, 2012, 10:27 am Last Edit: Jul 12, 2012, 10:34 am by Madwriter Reason: 1
Allora come hai collegato la scheda al tuo cell?puoi mettere una foto?
Hai caricato lo sketch sulla mega l'hai collegata al cell e poi che hai fatto?pretendi che i caratteri ti compaiano sullo schermo cosi per magia?hai bisogno di un app che riceva i dati via seriale!(credo ceh tu lo sappia no?)
ne usi già una?

Aiutaci ad aiutarti  :smiley-mr-green:
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

CG82

Allora mi sa che sto sbagliando io.
Nelle mie intenzioni (e secondo quanto ho letto  qua)bastava collegare alla porta usb tipo A di Arduino un telefono compatibile con l'accessory mode (e saperlo quali sono sti telefoni a parte i googlefonini)e alla porta usb di tipo B il Pc. A questo punto dall'IDE di Arduino apro il monitor seriale (serial.print stampa là no?). Infatti se rimuovo la riga con il metodo powerON() che dovrebbe servire ad attivare il device android, sul monitor seriale leggo le stampe del ramo else visto che la var isConnected ovviamente sarà false.
Con quello sketch volevo semplicemente testare il corretto collegamento, lato Android per adesso non voglio che faccia nulla.

Madwriter

giustamente se stampi su seriale li vedi sull'ide hai ragione  :smiley-mr-green: come debug è perfetto cosi  :smiley-mr-green:
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

CG82

A questo punto potrebbe essere un problema ci compatibilità? Se il metodo powerOn() non fa nulla anzi inficia il funzionamento del codice nel loop(perché non stampa il ramo else) potrebbe essere perché entrambi i telefoni che ho provato non supportano l'accessory mode?
In tal caso mi procurerò un terminale con versione 3.1+, troppo comodo scrivere su device con acc.write()  e leggere con acc.read()  :smiley-mr-green:

Madwriter

purtroppo vedo che c'è pochissima documentazione,purtroppo posso aiutarti poco anche essendo programmatore android io ci comunico via bluetooth seriale e non ho tutti questi problemi  :smiley-mr-green:
http://letsmakerobots.com/node/26839
a quanto pare co nexus funziona!
mah chissà dovrebbe funzionare in teoria anche col tuo prova un pò i loro esempi.
Visto che comunque tu hai l'host sulla scheda il telefono dovrebbe supportare via software la accessory mode.
Altrimenti prova a seguire questa guida:
http://blog.makezine.com/archive/2011/06/using-the-android-open-accessory-api-without-a-nexus.html
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Go Up