# data[].attributes.body
  /*
    Componentes usados:
    - Arduino Mega
    - 1 Monster Motor Shield
    - 1 MPU6050 (giroscopio)
    - Código Base Trio
  */

  #include <VirtualWire.h>
  #include <MPU6050_tockn.h>  // biblioteca do giroscopio
  #include <Wire.h>
  #include <AFMotor.h>

  //***********VELOCIDADES************
  #define VELOCIDADE_TOTAL 255 // Velocidade do motor

  //***********TEMPOS************
  #define tempo_espera 2000
  #define tempo_fase01 4000
  #define tempo_fase02 2000

  //***********ANGULOS************
  #define angulo_fase01

  char dados;
  MPU6050 mpu6050(Wire);

  int valor = 1;

void setup() {

  //Giroscopio
  Wire.begin();
  mpu6050.begin();

  //Monitor Serial
  Serial.begin(9600);

  // Módulo Radiofrequencia
  vw_set_tx_pin(53); //Pino de dados
  vw_setup(2000); //Velocidade de transmissão em bits por segundo
  dados = "R";
  // Estado inicial do motor (parado)
  digitalWrite(4, 0);
  digitalWrite(7, 0);
  digitalWrite(8, 0);
  digitalWrite(9, 0);

  delay(2000);

}

void loop() {

  mpu6050.update();
  float angulo = mpu6050.getAngleZ(); // a variavel angulo guarda o angulo que o giroscopio esta lendo

  if(valor == 1){
    analogWrite(5, VELOCIDADE_TOTAL);
    analogWrite(6, VELOCIDADE_TOTAL);

    mover_frente();
    delay(tempo_fase01);
    parar();
    delay(tempo_espera);
    valor = 2;
  }

  if(valor == 2){
    analogWrite(5, VELOCIDADE_TOTAL);
    analogWrite(6, VELOCIDADE_TOTAL);

    mover_direita();
    delay(tempo_fase02);
    parar();
    delay(tempo_espera);
    valor = 3;
  }
  delay(700);

/*
  mover_frente();
  delay(4000);

  parar();
  delay(2000);

  mover_tras();
  delay(4000);

  parar();
  delay(2000);

  vw_send((uint8_t *)dados, strlen(dados));
  vw_wait_tx(); //Aguarda o envio
  delay(20000);
*/

}

void mover_frente(){
  // motor 02
  digitalWrite(7, 0);
  digitalWrite(8, 1);

  // motor 01
  digitalWrite(4, 0);
  digitalWrite(9, 1);

}

void mover_tras(){
  // motor 02
  digitalWrite(7, 1);
  digitalWrite(8, 0);

  //motor 01
  digitalWrite(4, 1);
  digitalWrite(9, 0);

}

void parar(){
  //motor 02
  digitalWrite(7, 0);
  digitalWrite(8, 0);

  //motor 01
  digitalWrite(4, 0);
  digitalWrite(9, 0);

}

void mover_direita(){
 // motor 02
  digitalWrite(7, 0);
  digitalWrite(8, 1);

  // motor 01
  digitalWrite(4, 1);
  digitalWrite(9, 0);

}


void mover_esquerda(){
 // motor 02
  digitalWrite(7, 1);
  digitalWrite(8, 0);

  // motor 01
  digitalWrite(4, 0);
  digitalWrite(9, 1);

}

# data[].attributes.body
#include <AFMotor.h> // Biblioteca motor SHIELD

#define s1 53

#define s2 52

#define velocidade 100

AF_DCMotor motor1(1);

AF_DCMotor motor4(4);

void setup() {

//MOTOR velocidade

motor1.setSpeed(velocidade);

motor4.setSpeed(velocidade);

//******

//sensores de linha

pinMode(s1,INPUT);//Sensor 01

pinMode(s2,INPUT);//Sensor 02

//*******

}

void loop() {

bool valor1 = digitalRead(s1);//sensor de linha 01

bool valor2 = digitalRead(s2);//sensor de linha 02

if(valor1 0 && valor2 0){

mover_frente();

}

if(valor1 1 && valor2 0 ){

direita();

}

if(valor1 0 && valor2 1 ){

esquerda();

}

if(valor1 1 && valor2 1 ){

parar();

}

}

void mover_frente(){

motor1.run(FORWARD);

motor4.run(FORWARD);

}

void mover_tras(){

motor1.run(BACKWARD);

motor4.run(BACKWARD);

}

void esquerda(){

motor1.run(BACKWARD);

motor4.run(FORWARD);

}

void direita(){

motor1.run(FORWARD);

motor4.run(BACKWARD);

}

void parar(){

motor1.run(RELEASE);

motor4.run(RELEASE);

}

# data[].attributes.body
// ==========================================================================================
// Equipe IFBOTICS | Júlia Assis e Pedro Lucas | Instituto Federal da Bahia, campus Eunápolis
// ==========================================================================================

// ==========================================================================================
// Inclusão de Bibliotecas | Usadas para auxiliar na programação do Robô

  #include <MPU6050_tockn.h>  // biblioteca do giroscopio
  #include <Wire.h>           // biblioteca para o funcionamento do gisroscopio
  #include <HCSR04.h>         // biblioteca do sensor ultrassonico
  #include <AFMotor.h>        // biblioteca motor SHIELD

// ==========================================================================================

// ==========================================================================================
// Configuração do Robô | Tempos | Velocidade | Ângulos | Motor Shield

  //Sensor de Som
    #define som 51

  //Tempos
    #define tempo_01 700
    #define tempo_espera1 10000
    #define tempo_espera2 15000
    #define tempo_espera3 900

    #define t1 500
    #define t2 1000

  //velocidades
    #define velocidade 255

  //angulos
    // parte 01
    #define ang2 -40
    #define ang3 15
    #define ang4 -80
    #define ang5 80
    #define ang6 0
    // parte 02
    #define ang7 300
    #define ang8 0
    #define ang9 -150
    #define ang10 0

  // CONFIGURAÇÃO DOS MOTORES

    AF_DCMotor motor1(1);
    AF_DCMotor motor2(2);
    AF_DCMotor motor3(3);
    AF_DCMotor motor4(4);

  int valor = 1;                            // essa variavel permitira que as etapas da danca possam ir evoluindo

  MPU6050 mpu6050(Wire);                    // Inicializacao do giroscopio
  UltraSonicDistanceSensor distance(52,53); // Inicializacao do sensor ultrassonico

// ==========================================================================================

// ============================================
// Função de Inicialização

  void setup() {

    pinMode(som,INPUT);

  // Velocidade dos Motores
    motor1.setSpeed(velocidade);
    motor2.setSpeed(velocidade);
    motor3.setSpeed(velocidade);
    motor4.setSpeed(velocidade);

  // INICIALIZAÇÃO DO GIROSCÓPIO
    Wire.begin();
    mpu6050.begin();

  // TEMPO PARA INICIALIZAÇÃO
    delay(tempo_espera1);
  }

// ============================================

// ============================================
// Loop Principal

  void loop() {

    mpu6050.update();

    float distancia = distance.measureDistanceCm(); // a variavel distancia ira guardar a distancia que o sensor ultrassonico esta lendo
    int angulo = mpu6050.getAngleZ(); // a variavel angulo guarda o angulo que o giroscopio esta lendo

  //***********parte 01********************

    if(valor == 1){

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      valor = 2;

    }

    if(valor == 2){
      if(digitalRead(som)==HIGH){
        parar();
        delay(2000);

        direita();
        delay(500);

        parar();
        delay(2000);

        frente();
        delay(500);

        parar();
        delay(2000);

        esquerda();
        delay(500);

        parar();
        delay(2000);

        delay(tempo_espera2); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
        valor = 3;
      }
    }

  //***********parte 04*******************

    if(valor == 3){
      frente();
      delay(500);
      parar();
      delay(800);
      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(800);
      tras();
      delay(500);
      parar();
      delay(800);

      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(1000);

      valor = 4;
    }

    if(valor == 4){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 5;
      }else{
        esquerda();
      }
    }

    if(valor == 5){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 6;
      }else{
        direita();
      }
    }

    if(valor == 6){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 7;
      }else{
        esquerda();
      }
    }

    if(valor == 7){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 8;
      }else{
        direita();
      }
    }

    if(valor == 8){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 9;
      }else{
        esquerda();
      }
    }

    if(valor == 9){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 10;
      }else{
        direita();
      }
    }

    if(valor == 10){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 11;
      }else{
        esquerda();
      }
    }

    if(valor == 11){
      if(angulo <= ang6){
        parar();
        delay(1000); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
        valor = 12;

      }else{
        direita();
      }
    }
  //************parte 5****************************

    if(valor == 12){
      frente();
      delay(500);
      parar();
      delay(800);
      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(800);
      tras();
      delay(500);
      parar();
      delay(800);

      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(1000);

      valor = 13;
    }

    if(valor == 13){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 14;
      }else{
        esquerda();
      }
    }

    if(valor == 14){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 15;
      }else{
        direita();
      }
    }

    if(valor == 15){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 16;
      }else{
        esquerda();
      }
    }

    if(valor == 16){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 17;
      }else{
        direita();
      }
    }

    if(valor == 17){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 18;
      }else{
        esquerda();
      }
    }

    if(valor == 18){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 19;
      }else{
        direita();
      }
    }

    if(valor == 19){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 20;
      }else{
        esquerda();
      }
    }

    if(valor == 20){
      if(angulo <= ang6){
        parar();
        delay(3000);
        valor = 21;

      }else{
        direita();
      }
    }

  //***********parte 06 - FIM*******************

    if(valor == 21){ // Nessa parte os robos vão para frente e fazem uma dança deles
      frente();
      delay(700);
      parar();
      delay(800);

      esquerda();
      delay(500);
      parar();
      delay(800);
      direita();
      delay(500);
      parar();

      valor = 777;
    }
  }
// ============================================

// ==========================================================================================
// Funções de Movimento

  /* Abaixo temos todas as funções de:
      > Mover para frente
      > Mover para tras
      > Parar
      > Mover para esquerda
      > Mover para direita

    Essas função são chamadas no codigo acima, não precisando
    escrever muitos códigos repetidos

    FORWARD  = mover para frente
    BACKWARD = mover para tras
    RELEASE  = parar

  */

  void frente(){

    motor1.run(FORWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(FORWARD);

  }
  void tras(){

    motor1.run(BACKWARD);
    motor2.run(BACKWARD);
    motor3.run(BACKWARD);
    motor4.run(BACKWARD);

  }
  void esquerda(){

    motor2.run(BACKWARD);
    motor3.run(BACKWARD);

    motor4.run(FORWARD);
    motor1.run(FORWARD);

  }
  void direita(){

    motor2.run(FORWARD);
    motor3.run(FORWARD);

    motor4.run(BACKWARD);
    motor1.run(BACKWARD);

  }
  void parar(){

    motor1.run(RELEASE);
    motor2.run(RELEASE);
    motor3.run(RELEASE);
    motor4.run(RELEASE);

  }
// ==========================================================================================

# data[].attributes.body
// ==========================================================================================
// Equipe IFBOTICS | Júlia Assis e Pedro Lucas | Instituto Federal da Bahia, campus Eunápolis
// ==========================================================================================

// ==========================================================================================
// Inclusão de Bibliotecas | Usadas para auxiliar na programação do Robô

  #include <MPU6050_tockn.h>  // biblioteca do giroscopio
  #include <Wire.h>           // biblioteca para o funcionamento do gisroscopio
  #include <HCSR04.h>         // biblioteca do sensor ultrassonico
  #include <AFMotor.h>        // biblioteca motor SHIELD

// ==========================================================================================

// ==========================================================================================
// Configuração do Robô | Tempos | Velocidade | Ângulos | Motor Shield

  //Sensor de Som
    #define som 51

  //Tempos
    #define tempo_01 700
    #define tempo_espera1 10000
    #define tempo_espera2 15000
    #define tempo_espera3 900

    #define t1 500
    #define t2 1000

  //velocidades
    #define velocidade 255

  //angulos
    // parte 01
    #define ang2 -40
    #define ang3 15
    #define ang4 -80
    #define ang5 80
    #define ang6 0
    // parte 02
    #define ang7 300
    #define ang8 0
    #define ang9 -150
    #define ang10 0

  // CONFIGURAÇÃO DOS MOTORES

    AF_DCMotor motor1(1);
    AF_DCMotor motor2(2);
    AF_DCMotor motor3(3);
    AF_DCMotor motor4(4);

  int valor = 1;                            // essa variavel permitira que as etapas da danca possam ir evoluindo

  MPU6050 mpu6050(Wire);                    // Inicializacao do giroscopio
  UltraSonicDistanceSensor distance(52,53); // Inicializacao do sensor ultrassonico

// ==========================================================================================

// ============================================
// Função de Inicialização

  void setup() {

    pinMode(som,INPUT);

  // Velocidade dos Motores
    motor1.setSpeed(velocidade);
    motor2.setSpeed(velocidade);
    motor3.setSpeed(velocidade);
    motor4.setSpeed(velocidade);

  // INICIALIZAÇÃO DO GIROSCÓPIO
    Wire.begin();
    mpu6050.begin();

  // TEMPO PARA INICIALIZAÇÃO
    delay(tempo_espera1);
  }

// ============================================

// ============================================
// Loop Principal

  void loop() {

    mpu6050.update();

    float distancia = distance.measureDistanceCm(); // a variavel distancia ira guardar a distancia que o sensor ultrassonico esta lendo
    int angulo = mpu6050.getAngleZ(); // a variavel angulo guarda o angulo que o giroscopio esta lendo

  //***********parte 01********************

    if(valor == 1){

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      valor = 2;

    }

    if(valor == 2){
      if(digitalRead(som)==HIGH){
        parar();
        delay(2000);

        esquerda();
        delay(500);

        parar();
        delay(2000);

        frente();
        delay(500);

        parar();
        delay(2000);

        direita();
        delay(500);

        parar();
        delay(2000);

        delay(tempo_espera2); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
        valor = 3;
      }
    }

  //***********parte 04*******************

    if(valor == 3){
      frente();
      delay(500);
      parar();
      delay(800);
      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(800);
      tras();
      delay(500);
      parar();
      delay(800);

      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(1000);

      valor = 4;
    }

    if(valor == 4){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 5;
      }else{
        esquerda();
      }
    }

    if(valor == 5){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 6;
      }else{
        direita();
      }
    }

    if(valor == 6){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 7;
      }else{
        esquerda();
      }
    }

    if(valor == 7){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 8;
      }else{
        direita();
      }
    }

    if(valor == 8){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 9;
      }else{
        esquerda();
      }
    }

    if(valor == 9){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 10;
      }else{
        direita();
      }
    }

    if(valor == 10){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 11;
      }else{
        esquerda();
      }
    }

    if(valor == 11){
      if(angulo <= ang6){
        parar();
        delay(1000); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
        valor = 12;

      }else{
        direita();
      }
    }
  //************parte 5****************************

    if(valor == 12){
      frente();
      delay(500);
      parar();
      delay(800);
      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(800);
      tras();
      delay(500);
      parar();
      delay(800);

      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(1000);

      valor = 13;
    }

    if(valor == 13){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 14;
      }else{
        esquerda();
      }
    }

    if(valor == 14){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 15;
      }else{
        direita();
      }
    }

    if(valor == 15){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 16;
      }else{
        esquerda();
      }
    }

    if(valor == 16){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 17;
      }else{
        direita();
      }
    }

    if(valor == 17){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 18;
      }else{
        esquerda();
      }
    }

    if(valor == 18){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 19;
      }else{
        direita();
      }
    }

    if(valor == 19){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 20;
      }else{
        esquerda();
      }
    }

    if(valor == 20){
      if(angulo <= ang6){
        parar();
        delay(3000);
        valor = 21;

      }else{
        direita();
      }
    }

  //***********parte 06 - FIM*******************

    if(valor == 21){ // Nessa parte os robos vão para frente e fazem uma dança deles
      frente();
      delay(700);
      parar();
      delay(800);

      esquerda();
      delay(500);
      parar();
      delay(800);
      direita();
      delay(500);
      parar();

      valor = 777;
    }
  }
// ============================================

// ==========================================================================================
// Funções de Movimento

  /* Abaixo temos todas as funções de:
      > Mover para frente
      > Mover para tras
      > Parar
      > Mover para esquerda
      > Mover para direita

    Essas função são chamadas no codigo acima, não precisando
    escrever muitos códigos repetidos

    FORWARD  = mover para frente
    BACKWARD = mover para tras
    RELEASE  = parar

  */

  void frente(){

    motor1.run(FORWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(FORWARD);

  }
  void tras(){

    motor1.run(BACKWARD);
    motor2.run(BACKWARD);
    motor3.run(BACKWARD);
    motor4.run(BACKWARD);

  }
  void esquerda(){

    motor2.run(BACKWARD);
    motor3.run(BACKWARD);

    motor4.run(FORWARD);
    motor1.run(FORWARD);

  }
  void direita(){

    motor2.run(FORWARD);
    motor3.run(FORWARD);

    motor4.run(BACKWARD);
    motor1.run(BACKWARD);

  }
  void parar(){

    motor1.run(RELEASE);
    motor2.run(RELEASE);
    motor3.run(RELEASE);
    motor4.run(RELEASE);

  }
// ==========================================================================================

# data[].attributes.headline
Código ROBO 01 (100%) - ESSE CÓDIGO ESTÁ NOS DOIS ROBOS

# data[].attributes.subject
Código ROBO 01 (100%) - ESSE CÓDIGO ESTÁ NOS DOIS ROBOS

# data[].attributes.body
// ==========================================================================================
// Equipe IFBOTICS | Júlia Assis e Pedro Lucas | Instituto Federal da Bahia, campus Eunápolis
// ==========================================================================================

// ==========================================================================================
// Inclusão de Bibliotecas | Usadas para auxiliar na programação do Robô

  #include <MPU6050_tockn.h>  // biblioteca do giroscopio
  #include <Wire.h>           // biblioteca para o funcionamento do gisroscopio
  #include <HCSR04.h>         // biblioteca do sensor ultrassonico
  #include <AFMotor.h>        // biblioteca motor SHIELD

// ==========================================================================================

// ==========================================================================================
// Configuração do Robô | Tempos | Velocidade | Ângulos | Motor Shield

  //Sensor de Som
    #define som 51

  //Tempos
    #define tempo_01 700
    #define tempo_espera1 10000
    #define tempo_espera2 25000
    #define tempo_espera3 900

    #define t1 500
    #define t2 1000

  //velocidades
    #define velocidade 255

  //angulos
    // parte 01
    #define ang2 -40
    #define ang3 15
    #define ang4 -80
    #define ang5 80
    #define ang6 0
    // parte 02
    #define ang7 300
    #define ang8 0
    #define ang9 -150
    #define ang10 0

  // CONFIGURAÇÃO DOS MOTORES

    AF_DCMotor motor1(1);
    AF_DCMotor motor2(2);
    AF_DCMotor motor3(3);
    AF_DCMotor motor4(4);

  int valor = 1;                            // essa variavel permitira que as etapas da danca possam ir evoluindo

  MPU6050 mpu6050(Wire);                    // Inicializacao do giroscopio
  UltraSonicDistanceSensor distance(52,53); // Inicializacao do sensor ultrassonico

// ==========================================================================================

// ============================================
// Função de Inicialização

  void setup() {

    pinMode(som,INPUT);

  // Velocidade dos Motores
    motor1.setSpeed(velocidade);
    motor2.setSpeed(velocidade);
    motor3.setSpeed(velocidade);
    motor4.setSpeed(velocidade);

  // INICIALIZAÇÃO DO GIROSCÓPIO
    Wire.begin();
    mpu6050.begin();

  // TEMPO PARA INICIALIZAÇÃO
    delay(tempo_espera1);
  }

// ============================================

// ============================================
// Loop Principal

  void loop() {

    mpu6050.update();

    float distancia = distance.measureDistanceCm(); // a variavel distancia ira guardar a distancia que o sensor ultrassonico esta lendo
    int angulo = mpu6050.getAngleZ(); // a variavel angulo guarda o angulo que o giroscopio esta lendo

  //***********parte 01********************

    if(valor == 1){

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      valor = 2;

    }

    if(valor == 2){
      if(digitalRead(som)==HIGH){
        parar();
        delay(tempo_espera2); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
        valor = 3;
      }
    }

  //***********parte 04*******************

    if(valor == 3){
      frente();
      delay(500);
      parar();
      delay(800);
      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(800);
      tras();
      delay(500);
      parar();
      delay(800);

      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(1000);

      valor = 4;
    }

    if(valor == 4){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 5;
      }else{
        esquerda();
      }
    }

    if(valor == 5){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 6;
      }else{
        direita();
      }
    }

    if(valor == 6){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 7;
      }else{
        esquerda();
      }
    }

    if(valor == 7){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 8;
      }else{
        direita();
      }
    }

    if(valor == 8){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 9;
      }else{
        esquerda();
      }
    }

    if(valor == 9){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 10;
      }else{
        direita();
      }
    }

    if(valor == 10){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 11;
      }else{
        esquerda();
      }
    }

    if(valor == 11){
      if(angulo <= ang6){
        parar();
        delay(1000); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
        valor = 12;

      }else{
        direita();
      }
    }
  //************parte 5****************************

    if(valor == 12){
      frente();
      delay(500);
      parar();
      delay(800);
      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(800);
      tras();
      delay(500);
      parar();
      delay(800);

      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(1000);

      valor = 13;
    }

    if(valor == 13){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 14;
      }else{
        esquerda();
      }
    }

    if(valor == 14){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 15;
      }else{
        direita();
      }
    }

    if(valor == 15){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 16;
      }else{
        esquerda();
      }
    }

    if(valor == 16){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 17;
      }else{
        direita();
      }
    }

    if(valor == 17){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 18;
      }else{
        esquerda();
      }
    }

    if(valor == 18){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 19;
      }else{
        direita();
      }
    }

    if(valor == 19){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 20;
      }else{
        esquerda();
      }
    }

    if(valor == 20){
      if(angulo <= ang6){
        parar();
        delay(3000);
        valor = 21;

      }else{
        direita();
      }
    }

  //***********parte 06 - FIM*******************

    if(valor == 21){ // Nessa parte os robos vão para frente e fazem uma dança deles
      frente();
      delay(700);
      parar();
      delay(800);

      esquerda();
      delay(500);
      parar();
      delay(800);
      direita();
      delay(500);
      parar();

      valor = 777;
    }
  }
// ============================================

// ==========================================================================================
// Funções de Movimento

  /* Abaixo temos todas as funções de:
      > Mover para frente
      > Mover para tras
      > Parar
      > Mover para esquerda
      > Mover para direita

    Essas função são chamadas no codigo acima, não precisando
    escrever muitos códigos repetidos

    FORWARD  = mover para frente
    BACKWARD = mover para tras
    RELEASE  = parar

  */

  void frente(){

    motor1.run(FORWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(FORWARD);

  }
  void tras(){

    motor1.run(BACKWARD);
    motor2.run(BACKWARD);
    motor3.run(BACKWARD);
    motor4.run(BACKWARD);

  }
  void esquerda(){

    motor2.run(BACKWARD);
    motor3.run(BACKWARD);

    motor4.run(FORWARD);
    motor1.run(FORWARD);

  }
  void direita(){

    motor2.run(FORWARD);
    motor3.run(FORWARD);

    motor4.run(BACKWARD);
    motor1.run(BACKWARD);

  }
  void parar(){

    motor1.run(RELEASE);
    motor2.run(RELEASE);
    motor3.run(RELEASE);
    motor4.run(RELEASE);

  }
// ==========================================================================================

# data[].attributes.body
// ==========================================================================================
// Equipe IFBOTICS | Júlia Assis e Pedro Lucas | Instituto Federal da Bahia, campus Eunápolis
// ==========================================================================================

// ==========================================================================================
// Inclusão de Bibliotecas | Usadas para auxiliar na programação do Robô

  #include <MPU6050_tockn.h>  // biblioteca do giroscopio
  #include <Wire.h>           // biblioteca para o funcionamento do gisroscopio
  #include <HCSR04.h>         // biblioteca do sensor ultrassonico
  #include <AFMotor.h>        // biblioteca motor SHIELD

// ==========================================================================================

// ==========================================================================================
// Configuração do Robô | Tempos | Velocidade | Ângulos | Motor Shield

  //Sensor de Som
    #define som 51

  //Tempos
    #define tempo_01 700
    #define tempo_espera1 10000
    #define tempo_espera2 20000
    #define tempo_espera3 900

    #define t1 500
    #define t2 1000

  //velocidades
    #define velocidade 255

  //angulos
    // parte 01
    #define ang2 -20
    #define ang3 20
    #define ang4 -80
    #define ang5 80
    #define ang6 0
    // parte 02
    #define ang7 300
    #define ang8 0
    #define ang9 -150
    #define ang10 0

  // CONFIGURAÇÃO DOS MOTORES

    AF_DCMotor motor1(1);
    AF_DCMotor motor2(2);
    AF_DCMotor motor3(3);
    AF_DCMotor motor4(4);

  int valor = 1;                            // essa variavel permitira que as etapas da danca possam ir evoluindo

  MPU6050 mpu6050(Wire);                    // Inicializacao do giroscopio
  UltraSonicDistanceSensor distance(52,53); // Inicializacao do sensor ultrassonico

// ==========================================================================================

// ============================================
// Função de Inicialização

  void setup() {

    pinMode(som,INPUT);

  // Velocidade dos Motores
    motor1.setSpeed(velocidade);
    motor2.setSpeed(velocidade);
    motor3.setSpeed(velocidade);
    motor4.setSpeed(velocidade);

  // INICIALIZAÇÃO DO GIROSCÓPIO
    Wire.begin();
    mpu6050.begin();

  // TEMPO PARA INICIALIZAÇÃO
    delay(tempo_espera1);
  }

// ============================================

// ============================================
// Loop Principal

  void loop() {

    mpu6050.update();

    float distancia = distance.measureDistanceCm(); // a variavel distancia ira guardar a distancia que o sensor ultrassonico esta lendo
    int angulo = mpu6050.getAngleZ(); // a variavel angulo guarda o angulo que o giroscopio esta lendo

  //***********parte 01********************

    if(valor == 1){

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      frente();
      delay(t1);
      parar();
      delay(t2);

      tras();
      delay(t1);
      parar();
      delay(t2);

      valor = 2;

    }

    if(valor == 2){
      if(digitalRead(som)==HIGH){
        parar();
        delay(tempo_espera2); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
        valor = 3;
      }
    }

  //***********parte 04*******************

    if(valor == 3){
      frente();
      delay(500);
      parar();
      delay(800);
      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(800);
      tras();
      delay(500);
      parar();
      delay(800);

      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(1000);

      valor = 4;
    }

    if(valor == 4){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 6;
      }else{
        direita();
      }
    }

    if(valor == 6){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 7;
      }else{
        esquerda();
      }
    }

    if(valor == 7){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 8;
      }else{
        direita();
      }
    }

    if(valor == 8){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 9;
      }else{
        esquerda();
      }
    }

    if(valor == 9){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 10;
      }else{
        direita();
      }
    }

    if(valor == 10){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 11;
      }else{
        esquerda();
      }
    }

    if(valor == 11){
      if(angulo <= ang6){
        parar();
        delay(1000); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
        valor = 12;

      }else{
        direita();
      }
    }
  //************parte 5****************************

    if(valor == 12){
      frente();
      delay(500);
      parar();
      delay(800);
      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(800);
      tras();
      delay(500);
      parar();
      delay(800);

      frente();
      delay(500);
      parar();
      delay(800);

      tras();
      delay(500);
      parar();
      delay(1000);

      valor = 13;
    }

    if(valor == 13){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 14;
      }else{
        esquerda();
      }
    }

    if(valor == 14){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 15;
      }else{
        direita();
      }
    }

    if(valor == 15){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 16;
      }else{
        esquerda();
      }
    }

    if(valor == 16){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 17;
      }else{
        direita();
      }
    }

    if(valor == 17){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 18;
      }else{
        esquerda();
      }
    }

    if(valor == 18){
      if(angulo <= ang2){
        parar();
        delay(tempo_01);
        valor = 19;
      }else{
        direita();
      }
    }

    if(valor == 19){
      if(angulo >= ang3){
        parar();
        delay(tempo_01);
        valor = 20;
      }else{
        esquerda();
      }
    }

    if(valor == 20){
      if(angulo <= ang6){
        parar();
        delay(8000);
        valor = 21;

      }else{
        direita();
      }
    }

  //***********parte 06 - FIM*******************

    if(valor == 21){ // Nessa parte os robos vão para frente e fazem uma dança deles
      frente();
      delay(700);
      parar();
      delay(800);

      esquerda();
      delay(500);
      parar();
      delay(800);
      direita();
      delay(500);
      parar();

      valor = 777;
    }
  }
// ============================================

// ==========================================================================================
// Funções de Movimento

  /* Abaixo temos todas as funções de:
      > Mover para frente
      > Mover para tras
      > Parar
      > Mover para esquerda
      > Mover para direita

    Essas função são chamadas no codigo acima, não precisando
    escrever muitos códigos repetidos

    FORWARD  = mover para frente
    BACKWARD = mover para tras
    RELEASE  = parar

  */

  void frente(){

    motor1.run(FORWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(FORWARD);

  }
  void tras(){

    motor1.run(BACKWARD);
    motor2.run(BACKWARD);
    motor3.run(BACKWARD);
    motor4.run(BACKWARD);

  }
  void esquerda(){

    motor2.run(BACKWARD);
    motor3.run(BACKWARD);

    motor4.run(FORWARD);
    motor1.run(FORWARD);

  }
  void direita(){

    motor2.run(FORWARD);
    motor3.run(FORWARD);

    motor4.run(BACKWARD);
    motor1.run(BACKWARD);

  }
  void parar(){

    motor1.run(RELEASE);
    motor2.run(RELEASE);
    motor3.run(RELEASE);
    motor4.run(RELEASE);

  }
// ==========================================================================================

# data[].attributes.attachment_link.description
We’re currently checking your connection. This shouldn’t take long.If you keep getting this page, check if there’s a problem with Canva.

# data[].attributes.attachment_link.description
We’re currently checking your connection. This shouldn’t take long.If you keep getting this page, check if there’s a problem with Canva.

# data[].attributes.body
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0X27,16,2);

long randomNumber;      //Variable donde almacenaremos el numero aleatorio
int tiempo = 200;

byte ojo_abierto1[8] = {
  B01000,
  B00100,
  B00010,
  B10001,
  B01011,
  B00110,
  B01110,
  B11100
};

byte ojo_abierto2[8] = {
  B01000,
  B00111,
  B11111,
  B11100,
  B10001,
  B00111,
  B01111,
  B11111
};
byte ojo_abierto3[8] = {
  B00010,
  B11100,
  B11111,
  B00111,
  B10001,
  B11100,
  B11110,
  B11111
};


byte ojo_abierto4[8] = {
  B00010,
  B00100,
  B01000,
  B10001,
  B11010,
  B01100,
  B01110,
  B00111
};

byte ojo_abierto5[8] = {
  B11100,
  B01110,
  B00111,
  B00011,
  B00001,
  B00000,
  B00000,
  B00000
};

byte ojo_abierto6[8] = {
  B11111,
  B01111,
  B00111,
  B10001,
  B11100,
  B11111,
  B00111,
  B00000
};

byte ojo_abierto7[8] = {
  B11111,
  B11110,
  B11100,
  B10001,
  B00111,
  B11111,
  B11100,
  B00000
};

byte ojo_abierto8[8] = {
  B00111,
  B01110,
  B11100,
  B11000,
  B10000,
  B00000,
  B00000,
  B00000
};




byte ojo_cerrado1[8] = {
  B00000,
  B00000,
  B00000,
  B00001,
  B00011,
  B00111,
  B01111,
  B11111
};

byte ojo_cerrado2[8] = {
  B00000,
  B00111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111
};

byte ojo_cerrado3[8] = {
  B00000,
  B11100,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111
};

byte ojo_cerrado4[8] = {
  B00000,
  B00000,
  B00000,
  B10000,
  B11000,
  B11100,
  B11110,
  B11111
};

byte ojo_cerrado5[8] = {
  B11111,
  B01111,
  B00111,
  B01011,
  B10001,
  B00010,
  B00100,
  B01000
};

byte ojo_cerrado6[8] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B00111,
  B01000
};

byte ojo_cerrado7[8] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11100,
  B00010
};

byte ojo_cerrado8[8] = {
  B11111,
  B11110,
  B11100,
  B11010,
  B10001,
  B01000,
  B00100,
  B00010
};


void setup() {
 lcd.init();     // configuramos el LCD de 16x2
 lcd.backlight();
 lcd.clear();
 randomSeed(analogRead(A0));    //Establecemos la semilla en un pin analogico
}


void loop() {

   randomNumber = random(1,100);     //Genera un numero aleatorio entre 1 y 100
   delay(tiempo);
   if(randomNumber>=55){
    ojos_abiertos();
   }
   else{
    ojos_cerrados();
   }

}

void ojos_abiertos()
{
  lcd.createChar(1,ojo_abierto1);
  lcd.createChar(2,ojo_abierto2);
  lcd.createChar(3,ojo_abierto3);
  lcd.createChar(4,ojo_abierto4);
  lcd.createChar(5,ojo_abierto5);
  lcd.createChar(6,ojo_abierto6);
  lcd.createChar(7,ojo_abierto7);
  lcd.createChar(8,ojo_abierto8);

  lcd.setCursor(2,0);
  lcd.write(1);
  lcd.write(2);
  lcd.write(3);
  lcd.write(4);

  lcd.setCursor(2,1);
  lcd.write(5);
  lcd.write(6);
  lcd.write(7);
  lcd.write(8);


  lcd.setCursor(10,0);
  lcd.write(1);
  lcd.write(2);
  lcd.write(3);
  lcd.write(4);

  lcd.setCursor(10,1);
  lcd.write(5);
  lcd.write(6);
  lcd.write(7);
  lcd.write(8);

}

void ojos_cerrados()
{
  lcd.createChar(1,ojo_cerrado1);
  lcd.createChar(2,ojo_cerrado2);
  lcd.createChar(3,ojo_cerrado3);
  lcd.createChar(4,ojo_cerrado4);
  lcd.createChar(5,ojo_cerrado5);
  lcd.createChar(6,ojo_cerrado6);
  lcd.createChar(7,ojo_cerrado7);
  lcd.createChar(8,ojo_cerrado8);

  lcd.setCursor(2,0);
  lcd.write(1);
  lcd.write(2);
  lcd.write(3);
  lcd.write(4);

  lcd.setCursor(2,1);
  lcd.write(5);
  lcd.write(6);
  lcd.write(7);
  lcd.write(8);


  lcd.setCursor(10,0);
  lcd.write(1);
  lcd.write(2);
  lcd.write(3);
  lcd.write(4);

  lcd.setCursor(10,1);
  lcd.write(5);
  lcd.write(6);
  lcd.write(7);
  lcd.write(8);

}

# data[].attributes.body
inicialmente todos começam em fileira pra iniciar a danca

# data[].attributes.body
robos entrar em posicao

# data[].attributes.body
eu entrar em posição

# data[].attributes.body
esse é o código do robô 2 antes de colocarmos os sensores de som

# data[].attributes.attachment_link.readable_text
/*

  AVISOS:
    1 - melhorar o agulo de 90°, pois o robo nao está girando muito
    2 - ajustar todos os movimentos para ficar dançante comigo, com relacao ao tempo e cada movimento etc... 

*/

//BIBLIOTECAS UTILIZADAS

  #include <MPU6050_tockn.h>  // biblioteca do giroscopio
  #include <Wire.h>           // biblioteca para o funcionamento do gisroscopio 
  #include <HCSR04.h>         // biblioteca do sensor ultrassonico
  #include <AFMotor.h>        // biblioteca motor SHIELD

//___________________________________________

// MENU DE CONFIGURAÇÃO DO ROBO | Velocidades e angulos

  //Tempos
    #define tempo_01 700
    #define tempo_espera1 10000
    #define tempo_espera2 20000
    #define tempo_espera3 900
    
  
  //velocidades 
    #define velocidade 255
    #define velocidade_rotacao 00

  //angulos
    // parte 01
    #define ang0 -90
    #define ang1 -40

    #define ang2 -30
    #define ang3 15

    #define ang4 -80
    #define ang5 80
    #define ang6 0
    // parte 02 
    #define ang7 300
    #define ang8 0
    #define ang9 -150
    #define ang10 0
    // parte 03

//____________________________________________

// CONFIGURAÇÃO DOS MOTORES

  AF_DCMotor motor1(1);
  AF_DCMotor motor2(2);
  AF_DCMotor motor3(3);
  AF_DCMotor motor4(4);

//____________________________________________

int valor = 1;                            // essa variavel permitira que as etapas da danca possam ir evoluindo  

MPU6050 mpu6050(Wire);                    // Inicializacao do giroscopio
UltraSonicDistanceSensor distance(52,53); // Inicializacao do sensor ultrassonico

void setup() {

// VELOCIDADE DOS MOTORES

  motor1.setSpeed(velocidade);
  motor2.setSpeed(velocidade);
  motor3.setSpeed(velocidade);
  motor4.setSpeed(velocidade);

//__________________________________________

// INICIALIZAÇÃO DO GIROSCÓPIO

  Wire.begin();
  mpu6050.begin();

//_________________________________________

// TEMPO PARA INICIALIZAÇÃO
  delay(tempo_espera1);
//_________________________________________

}

void loop() {
  
  mpu6050.update();

  float distancia = distance.measureDistanceCm(); // a variavel distancia ira guardar a distancia que o sensor ultrassonico esta lendo
  int angulo = mpu6050.getAngleZ(); // a variavel angulo guarda o angulo que o giroscopio esta lendo
  
//***********parte 01********************

  if(valor == 1){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 2;
    }else{
      direita();
    }
  }

  if(valor == 2){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 3;
    }else{
      esquerda();
    }
  }

  if(valor == 3){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 4;
    }else{
      direita();
    }
  }

  if(valor == 4){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 5;
    }else{
      esquerda();
    }
  }

  //depois
  if(valor == 5){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 6;
    }else{
      direita();
    }
  }

  if(valor == 6){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 7;
    }else{
      esquerda();
    }
  }

  if(valor == 7){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 8;
    }else{
      direita();
    }
  }

  if(valor == 8){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 9;
    }else{
      esquerda();
    }
  }

//***********parte 02********************

  if(valor == 9){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 10;
    }else{
      direita();
    }
  }

  if(valor == 10){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 11;
    }else{
      esquerda();
    }
  }

  if(valor == 11){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 12;
    }else{
      direita();
    }
  }

  if(valor == 12){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 13;
    }else{
      esquerda();
    }
  }

  if(valor == 13){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 14;
    }else{
      direita();
    }
  }

  if(valor == 14){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 15;
    }else{
      esquerda();
    }
  }

  if(valor == 15){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 16;
    }else{
      direita();
    }
  }

  if(valor == 16){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 17;
    }else{
      esquerda();
    }
  }
  if(valor == 17){    
    if(angulo <= ang6){
      parar();
      delay(tempo_espera2); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
      valor = 18;

    }else{
      direita();  
    }
  }

//***********parte 04*******************

  if(valor == 18){ // Nessa parte os robos vão para frente e fazem uma dança deles
    frente();
    delay(500);
    parar();
    delay(800);
    frente();
    delay(500);
    parar();
    delay(800);

    tras();
    delay(500);
    parar();
    delay(800);
    tras();
    delay(500);
    parar();
    delay(800);

    frente();
    delay(500);
    parar();
    delay(800);
    
    tras();
    delay(500);
    parar();
    delay(1000);

    //voce pode colocar o vira vira aqui tambem
      
    valor = 20;
  }

  if(valor == 20){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 21;
    }else{
      esquerda();
    }
  }

  if(valor == 21){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 22;
    }else{
      direita();
    }
  }

  if(valor == 22){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 23;
    }else{
      esquerda();
    }
  }

  //depois
  if(valor == 23){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 24;
    }else{
      direita();
    }
  }

  if(valor == 24){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 25;
    }else{
      esquerda();
    }
  }

  if(valor == 25){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 26;
    }else{
      direita();
    }
  }

  if(valor == 26){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 27;
    }else{
      esquerda();
    }
  }

  if(valor == 27){    
    if(angulo <= ang6){
      parar();
      delay(1000); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
      valor = 29;

    }else{
      direita();  
    }
  }
//************parte 5****************************

  if(valor == 29){ // Nessa parte os robos vão para frente e fazem uma dança deles
    frente();
    delay(500);
    parar();
    delay(800);
    frente();
    delay(500);
    parar();
    delay(800);

    tras();
    delay(500);
    parar();
    delay(800);
    tras();
    delay(500);
    parar();
    delay(800);

    frente();
    delay(500);
    parar();
    delay(800);
    
    tras();
    delay(500);
    parar();
    delay(1000);

    //voce pode colocar o vira vira aqui tambem
      
    valor = 30;
  }

  if(valor == 30){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 31;
    }else{
      esquerda();
    }
  }

  if(valor == 31){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 32;
    }else{
      direita();
    }
  }

  if(valor == 32){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 33;
    }else{
      esquerda();
    }
  }

  //depois
  if(valor == 33){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 34;
    }else{
      direita();
    }
  }

  if(valor == 34){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 35;
    }else{
      esquerda();
    }
  }

  if(valor == 35){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 36;
    }else{
      direita();
    }
  }

  if(valor == 36){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 37;
    }else{
      esquerda();
    }
  }

  if(valor == 37){    
    if(angulo <= ang6){
      parar();
      delay(8000); 
      valor = 38;

    }else{
      direita();  
    }
  }

//***********parte 06 - FIM*******************
  
  // nessa parte todos vão meio que dizer tchaul, cada um se moverá para frente e vai se despedir
  // a ordem de despedida será, um robo e depois um humano

  if(valor == 38){ // Nessa parte os robos vão para frente e fazem uma dança deles
    frente();
    delay(700);
    parar();
    delay(800);

    esquerda();
    delay(500);
    parar();
    delay(800);
    direita();
    delay(500);
    parar();

    valor = 777;
  }

}


/*

  Abaixo temos todas as funções de:
    > Mover para frente
    > Mover para tras
    > Parar 
    > Mover para esquerda
    > Mover para direita
  
  Essas função são chamadas no codigo acima, não precisando
  escrever muitos códigos repetidos

  FORWARD  = mover para frente
  BACKWARD = mover para tras
  RELEASE  = parar 

*/

void frente(){

  motor1.run(FORWARD); 
  motor2.run(FORWARD);
  motor3.run(FORWARD); 
  motor4.run(FORWARD);

}
void tras(){
  
  motor1.run(BACKWARD); 
  motor2.run(BACKWARD);
  motor3.run(BACKWARD); 
  motor4.run(BACKWARD);

}
void esquerda(){
  
  motor2.run(BACKWARD); 
  motor3.run(BACKWARD); 

  motor4.run(FORWARD);
  motor1.run(FORWARD);

}
void direita(){
  
  motor2.run(FORWARD); 
  motor3.run(FORWARD); 
  
  motor4.run(BACKWARD);
  motor1.run(BACKWARD);

}
void parar(){
  
  motor1.run(RELEASE);  
  motor2.run(RELEASE);
  motor3.run(RELEASE); 
  motor4.run(RELEASE);

}

# data[].attributes.body
danca em sincronia

# data[].attributes.body
eu vou para tras e "chamo eles para frente"

# data[].attributes.body
passinho do avião

https://www.youtube.com/watch?v=AI2X-61zZd8

# data[].attributes.body
eu vou alinhar com os robôs e ficar de lado com eles

nessa parte eu vou para frente e para trás com eles em sincronia

(min 1:46) https://www.youtube.com/watch?v=AI2X-61zZd8

# data[].attributes.body
assim que finalizar o movimento acima eu e os robos vamos voltar para frente da plateia

# data[].attributes.body
estatua, um danca os outros paradors, depois um descongela e volta na sincrnia

# data[].attributes.attachment_link.readable_text
/*

  AVISOS:
    1 - melhorar o agulo de 90°, pois o robo nao está girando muito
    2 - ajustar todos os movimentos para ficar dançante comigo, com relacao ao tempo e cada movimento etc... 

*/

//BIBLIOTECAS UTILIZADAS

  #include <MPU6050_tockn.h>  // biblioteca do giroscopio
  #include <Wire.h>           // biblioteca para o funcionamento do gisroscopio 
  #include <HCSR04.h>         // biblioteca do sensor ultrassonico
  #include <AFMotor.h>        // biblioteca motor SHIELD

//___________________________________________

// MENU DE CONFIGURAÇÃO DO ROBO | Velocidades e angulos

  //Tempos
    #define tempo_01 700
    #define tempo_espera1 10000
    #define tempo_espera2 20000
    #define tempo_espera3 900
    
  
  //velocidades 
    #define velocidade 255
    #define velocidade_rotacao 00

  //angulos
    // parte 01
    #define ang0 -90
    #define ang1 -40

    #define ang2 -40
    #define ang3 15

    #define ang4 -80
    #define ang5 80
    #define ang6 0
    // parte 02 
    #define ang7 300
    #define ang8 0
    #define ang9 -150
    #define ang10 0
    // parte 03

//____________________________________________

// CONFIGURAÇÃO DOS MOTORES

  AF_DCMotor motor1(1);
  AF_DCMotor motor2(2);
  AF_DCMotor motor3(3);
  AF_DCMotor motor4(4);

//____________________________________________

int valor = 1;                            // essa variavel permitira que as etapas da danca possam ir evoluindo  

MPU6050 mpu6050(Wire);                    // Inicializacao do giroscopio
UltraSonicDistanceSensor distance(52,53); // Inicializacao do sensor ultrassonico

void setup() {

// VELOCIDADE DOS MOTORES

  motor1.setSpeed(velocidade);
  motor2.setSpeed(velocidade);
  motor3.setSpeed(velocidade);
  motor4.setSpeed(velocidade);

//__________________________________________

// INICIALIZAÇÃO DO GIROSCÓPIO

  Wire.begin();
  mpu6050.begin();

//_________________________________________

// TEMPO PARA INICIALIZAÇÃO
  delay(tempo_espera1);
//_________________________________________

}

void loop() {
  
  mpu6050.update();

  float distancia = distance.measureDistanceCm(); // a variavel distancia ira guardar a distancia que o sensor ultrassonico esta lendo
  int angulo = mpu6050.getAngleZ(); // a variavel angulo guarda o angulo que o giroscopio esta lendo
  
//***********parte 01********************

  if(valor == 1){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 2;
    }else{
      direita();
    }
  }

  if(valor == 2){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 3;
    }else{
      esquerda();
    }
  }

  if(valor == 3){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 4;
    }else{
      direita();
    }
  }

  if(valor == 4){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 5;
    }else{
      esquerda();
    }
  }

  //depois
  if(valor == 5){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 6;
    }else{
      direita();
    }
  }

  if(valor == 6){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 7;
    }else{
      esquerda();
    }
  }

  if(valor == 7){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 8;
    }else{
      direita();
    }
  }

  if(valor == 8){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 9;
    }else{
      esquerda();
    }
  }

//***********parte 02********************

  if(valor == 9){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 10;
    }else{
      direita();
    }
  }

  if(valor == 10){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 11;
    }else{
      esquerda();
    }
  }

  if(valor == 11){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 12;
    }else{
      direita();
    }
  }

  if(valor == 12){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 13;
    }else{
      esquerda();
    }
  }

  if(valor == 13){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 14;
    }else{
      direita();
    }
  }

  if(valor == 14){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 15;
    }else{
      esquerda();
    }
  }

  if(valor == 15){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 16;
    }else{
      direita();
    }
  }

  if(valor == 16){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 17;
    }else{
      esquerda();
    }
  }
  if(valor == 17){    
    if(angulo <= ang6){
      parar();
      delay(tempo_espera2); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
      valor = 18;

    }else{
      direita();  
    }
  }

//***********parte 04*******************

  if(valor == 18){ // Nessa parte os robos vão para frente e fazem uma dança deles
    frente();
    delay(500);
    parar();
    delay(800);
    frente();
    delay(500);
    parar();
    delay(800);

    tras();
    delay(500);
    parar();
    delay(800);
    tras();
    delay(500);
    parar();
    delay(800);

    frente();
    delay(500);
    parar();
    delay(800);
    
    tras();
    delay(500);
    parar();
    delay(1000);

    //voce pode colocar o vira vira aqui tambem
      
    valor = 20;
  }

  if(valor == 20){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 21;
    }else{
      esquerda();
    }
  }

  if(valor == 21){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 22;
    }else{
      direita();
    }
  }

  if(valor == 22){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 23;
    }else{
      esquerda();
    }
  }

  //depois
  if(valor == 23){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 24;
    }else{
      direita();
    }
  }

  if(valor == 24){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 25;
    }else{
      esquerda();
    }
  }

  if(valor == 25){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 26;
    }else{
      direita();
    }
  }

  if(valor == 26){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 27;
    }else{
      esquerda();
    }
  }

  if(valor == 27){    
    if(angulo <= ang6){
      parar();
      delay(1000); // Nessa parte eu e julia vamos para frente e fazemos uma dança entre nós, os robos devem esperar nesse momento
      valor = 29;

    }else{
      direita();  
    }
  }
//************parte 5****************************

  if(valor == 29){ // Nessa parte os robos vão para frente e fazem uma dança deles
    frente();
    delay(500);
    parar();
    delay(800);
    frente();
    delay(500);
    parar();
    delay(800);

    tras();
    delay(500);
    parar();
    delay(800);
    tras();
    delay(500);
    parar();
    delay(800);

    frente();
    delay(500);
    parar();
    delay(800);
    
    tras();
    delay(500);
    parar();
    delay(1000);

    //voce pode colocar o vira vira aqui tambem
      
    valor = 30;
  }

  if(valor == 30){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 31;
    }else{
      esquerda();
    }
  }

  if(valor == 31){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 32;
    }else{
      direita();
    }
  }

  if(valor == 32){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 33;
    }else{
      esquerda();
    }
  }

  //depois
  if(valor == 33){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 34;
    }else{
      direita();
    }
  }

  if(valor == 34){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 35;
    }else{
      esquerda();
    }
  }

  if(valor == 35){
    if(angulo <= ang2){
      parar();
      delay(tempo_01);
      valor = 36;
    }else{
      direita();
    }
  }

  if(valor == 36){
    if(angulo >= ang3){
      parar();
      delay(tempo_01);
      valor = 37;
    }else{
      esquerda();
    }
  }

  if(valor == 37){    
    if(angulo <= ang6){
      parar();
      delay(3000);
      valor = 38;

    }else{
      direita();  
    }
  }

//***********parte 06 - FIM*******************
  
  // nessa parte todos vão meio que dizer tchaul, cada um se moverá para frente e vai se despedir
  // a ordem de despedida será, um robo e depois um humano

  if(valor == 38){ // Nessa parte os robos vão para frente e fazem uma dança deles
    frente();
    delay(700);
    parar();
    delay(800);

    esquerda();
    delay(500);
    parar();
    delay(800);
    direita();
    delay(500);
    parar();

    valor = 777;
  }

}


/*

  Abaixo temos todas as funções de:
    > Mover para frente
    > Mover para tras
    > Parar 
    > Mover para esquerda
    > Mover para direita
  
  Essas função são chamadas no codigo acima, não precisando
  escrever muitos códigos repetidos

  FORWARD  = mover para frente
  BACKWARD = mover para tras
  RELEASE  = parar 

*/

void frente(){

  motor1.run(FORWARD); 
  motor2.run(FORWARD);
  motor3.run(FORWARD); 
  motor4.run(FORWARD);

}
void tras(){
  
  motor1.run(BACKWARD); 
  motor2.run(BACKWARD);
  motor3.run(BACKWARD); 
  motor4.run(BACKWARD);

}
void esquerda(){
  
  motor2.run(BACKWARD); 
  motor3.run(BACKWARD); 

  motor4.run(FORWARD);
  motor1.run(FORWARD);

}
void direita(){
  
  motor2.run(FORWARD); 
  motor3.run(FORWARD); 
  
  motor4.run(BACKWARD);
  motor1.run(BACKWARD);

}
void parar(){
  
  motor1.run(RELEASE);  
  motor2.run(RELEASE);
  motor3.run(RELEASE); 
  motor4.run(RELEASE);

}
