void AX12::endlessTurn (int velocidad) {                    // setea la velocidad, en el modo "endless turn"
    bool direccion = sign2bin (velocidad);
    writeInfo (MOVING_SPEED, abs(velocidad)|((direccion^inverse)<<10));
}
Exemplo n.º 2
0
void RemoteControl::osciladores (byte comando) {
	
	//* durante el play se enlentece mucho
	// hay que hacer un flag is_playing para que las teclas adopten otra función
	// y falta la new feature: el damping factor
	//* las unidades de amplitud de rotación son muy grandes --> corregido?
	//* y las de amplitud de centro son muy chicas --> idem ?
	// falta una manera rápida de resetear todo --> hecho, aunque chancho
	// un boton reset y un boton "randomize" --> encaminado
	// en los modos normales de traslación y rotación, que vuelva a pos_ref en forma de oscilaciones dampereadas
	// que en las repeticiones aumente progresivamente el inc.
		
	static byte parametro = TRASL_X;
	byte sub_parametro;
	char increment = 0;
		
	switch (comando) {
		case RC_UP:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro = TRASL_Z;
			sub_parametro = AMP;
			increment = 1;
			break;
		
		case RC_DOWN:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro = TRASL_Z;
			sub_parametro = AMP;
			increment = -1;
			break;
		
		case RC_RIGHT:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro = TRASL_X;
			sub_parametro = AMP;
			increment = 1;
			break;
	
		case RC_LEFT:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro = TRASL_X;
			sub_parametro = AMP;
			increment = -1;
			break;

		case RC_MTS:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro = TRASL_Y;
			sub_parametro = AMP;
			increment = -1;
			break;
			
		case RC_MENU:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro = TRASL_Y;
			sub_parametro = AMP;
			increment = 1;
			break;
			
		case RC_CCTTX:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro %= 3;
			sub_parametro = BROWN;
			increment = -1;
			break;
			
		case RC_EXIT:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro %= 3;
			sub_parametro = BROWN;
			increment = 1;
			break;
			
		case RC_ENTER1:
			if (!isMoving) {
				texto1 = "PLAY";
				mov.oscilador (1, 32767);
				isMoving = true;
			} else {
				texto1 = "STOP";
				mov.stop();
				isMoving = false;
			}
			break;

		/* esto es más provisorio */
		////////////////////////////
		case 0:
			if (!isMoving) {
				texto1 = "Reset";
				mov.osc_reset ();
			} 
			break;
		
		case 1:
			if (!isMoving) {
				texto1 = "Random";    
				mov.osc_randomize (3, 1);      // en el futuro va a haber randomize sólo traslación, sólo rotación, etc
			}                           // ya está implementado a nivel de la clase "Movimiento"
			break;
		/////////////////////////////	
		/* termina zona de números */	
			
		case RC_CH_UP:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro %= 3;
			sub_parametro = PHASE;
			increment = 1;
			break;
			
		case RC_CH_DN:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro %= 3;
			sub_parametro = PHASE;
			increment = -1;
			break;
		
		case RC_VOL_UP:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro %= 3;
			sub_parametro = FREQ;
			increment = 1;
			break;
			
		case RC_VOL_DN:
			if (pantalla.isBusy()) {break;}
			retardo = true;
			parametro %= 3;
			sub_parametro = FREQ;
			increment = -1;
			break;
			
	}
	
	if (increment != 0) {
		float value = increment * inc;
		switch (modo) {
			case OSCILADORES1:
				parametro += TRASL_X;
				texto1 = "T.";
				break;
			case OSCILADORES2:
				parametro += CENTRO_X;
				texto1 = "C.";
				if (sub_parametro == AMP) {value *= 2;}         // ?
				break;
			case OSCILADORES3:
				parametro = 2-parametro;   // esto invierte los ejes X y Z 
				parametro += ROT_X;
				texto1 = "R.";
				if (sub_parametro == AMP) {value /= 15;}         // antes era * .1 (el 15 podría ser un #define, ya que aparece muchas veces)
				break;
		}
		switch (parametro % 3) {
			case TRASL_X: texto1 += "X."; break;
			case TRASL_Y: texto1 += "Y."; break;
			case TRASL_Z: texto1 += "Z."; break;
		}
		OSCILATOR osc = mov.get_oscilador (parametro);
		switch (sub_parametro) {
			case AMP: 
				value += osc.amp;
				texto1 += ("amp " + float2string (value)); 
				mov.set_amp (parametro, value);
				break;
			case FREQ: 
				value /= 5;
				value += osc.freq;
				texto1 += ("frq " + float2string (value)); 
				mov.set_freq (parametro, value);
				break;
			case PHASE: 
				value /= 5;
				value += osc.phase;
				texto1 += ("phs " + float2string (value)); 
				mov.set_phase (parametro, value);
				break;
			case BROWN: 
				bool brown = sign2bin (increment);
				texto1 += ("brw " + String (brown, BIN)); 
				mov.set_brown (parametro, brown);
				break;
		}
	}

}