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;
}
Ejemplo n.º 3
0
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)));

}