Skip to content

Migração dos Motores

Esta seção aborda a migração do código relacionado aos motores do NXT para o EV3.

Diferenças Principais

No RobotC, os motores são acessados diretamente através de arrays pré-definidos, como motor[], onde cada índice corresponde a uma porta específica do motor. Por exemplo, motor[motorA] acessa o motor conectado à porta A.

Já no EV3, os motores são representados como objetos de classes específicas, como ev3dev::motor::large_motor ou ev3dev::motor::medium_motor. Cada motor é instanciado com base na porta à qual está conectado, utilizando a nomenclatura do sistema de arquivos do Linux. Além disso, o motor não é controlado diretamente por valores numéricos, mas sim métodos que definem comportamentos específicos, como velocidade, posição, etc.

Tabela de Equivalências

Ação NXT EV3
Girar Continuamente motor[motorA] = 50; large_motor motorA("outA"); motorA.set_speed_sp(500); motorA.run_forever();
Parar Motor motor[motorA] = 0; motorA.stop();
Ler Enconder long valor = nMotorEncoder[motorA]; int valor = motorA.position();
Redefinir Encoder nMotorEncoder[motorA] = 0; motorA.set_position(0);

Exemplo de Código

NXT (RobotC)

task main() {
    // Girar motor A a 50% de potência
    motor[motorA] = 50;
    wait1Msec(2000); // Espera por 2 segundos
    // Parar o motor
    motor[motorA] = 0;
    // Ler o valor do encoder
    long valor = nMotorEncoder[motorA];
    // Redefinir o encoder
    nMotorEncoder[motorA] = 0;
}

Equivalente EV3 (EV3DEV C++)

#include "ev3dev.h"
#include <thread>
#include <chrono>

using namespace ev3dev;

int main() {
  // 1. Instanciar o motor na porta B
  motor motor_b(OUTPUT_B);
  // 2. Definir velocidade (ex: 450 graus/seg)
  motor_b.set_speed_sp(450);
  // 3. Ligar o motor
  motor_b.run_forever();
  // 4. Esperar 2 segundos (usando C++ moderno)
  std::this_thread::sleep_for(std::chrono::seconds(2));
  // 5. Parar o motor
  motor_b.stop();
  return 0;
}