// Step the motor toward the target
void myStepper::updateMotor() {

  // Are we allowed to move?
  if ( ! m_canMove )
    return;

  // How many steps do we need to move?
  int steps = m_tgtPos - m_curPos;
  
  // None? Done!
  if ( steps == 0 ) {
    m_canMove = false;
    coilsOff();
    return;
  }

  // Figure out which way we need to go...
  int dir;
  
  if ( steps < 1 )
    dir = m_reverse?MC_DIR_FWD:MC_DIR_REV;
  else
    dir = m_reverse?MC_DIR_REV:MC_DIR_FWD;
  
  // Go!!!
  stepOnce(dir);
}
Beispiel #2
0
double Rom::integrate_dumb(double a, double b, double eps){	// Trapezregel mit Romberg
	
	extrapol[0] = stepInit();				// = T[0,0]
	extrapol[1] = 1.0/0.0;					// = infinity
	
	print();						// Ausgabe
	
	while( fabs(extrapol[0] - extrapol[1]) > 3 * eps ){	// Vergleich von T[index,0] und T[index-1,0]
		index ++;
		extrapol[1] = extrapol[0];			// Speichern von T[index-1,0]
		extrapol[0] = stepOnce();			// Berechnen und Speichern von T[index,0]
		print();					// Ausgabe
	}
	
	return extrapol[0];
}
Beispiel #3
0
double Rom::extrapolate(){		
	index ++;				

	double tdiag[2];				// array aus 2 Stellen
	
	tdiag[0] = extrapol[0];				// Speichern von T[index-1,0]
	extrapol[0] = stepOnce();			// = T[index,0]
	
	for(int j = 1; j<=index; j++){		
		tdiag[j % 2] = extrapol[j];	// Speichern von T[index-1,j] an der im j-ten Schritt nicht zu
						// benutzenden Stelle fuer den (j+1)-ten Schritt
		double hpart = double(numparts(index))/numparts(index-j);
							// = h[i-k]/h[i] nach evtl. Abkuerzung
		
		extrapol[j] = extrapol[j-1] + (extrapol[j-1]-tdiag[(j-1)%2])/(hpart*hpart -1);
	}						// Extrapolationsformel benutzen
	
	print();					//Ausgabe(index, extrapol)
	
	return fabs(extrapol[index]-extrapol[index-1]); 
							// Differenz von T[i,i] und T[i,i-1] nehmen (Error abschaetzen)
}