Eventos#
Introducción#
Los eventos permiten ejecutar funciones en paralelo mediante objetos de evento. En lugar de llamar a las funciones secuencialmente, los eventos permiten registrarlas y activarlas todas a la vez. Cada función registrada se ejecuta en su propio hilo, lo que permite que el robot realice varias acciones simultáneamente, como hacer parpadear los LED y conducir.
A continuación se muestra una lista de métodos y constructores disponibles:
event
– Creates a new event object.Register Functions to an Event
– Registers a function to the event object.broadcast
– Triggers all registered functions in an event object to run in parallel.broadcastAndWait
– Triggers all registered functions in an event object and waits for them to finish before continuing.
Create an Event Object#
The event
constructor is used to create an event object that manages function execution in separate threads.
Usage:
event(callback);
Parámetro |
Descripción |
---|---|
|
Opcional. Una función que se define previamente para ejecutarse cuando se transmite el evento. |
// Blink the screen while moving forward
// Create moveEvent as an event object
event moveEvent = event();
void blinkScreen() {
while (true) {
Brain.Screen.clearScreen(red);
wait(0.5, seconds);
Brain.Screen.clearScreen();
wait(0.5, seconds);
}
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
moveEvent(blinkScreen);
moveEvent.broadcast();
Drivetrain.drive(forward);
}
// Blink the screen while moving forward
// Create moveEvent as an event object
void blinkScreen() {
while (true) {
Brain.Screen.clearScreen(red);
wait(0.5, seconds);
Brain.Screen.clearScreen();
wait(0.5, seconds);
}
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
event moveEvent = event(blinkScreen);
moveEvent.broadcast();
Drivetrain.drive(forward);
}
Register Functions to an Event#
Cuando se registra una función en un evento, se ejecutará en un hilo separado cuando se transmita el evento.
Usage:
eventName(callback);
Parámetro |
Descripción |
---|---|
|
El nombre del objeto de evento creado previamente. |
|
Una función que se define previamente para ejecutarse cuando se transmite el evento. |
// Blink the screen while turning
event moveEvent = event();
void blinkScreen() {
while (true) {
Brain.Screen.clearScreen(red);
wait(0.5, seconds);
Brain.Screen.clearScreen();
wait(0.5, seconds);
}
}
void turning() {
Drivetrain.turn(right);
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Register multiple functions to the event object
moveEvent(blinkScreen);
moveEvent(turning);
moveEvent.broadcast();
}
broadcast#
broadcast()
triggers an event, starting all registered functions in separate threads. This method does not pause execution of any subsequent functions.
Usage:
myEvent.broadcast();
Parámetro |
Descripción |
---|---|
|
El nombre del objeto de evento creado previamente. |
// Blink the screen while moving forward
// Create moveEvent as an event object
event moveEvent = event();
void blinkScreen() {
while (true) {
Brain.Screen.clearScreen(red);
wait(0.5, seconds);
Brain.Screen.clearScreen();
wait(0.5, seconds);
}
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
moveEvent(blinkScreen);
moveEvent.broadcast();
Drivetrain.drive(forward);
}
broadcastAndWait#
broadcastAndWait()
starts an event but waits for all registered functions to finish before continuing with subsequent functions.
Usage:
myEvent.broadcastAndWait();
Parámetro |
Descripción |
---|---|
|
El nombre del objeto de evento creado previamente. |
// Move after the left button is pressed
event moveEvent = event();
void moveAndTurn() {
Drivetrain.driveFor(forward, 150, mm);
Drivetrain.turnFor(right, 90, degrees);
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Begin project code
moveEvent(moveAndTurn);
while (true) {
if (Brain.buttonLeft.pressing()) {
moveEvent.broadcastAndWait();
break;
}
wait(20, msec);
}
Brain.Screen.print("Movement done.");
}