/* BipedeRobot3_Balla.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
   (N.B. sensore di luce non utilizzato, si puņ non collegare)
   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 VERTICALE 90            // Tempo per robot in verticale
#define BALLA 200               // Tempo max rotazione robot (casuale)

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  ***********************
  start canta;                                   // Avvio task canzone

  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(Random (BALLA));                        // ...  ??? secondi (random)
    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(Random (BALLA));                        // ...  ??? secondi (random)
    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
  StopAllTasks ();                               // Fine di tutti i task
}
// ****************************  FINE PROGRAMMA  ***************************

// *******************  INIZIO TASK CANZONE (I Flintstones) ****************
task canta()
  {
  Wait(96);
  PlayTone(196, 11); Wait(11);
  PlayTone(220, 11); Wait(11);
  PlayTone(247, 11); Wait(11);
  PlayTone(262, 11); Wait(11);
  PlayTone(294, 11); Wait(11);
  PlayTone(330, 11); Wait(11);
  PlayTone(349, 11); Wait(11);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(523, 43); Wait(43);
  PlayTone(440, 21); Wait(21);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(392, 43); Wait(43);
  PlayTone(349, 21); Wait(21);
  PlayTone(330, 11); Wait(11);
  Wait(11);
  PlayTone(330, 21); Wait(21);
  PlayTone(349, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(262, 43); Wait(43);
  PlayTone(294, 43); Wait(43);
  PlayTone(330, 96); Wait(96);
  PlayTone(196, 11); Wait(11);
  PlayTone(220, 11); Wait(11);
  PlayTone(247, 11); Wait(11);
  PlayTone(262, 11); Wait(11);
  PlayTone(294, 11); Wait(11);
  PlayTone(330, 11); Wait(11);
  PlayTone(349, 11); Wait(11);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(523, 43); Wait(43);
  PlayTone(440, 21); Wait(21);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(392, 43); Wait(43);
  PlayTone(349, 21); Wait(21);
  PlayTone(330, 11); Wait(11);
  Wait(11);
  PlayTone(330, 21); Wait(21);
  PlayTone(349, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(262, 43); Wait(43);
  PlayTone(294, 42); Wait(42);
  PlayTone(262, 118); Wait(118);
  Wait(54);
  PlayTone(494, 43); Wait(43);
  PlayTone(330, 21); Wait(21);
  Wait(43);
  PlayTone(523, 43); Wait(43);
  PlayTone(494, 21); Wait(21);
  PlayTone(494, 11); Wait(11);
  Wait(10);
  PlayTone(440, 21); Wait(21);
  Wait(1);
  PlayTone(440, 21); Wait(21);
  Wait(1);
  PlayTone(494, 21); Wait(21);
  Wait(1);
  PlayTone(440, 64); Wait(64);
  Wait(21);
  PlayTone(440, 42); Wait(42);
  Wait(1);
  PlayTone(294, 21); Wait(21);
  Wait(43);
  PlayTone(494, 43); Wait(43);
  PlayTone(440, 21); Wait(21);
  PlayTone(440, 11); Wait(11);
  Wait(11);
  PlayTone(392, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(440, 21); Wait(21);
  PlayTone(392, 11); Wait(11);
  PlayTone(196, 11); Wait(11);
  PlayTone(220, 11); Wait(11);
  PlayTone(247, 11); Wait(11);
  PlayTone(262, 11); Wait(11);
  PlayTone(294, 11); Wait(11);
  PlayTone(330, 11); Wait(11);
  PlayTone(349, 11); Wait(11);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(523, 43); Wait(43);
  PlayTone(440, 21); Wait(21);
  PlayTone(392, 42); Wait(42);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(392, 43); Wait(43);
  PlayTone(349, 21); Wait(21);
  PlayTone(330, 11); Wait(11);
  Wait(11);
  PlayTone(330, 21); Wait(21);
  PlayTone(349, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(262, 43); Wait(43);
  PlayTone(294, 42); Wait(42);
  Wait(1);
  PlayTone(262, 85); Wait(85);
  Wait(2829);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(523, 43); Wait(43);
  PlayTone(440, 21); Wait(21);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(392, 43); Wait(43);
  PlayTone(349, 21); Wait(21);
  PlayTone(330, 11); Wait(11);
  Wait(11);
  PlayTone(330, 21); Wait(21);
  PlayTone(349, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(262, 43); Wait(43);
  PlayTone(294, 43); Wait(43);
  PlayTone(330, 96); Wait(96);
  PlayTone(196, 11); Wait(11);
  PlayTone(220, 11); Wait(11);
  PlayTone(247, 11); Wait(11);
  PlayTone(262, 11); Wait(11);
  PlayTone(294, 11); Wait(11);
  PlayTone(330, 11); Wait(11);
  PlayTone(349, 11); Wait(11);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(523, 43); Wait(43);
  PlayTone(440, 21); Wait(21);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(392, 43); Wait(43);
  PlayTone(349, 21); Wait(21);
  PlayTone(330, 11); Wait(11);
  Wait(11);
  PlayTone(330, 21); Wait(21);
  PlayTone(349, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(262, 43); Wait(43);
  PlayTone(294, 42); Wait(42);
  PlayTone(262, 118); Wait(118);
  Wait(54);
  PlayTone(494, 43); Wait(43);
  PlayTone(330, 21); Wait(21);
  Wait(43);
  PlayTone(523, 43); Wait(43);
  PlayTone(494, 21); Wait(21);
  PlayTone(494, 11); Wait(11);
  Wait(10);
  PlayTone(440, 21); Wait(21);
  Wait(1);
  PlayTone(440, 21); Wait(21);
  Wait(1);
  PlayTone(494, 21); Wait(21);
  Wait(1);
  PlayTone(440, 64); Wait(64);
  Wait(21);
  PlayTone(440, 42); Wait(42);
  Wait(1);
  PlayTone(294, 21); Wait(21);
  Wait(43);
  PlayTone(494, 43); Wait(43);
  PlayTone(440, 21); Wait(21);
  PlayTone(440, 11); Wait(11);
  Wait(11);
  PlayTone(392, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(440, 21); Wait(21);
  PlayTone(392, 11); Wait(11);
  PlayTone(196, 11); Wait(11);
  PlayTone(220, 11); Wait(11);
  PlayTone(247, 11); Wait(11);
  PlayTone(262, 11); Wait(11);
  PlayTone(294, 11); Wait(11);
  PlayTone(330, 11); Wait(11);
  PlayTone(349, 11); Wait(11);
  PlayTone(392, 43); Wait(43);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(523, 43); Wait(43);
  PlayTone(440, 21); Wait(21);
  PlayTone(392, 42); Wait(42);
  PlayTone(262, 21); Wait(21);
  Wait(43);
  PlayTone(392, 43); Wait(43);
  PlayTone(349, 21); Wait(21);
  PlayTone(330, 11); Wait(11);
  Wait(11);
  PlayTone(330, 21); Wait(21);
  PlayTone(349, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(262, 43); Wait(43);
  PlayTone(294, 42); Wait(42);
  Wait(23);
  PlayTone(330, 21); Wait(21);
  PlayTone(349, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(262, 42); Wait(42);
  Wait(1);
  PlayTone(294, 42); Wait(42);
  Wait(22);
  PlayTone(330, 21); Wait(21);
  PlayTone(349, 21); Wait(21);
  PlayTone(392, 21); Wait(21);
  PlayTone(523, 42); Wait(42);
  PlayTone(587, 42); Wait(42);
  PlayTone(523, 86); Wait(86);
  Wait(21);
  PlayTone(523, 11); Wait(11);
  Wait(11);
  PlayTone(523, 11); Wait(11);
}
// ***************************  FINE TASK CANZONE  *************************
