void updateAccelerometer(float * pitch, float * roll) { float Accelerometer_Data [3]; readAccelerometer(Accelerometer_Data); for(int i = 0; i < 3; i++) moving_filter(&buffer_list[i], &Accelerometer_Data[i]); calculate_Pitch(Accelerometer_Data, pitch); calculate_Roll(Accelerometer_Data, roll); moving_filter(&buffer_list[3], pitch); moving_filter(&buffer_list[4], roll); }
String Accelerometer::processor() { String output; for (int axis=0; axis<3; axis++) { average_delta_a[axis] = 0; } for (int i=0; i<iterations; i++) { readAccelerometer(); for (int axis=0; axis<3; axis++) { //delta_a[axis][i]=current_acceleration[axis] - previous_acceleration[axis]; //average_delta_a[axis] += delta_a[axis][i]; average_delta_a[axis] += current_acceleration[axis] - previous_acceleration[axis]; } delay(delta); } for (int axis=0; axis<3; axis++) { average_delta_a[axis] = average_delta_a[axis] / iterations; if (abs(average_delta_a[axis]) > mThreshold && (millis() - previous_event_time[axis]) > mEventThreshold) { if (previous_event[axis] > 0 && average_delta_a[axis] < 0) { // turning point output = axes[axis][0]; } else if (previous_event[axis] < 0 && average_delta_a[axis] > 0) { // turning point output = axes[axis][1]; } previous_event_time[axis] = millis(); // update last event previous_event[axis] = average_delta_a[axis]; // store this last acceleration value } } // store previous acceleration for (int i=0; i<NELEMS(current_acceleration); i++) { previous_acceleration[i] = current_acceleration[i]; } return output; }
Window::Window(QWidget* parent) : QWidget(parent) { QGridLayout* grid = new QGridLayout; grid->addWidget(createAccelerometerGroup(), 0, 0); grid->addWidget(createGyroscopeGroup(), 0, 1); grid->addWidget(createMagnetometerGroup(), 1, 0); grid->addWidget(createButtonsGroup(), 1, 1); setLayout(grid); setWindowTitle(tr("psmoveosc")); resize(480, 320); psm = new PSMoveQt(0); psm->setColor(Qt::red); psm->setEnabled(true); connect(psm, SIGNAL(accelerometerChanged()), this, SLOT(readAccelerometer())); connect(psm, SIGNAL(gyroChanged()), this, SLOT(readGyro())); connect(psm, SIGNAL(magnetometerChanged()), this, SLOT(readMagnetometer())); connect(psm, SIGNAL(triggerChanged()), this, SLOT(setTrigger())); connect(psm, SIGNAL(buttonPressed(int)), this, SLOT(onButton(int))); connect(psm, SIGNAL(buttonReleased(int)), this, SLOT(onButton(int))); }