/* BipedeRobot3_Cammina.nqc      Gennaio 2006
   Questo programma utilizza:
   Morore_A per muovere il corpo del robot
   Morore_B
   Morore_C per far muovere le gambe del robot
   Sensore_1 (luce) per controllare la rotazione delle gambe
   Sensore_2 (contatto) per controllare il movimento del corpo a Dx
   Sensore_3 (contatto) per controllare il movimento del corpo a Sx
*/

// Definizioni delle costanti del programma
#define ROTAZIONE 48            // valore di rotazione OK
// N.B. Regolare il valore di ROTAZIONE in base alla luce ambiente
#define VERTICALE 90            // tempo per robot in verticale
#define ROTAZIONE_INIZIALE 30   // tempo di rotazione iniziale

task main()
{ // ********************  Configurazione sensori  ********************
  SetSensorType(SENSOR_1, SENSOR_TYPE_LIGHT);    // sensore luce
  SetSensorMode(SENSOR_1, SENSOR_MODE_PERCENT);
  SetSensorType(SENSOR_2, SENSOR_TYPE_TOUCH);    // sensore contatto Dx
  SetSensorMode (SENSOR_2, SENSOR_MODE_BOOL);
  SetSensorType(SENSOR_3, SENSOR_TYPE_TOUCH);    // sensore contatto Sx
  SetSensorMode (SENSOR_3, SENSOR_MODE_BOOL);
  // ***********************  INIZIO PROGRAMMA  ***********************
  PlaySound (SOUND_FAST_UP);                     // Suono AVVIO
  repeat (4)                                     // Ripeti 4 volte il ciclo
  {
    OnFwd(OUT_A);                                // Inclina corpo a Dx ...
    until (SENSOR_2 == 1);                       // ... fino al sensore 2
    Off(OUT_A);                                  // Stop inclinazione a Dx
    OnRev(OUT_C);                                // Robot avanti per ...
    Wait(ROTAZIONE_INIZIALE);                    // ...  ??? secondi e ...
    until (SENSOR_1 == ROTAZIONE);               // ... fino alla rotazione OK
    Off(OUT_C);                                  // Stop robot avanti
    OnRev(OUT_A);                                // Inclina corpo a Sx ...
    until(SENSOR_3 == 1);                        // ... fino al sensore 3
    Off(OUT_A);                                  // Stop inclinazione a Sx
    OnRev(OUT_C);                                // Robot avanti per ...
    Wait(ROTAZIONE_INIZIALE);                    // ...  ??? secondi e ...
    until (SENSOR_1 == ROTAZIONE);               // ... fino alla rotazione OK
    Off(OUT_C);                                  // Stop robot avanti
  }                                              // fine 4 cicli
  OnFwd(OUT_A);                                  // Inclina il robot  fino ...
  Wait(VERTICALE);                               // ... alla posizione verticale
  Off(OUT_A);                                    // Stop inclinazione
  PlaySound (SOUND_DOWN);                        // Suono FINE
}
// *****************************  FINE PROGRAMMA  *****************************
