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)); }
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; } } }