accgraphsimMentre cercavo come utilizzare l’accellerometro del mio MacBook mi sono imbattuto in questo articolo che spiega come simulare l’accelerometro sul nostro IPhone Simulator visto che non c’è di default, senza l’ausilio di un vero IPhone. Come spiega Karan Vasudeva, autore dell’articolo, bisogna scaricare UniMotion che legge l’SMS (Sudden Motion Sensor) del Mac e che ritorna i valori in vari formati. Poi bisogna scaricare un’altro software, scritto da Otto Chrons, e che trovate qui. Quest’ultimo software e diviso in due parti, uno va installato sul simulatore e l’altro va incluso nei vostri programmi sotto forma di libreria semplicemente inserendo un

#import "AccelerometerSimulation.h"

a questo punto, sempre Karan, usa il suo script python che lega i 2 software e passa il risultato di UniMotion all’IPhone Simulator attraverso il codice di Otto. Ma come funziona e cosa centro io? Allora ricapitoliamo: il software di Otto, ACCSim, è diviso in 2 parti, un server e un client, il server sta in ascolto sulla porta 10552 in attesa di una stringa tipo:

ACC: , timestamp, x, y, z

il client invece e costituito in questo caso dallo script di Karan che raccoglie dalla periferica questa stringa e passata al server. A questo punto entro in gioco io, che grazie alla libreria python trovata, PyAppleSMS e di cui parlo nel post precedente, ho modificato lo script di Karan per utilizzare questo modulo in modo da rendere il tutto piu leggero e facile e con l’utilizzo di un unico script.
Per testare il tutto quindi scaricate il software di Otto, copiate ed incollate questo script python nel vostro editor preferito:

import sys, socket, time, traceback
import applesms

kCFAbsoluteTimeIntervalSince1970 = 978307200.0 # from CFDate.c

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('',0))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

while 1:
try:
x, y, z = map(lambda x: -1 * x, applesms.coords())
# change epoch to be compatible with CFAbsoluteTimeGetCurrent()
currentTime = time.time() - kCFAbsoluteTimeIntervalSince1970

accdata = ','.join(map(str,('ACC: 0',currentTime,x,y,z)))

sock.sendto(accdata, ('', 10552))
# print '% .2f % .2f % .2f' % (x, y, z)
except (ValueError, KeyboardInterrupt):
sock.close()
sys.exit(-1)
except applesms.error, e:
print 'An error occurred in PyAppleSMS module: %s' % str(e)
sys.exit(-1)
except:
traceback.print_exc()

che altro non è che lo script di Karan che però utilizza la libreria PyAppleSMS. Avviando AccelerometerGraph, un programma di esempio che trovate nella Knowledge Base di ADC e che vedete nell’immagine sopra, e lo script che trovate sopra vi accorgerete che funziona, non so quanta attendibilità può esserci nel formato fornito, ma so che funziona e legge i dati. Vi rimando alle pagine linkate quà e là per il post per le rispettve informazioni.
Spero di essere stato chiaro, se pero cosi non fosse sentitevi liberi di chiedere delucidazioni in merito, i commenti esistono per questo!!

EDIT: Funziona anche con le nuove versioni dell’IPhone SDK 3.0

– Fine –
Post scritto con KBlogo