Migração dos Sensores
Diferenças Principais
Assim como os motores, os sensores no NXT são acessados diretamente através de arrays pré-definidos, como SensorValue[]
, onde cada índice corresponde a uma porta específica do sensor. Por exemplo, SensorValue[S1]
acessa o sensor conectado à porta 1.
No EV3, os sensores são representados como objetos de classes específicas, como ev3dev::sensor::color_sensor
ou ev3dev::sensor::ultrasonic_sensor
. Cada sensor é instanciado com base na porta à qual está conectado, utilizando a nomenclatura do sistema de arquivos do Linux. A leitura dos valores dos sensores é feita através de métodos específicos dessas classes.
Tabela de Equivalências
Ação | NXT | EV3 |
---|---|---|
Ler Valor do Sensor Ultrassônico | SensorType[S2] = sensorSONAR; int dist = SensorValue[S2]; // Em cm |
ultrasonic_sensor us(INPUT_2); int dist = us.distance_centimeters(); |
Ler Valor do Sensor de Cor | SensorType[S3] = sensorCOLORFULL; int color = SensorValue[S3]; |
color_sensor cs(INPUT_3); int color = cs.color(); |
Configurar Sensor de Toque | SensorType[S1] = sensorEV3_TOUCH; |
touch_sensor ts(INPUT_1); |
Exemplo de Código
NXT (RobotC)
task main()
{
SensorType[S1] = sensorTouch;
while(SensorValue[S1] == 0)
{
// Espera
}
// Pressionado
}
Equivalente EV3 (EV3DEV C++)
#include "ev3dev.h"
using namespace ev3dev;
int main()
{
// 1. Instanciar o sensor de toque na porta 1
touch_sensor ts(INPUT_1);
// 2. Esperar em um loop enquanto não estiver pressionado
while( !ts.is_pressed() )
{
// É uma boa prática esperar um pouco em loops
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
// Pressionado
return 0;
}