#include "view.h"
#include "log.h"
+#define AVERAGE_COUNT 11
+#define BASE_VALUE 100
+
static void __finalize(void);
static void __start_sensing(void);
static void __stop_sensing(void);
+static void __initialize_average_value_info();
static void __sensor_value_changed_cb(sensor_h sensor, sensor_event_s *event, void *data);
+typedef struct _average_value_info {
+ int servo[11];
+ int speed[11];
+ int servo_sum;
+ int speed_sum;
+ int front;
+ bool ready_to_send;
+} average_value_info;
+
static struct __accel_info_s {
resource_info *sensor_info;
+ average_value_info avr_val;
} accel_info = {
.sensor_info = NULL,
+ .avr_val = { 0, },
};
resource_info *resource_accelerometer_init_sensor(resource_info *sensor_info)
}
resource_info_free(accel_info.sensor_info);
+ __initialize_average_value_info();
}
static void __sensor_value_changed_cb(sensor_h sensor, sensor_event_s *event, void *data)
{
_D("Time: [%llu], X: [%f], Y: [%f]", event->timestamp, event->values[0], event->values[1]);
+ accel_info.avr_val.servo_sum -= accel_info.avr_val.servo[accel_info.avr_val.front];
+ accel_info.avr_val.speed_sum -= accel_info.avr_val.speed[accel_info.avr_val.front];
+
+ accel_info.avr_val.servo[accel_info.avr_val.front] = event->values[0] * -BASE_VALUE;
+ accel_info.avr_val.speed[accel_info.avr_val.front] = event->values[1] * -BASE_VALUE;
+
+ accel_info.avr_val.servo_sum += accel_info.avr_val.servo[accel_info.avr_val.front];
+ accel_info.avr_val.speed_sum += accel_info.avr_val.speed[accel_info.avr_val.front];
+
+ accel_info.avr_val.front++;
+
+ if (accel_info.avr_val.front >= AVERAGE_COUNT)
+ accel_info.avr_val.ready_to_send = 1;
+
+ if (accel_info.avr_val.front % AVERAGE_COUNT == 0) {
+ accel_info.avr_val.front = 1;
+ }
+
+ if (!accel_info.avr_val.ready_to_send)
+ return;
+
commu_data_s temp = { NULL, NULL };
- temp.servo = event->values[0] * -100;
- temp.speed = event->values[1] * -100;
+ temp.servo = accel_info.avr_val.servo_sum / 10;
+ temp.speed = accel_info.avr_val.speed_sum / 10;
+
+ _D("AVERAGE --- Time: [%llu], Servo: [%d], Speed: [%d]", event->timestamp, temp.servo, temp.speed);
view_update_view_with_data((void *)&temp);
communication_center_send_data((void *)&temp);
}
}
+static void __initialize_average_value_info(void)
+{
+ memset(&(accel_info.avr_val), 0, sizeof(accel_info.avr_val));
+}
+
static void __stop_sensing(void)
{
int ret = 0;
view_update_view_with_data((void *)&temp);
communication_center_send_data((void *)&temp);
+ __initialize_average_value_info();
}