2016-04-20 8 views
1

Ich möchte die Beschleunigungssensor-Abtastrate auf einem Samsung Gear S2 berechnen. Mit dem folgenden Code als Beispiel https://developer.tizen.org/ko/community/code-snippet/native-code-snippet/simple-sensors-application-wearable?langredirect=1, erstellte ich die App.So verbessern Sie die Samplingrate des Gear S2 Beschleunigungssensors

I den Rückruf mit 10ms

/* Register a callback if a sensor event is detected (sensor value changed) */ 
    ret = sensor_listener_set_event_cb((ad->listener), 10, on_sensor_event, ad); 

registrieren und I zu berechnen, die Abtastrate mit

unsigned long long int timestampArray[1000000]; 
int i = 1; 
unsigned int samplingFreq = 1; 

/* Callback for whenever a sensor event is detected (such as value changed). It is called whenever such an event is detected */ 
void on_sensor_event(sensor_h sensor, sensor_event_s *event, void *data) { 
appdata_s *ad = data; 

char buf[1024]={0}; 
char tempbuf[1024]={0}; 

sensor_type_e type; 
sensor_get_type(sensor, &type); 

//Check the sensor type of the sensor event 
if(type == (ad->type)){ 

    timestampArray[i] = event->timestamp/1000; 
    if(i == 2) 
    { 
     samplingFreq = timestampArray[i]-timestampArray[i-1]; 
    } 

    i++; 

    snprintf(tempbuf, 1023, "F= %d<br/>", samplingFreq); 
    strcat(buf, tempbuf); 

    elm_object_text_set(ad->label, buf); 
} 
} 

Damit bleibt das Beschleunigungs Abtastfrequenz bei etwa 50 Hz (so eine Probe jedes 19-20 Frau).

Wissen Sie, warum ich nicht tiefer gehen kann? (Mein Ziel wäre 1 Probe alle 10ms - Minimum unterstützt)

Vielen Dank.

Dies ist meine erste Frage, daher würde ich mich freuen, Verbesserungsvorschläge zu erhalten.

Wissen: C - Anfänger, Tizen - Anfänger

+0

OT: In 'snprintf' hat der generierte String eine Länge von höchstens n-1, verwenden Sie 'sizeof tempbuf' statt '1023' –

Antwort

2

Die Funktion, die Sie für das Intervall beziehen ist nicht angemessen. Vielmehr sollten Sie die folgende Funktion für diesen Zweck verwenden:

error = sensor_listener_set_interval(listener, 10); 

oder

error = sensor_listener_set_interval(listener, 100); 

Sie das Protokoll mit dem folgenden Code überprüfen:

void on_sensor_event(sensor_h sensor, sensor_event_s * event, void * user_data) { 

dlog_print(DLOG_DEBUG, LOG_TAG, "Sensor Called- %llu<br/>", event->timestamp/1000); 
// Select a specific sensor with a sensor handle 

sensor_type_e type; 
sensor_get_type(sensor, & type); 

switch (type) { 
case SENSOR_ACCELEROMETER: 
    dlog_print(DLOG_INFO, LOG_TAG, "sensor data read successfully"); 

    char buf[1024]; 
    char tempbuf[1024]; 
    snprintf(buf, 1023, "Sensor data read successfully detected.<br/>"); 

    for (int i = 0; i < event->value_count; i++) { 
     snprintf(tempbuf, sizeof tempbuf, "Sensor value[%d] is - %f<br/>", i, event->values[i]); 
     strcat(buf, tempbuf); 
    } 

    snprintf(tempbuf, sizeof tempbuf, "Sensor timestamp is - %llu<br/>", event->timestamp); 
    strcat(buf, tempbuf); 

    snprintf(tempbuf, sizeof tempbuf, "Sensor accuracy is - %d<br/>", event->accuracy); 
    strcat(buf, tempbuf); 
    elm_object_text_set(event_label, buf); 

    break; 
default: 
    dlog_print(DLOG_ERROR, LOG_TAG, "Not an Accelerometer event"); 
} 

}

Ich hoffe, diese Lösung wird Ihrem Zweck dienen.