-------------------------------------------------------------------------------
lo script calcola la distanza tra i due punti a coordinate lat=45°,lon=11° e lat=46°,lon=10° con il risultato di una distanza di 135786.09 metri.
L'errore di calcolo derivante dall'impiego della formula e' stimato in circa allo 0.3% il che equivale a 3 m per chilometro
Il valore di 6378137 m e' il raggio terrestre secondo il sistema WGS-84.
Il calcolo sopra ripòrtato e' impostato considerando la terra sferica; per una maggiore precisione e' necessario usare la formula ellissoidica di Vincenty (qui)
Stavo andando a giro per l'hard disk con Midnight Commander quando ho dato Invio su un file .apk e mi sono accorto che di fatto e' solo un file zip con una diversa estensione....
ebbene si', anche io sto leggendo la biografia di Steve Jobs e sono arrivato al punto in cui vende Next ad Apple..mi sono incuriosito di vedere un sistema operativo su cui di fatto non ho mai messo le mani (non per eta' anagrafica ma per eccessiva rarita' delle macchine Next)
Questo esempio e' in preparazione di uno scambio di dati tra telefono Android ed Arduino.
Partendo dal caso piu' semplice (ovvero PC + Arduino) si puo' caricare sulla Arduino il seguente sketch
che in sostanza accende il led sul pin 13 quanto trasmette la stringa "hello"
--------------------------------------------------------------------
il programma di lettura su PC (in Python) e' semplicemente, usando la libreria Pyserial
-------------------------------------------------------------------- import serial
arduino = serial.Serial('/dev/ttyUSB2', 9600) i = 1 while (1): print str(i) + ": " + arduino.readline() i= i + 1
--------------------------------------------------------------------
il prossimo tentativo e' quello di far arrivare i dati direttamente ad Android mediante la modifica USB Host del Kernel ed un cavo USB OTG (On The Go)
Attenzione: il comando readline di Python richiede la lettura di una stringa terminata con un ritorno di new line, se la scheda trasmette sulla seriale ma non manda mai il newline il PC non intercetta mai la trasmissione
Circa 15 giorni fa avevo installato la Dronix 0.4 con una procedura non lineare e non ero riuscito con lo stesso metodo ad inserire la 0.5.4 sul mio Ideos
Oggi ho trovato un metodo decisamente piu' lineare che merita di essere descritto
Prima di tutto ho installato l'app Rom Manager dall'Android Market ed ho scaricato il file zip del nuovo firmware sulla schedina microSD. Nella app ho selezionato di installare la Clockworkmod recovery e successivamente ho selezionato l'installazione da file zip indicando quella precedentemente salvata sulla SD (il programma permette di mettere la Cyanogenmod che presente il vantaggio di avere Android 2.3 ma lo svantaggio di non essere dichiarata stabile...peraltro io ho bisogno di testare l' USB Host Mode che e' sicuramente incluso nella Dronix e non e' certo sulla Cyanogenmod)
Qualche minuto di attesa e tutto e' andato a posto...direi anche troppo facile
per loggare l'attivita' sullo script per il debug mandando delle stringhe su logcat si puo' usare il seguente comando
------------------------------------------------------------- droid.log("test")
-------------------------------------------------------------
per intercettare gli eventi di chiamate in ingresso al telefono si puo' usare la chiamata
----------------------------------------------------------------
import android import time droid = android.Android() droid.startTrackingPhoneState() while True: time.sleep(5) print droid.readPhoneState().result droid.stopTrackingPhoneState()
readPhoneState.result riporta nella lista vari parametri; il quarto puo' essere "idle" quando il telefono e' in atteso oppure "ringing" quando il telefono squilla
per gestire gli SMS su un telefono Android mediante Py4A si puo' impiegare lo script seguente (visto qui)
------------------------------------------------
import android droid = android.Android()
#conta gli SMS print "Numero messaggi: " + str(droid.smsGetMessageCount(False,'inbox').result)
# estrae tutti i messaggi messages = droid.smsGetMessages(False, "inbox", ["address", "body"]) for i in messages.result: print i["address"].encode("utf-8") print i["body"].encode("utf-8")
# estrae un messaggio dato il numero di ID message = droid.smsGetMessageById(1, ["address", "body"]).result print message["address"].encode("utf-8") print message["body"].encode("utf-8")
il procedimento per creare i file di installazione e distribuzione .apk da Eclipse e' piuttosto banale
Una volta selezionato il progetto File/Export/Export Android Application
Selezionare il nome del progetto da esportare a cui segue la schermata del keystore (il file deve avere l'estensione keystore)
Una nuova schermata con parametri da inserire (25 anni e' il valore minimo suggerito da Android)
ed infine si sceglie dove scrivere il file .apk. Tale file puo' essere distribuito, copiato sul telefono ed installato
Per creare un nuovo progetto Android con Eclipe/ADT si clicchi su File/New/Other/Android Project
Compare quindi la schermata sottostante
in cui Project Name si puo' inserire il nome UDPClient (meglio non usare spazi..non si mai)
in Application Name si puo' inserire il nome in formato libero (spazi,virgole)
in Package Name si deve utilizzare le convenzioni Java per cui il nome puo' essere com.udp.client
in Activity Name si deve inserire il nome della classe che verra' generata in questo caso udpclient
lasciando da parte Python sono tornato a rivedere un po' Eclipse e Java mi sono ritrovato con due errori nella fase di creazione di un nuovo progetto mi sono imbattuto in
Debug certificate expired in 03/01/2012.....
che si risolve cancellando il file /.android/debug.keystore (soluzione ripresa da qui) e probabilmente dovuta al fatto che non usavo piu' Eclipse da molto tempo
altro errore Unable to open class file......R.java
la soluzione (qui) consiste nell'aprire e richiuedere Eclipse oppure cliccare sul progetto nel package explorer sulla sinistra con tasto destro/Source/Format
un altro problemino che0 ho riscontrato (forse a causa di una vecchia versione di ADT) e' che il plug-in cerca il file adb nella directory tools dell'SDK mentre nelle versioni piu' recenti e' stato spostato sotto platform-tools. Si puo' risolvere in modo un po' brutale copiando il file adb nella directory tools
Un esempio per usare il telefono come trackpad.
Non ho trovato nell'installazione di Python una funzione si legasse agli eventi del touchscreen cosi' mi sono orientato alla versione di Pygame per Android
a differenza di Py4A, per Pygame si deve creare una directory pygame sulla SD e creare una directory per ognuno degli script che si devono testare. All'interno di questa directory si deve inserire un file icona, il file script che si deve necessariamente chiamare main.py ed un file denominato anrdroid.txt (per i dettagli consultare il sito)
A differenza di Py4A non e' possibile importare in modulo bluetooth per cui lo scambio dati e' avvenuta in UDP
Di seguito il programma server che replica a computer i movimenti del dito su telefono