Oppure

Loading
07/04/09 15:30
valentino86
Ciao a tutti sono nuovissimo del forum e non molto pratico del c++.
Dovrei acquisire dei valori da un accelerometro della Phidget, e lavorare su quei dati in real time, quindi mentre acquisisce dati devo elaborarli contemporaneamente. Il problema è che la API della phidget mi fa entrare in un loop dove il programma aspetta sempre un'accelerazione da rilevare e non fa nient'altro, e quindi non posso lavorare subito sulle variabili ma gli devo dire di non acquisire più accelerazioni. Come si può fare??

Posto il programma dove ho inserito anche la libreria time.h per avere anche un riferimento di tempo, e un file pdf con le API

#include "stdafx.h"
#include "phidget21.h"
#include <time.h>

//callback that will run if the acceleration changes by more than the Acceleration trigger.
//Index - Index of the axis that is generating the event, Value - the value read by the accelerometer axis
int __stdcall accel_AccelChangeHandler(CPhidgetAccelerometerHandle WGT, void *userptr, int Index, double Value)
{
	clock_t clock();
	printf("Time: %i Axis: %i Accel: %6f\n",clock()/CLOCKS_PER_SEC, Index, Value);
    
	return 0;
}

//main entry point to the program
int _tmain(int argc, _TCHAR* argv[])
{
	int result;
	const char *err;

	//Declare an accelerometer handle
	CPhidgetAccelerometerHandle accel = 0;
   
	//create the accelerometer object
	CPhidgetAccelerometer_create(&accel);

	//Impostando -1 apre il primo dispositivo disponibile
	CPhidget_open((CPhidgetHandle)accel, -1);

	//get the program to wait for an accelerometer device to be attached
	printf("Waiting for accelerometer to be attached.... \n\n");

	//Aspetta 10 secondi che venga connesso il dispositivo
	if((result = CPhidget_waitForAttachment((CPhidgetHandle)accel, 10000)))
		{	CPhidget_getErrorDescription(result, &err);
			printf("Problem waiting for attachment: %s\n", err);
			//Interruzione, spingere invio per continuare
			getchar();
			return 0;}

	//Imposta la sensibilità
	CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 0, 0.500);
	CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 1, 0.500);
	CPhidgetAccelerometer_setAccelerationChangeTrigger(accel, 2, 0.500);

	//Registra un evento se l'accelerazione cambia oltre una certa soglia.
	CPhidgetAccelerometer_set_OnAccelerationChange_Handler(accel, accel_AccelChangeHandler, NULL);

	//Interruzione
	getchar();

	//Chiude il dispositivo e l'oggetto
	printf("Closing...\n");
	CPhidget_close((CPhidgetHandle)accel);
	CPhidget_delete((CPhidgetHandle)accel);

	//Interruzione
	getchar();

	return 0;
}

aaa
07/04/09 17:08
HeDo
Postato originariamente da valentino86:

Ciao a tutti sono nuovissimo del forum e non molto pratico del c++.
Dovrei acquisire dei valori da un accelerometro della Phidget, e lavorare su quei dati in real time, quindi mentre acquisisce dati devo elaborarli contemporaneamente. Il problema è che la API della phidget mi fa entrare in un loop dove il programma aspetta sempre un'accelerazione da rilevare e non fa nient'altro, e quindi non posso lavorare subito sulle variabili ma gli devo dire di non acquisire più accelerazioni. Come si può fare??

Posto il programma dove ho inserito anche la libreria time.h per avere anche un riferimento di tempo, e un file pdf con le API


probabilmente l'applicazione deve essere multithread, in modo da avere un thread di controllo sempre attivo che termina il programma se si vuole terminare l'acquisizione dei dati...

poi non saprei, c'è da leggere approfonditamente la documentazione di quelle api
aaa
07/04/09 18:12
valentino86
qui si trova la API ma non la trovo cosi esaustiva. Praticamente non dice nulla.

aaa