#include <stdio.h>
#define SPEED_LINEAR 75
#define SPEED_CIRCULAR 50
int max_speed;
#define MOTOR_LEFT OUTC
#define MOTOR_RIGHT OUTB
#define MOTOR_BOTH ( MOTOR_LEFT | MOTOR_RIGHT )
#define IR_CHANNEL 0
enum {
STOP,
FORTH,
BACK,
LEFT,
RIGHT,
};
int command = STOP;
int alive;
int init( void )
{
} else {
printf( "Please, plug LEFT motor in C port,\n"
"RIGHT motor in B port and try again.\n"
);
return ( 0 );
}
if ( ir ) {
printf( "IR remote control:\n"
"RED UP & BLUE UP - forward\n"
"RED DOWN & BLUE DOWN - backward\n"
"RED UP | BLUE DOWN - left\n"
"RED DOWN | BLUE UP - right\n"
);
} else {
printf( "IR sensor is NOT found.\n"
"Please, use the EV3 brick buttons.\n"
);
}
printf( "Press BACK on the EV3 brick for EXIT...\n" );
return ( 1 );
}
{
for ( ; ; ) {
pressed = btns;
switch ( pressed ) {
case RED_UP_BLUE_UP:
command = FORTH;
break;
case RED_DOWN_BLUE_DOWN:
command = BACK;
break;
case RED_UP:
case RED_UP_BLUE_DOWN:
case BLUE_DOWN:
command = LEFT;
break;
case BLUE_UP:
case RED_DOWN_BLUE_UP:
case RED_DOWN:
command = RIGHT;
break;
case IR_REMOTE__NONE_:
case RED_UP_RED_DOWN:
case BLUE_UP_BLUE_DOWN:
case BEACON_MODE_ON:
command = STOP;
break;
}
}
}
{
CORO_LOCAL uint8_t keys, pressed = EV3_KEY__NONE_;
for ( ; ; ) {
pressed = keys;
switch ( pressed ) {
case EV3_KEY_BACK:
command = STOP;
alive = 0;
break;
case EV3_KEY__NONE_:
case EV3_KEY_CENTER:
command = STOP;
break;
case EV3_KEY_UP:
command = FORTH;
break;
case EV3_KEY_DOWN:
command = BACK;
break;
case EV3_KEY_LEFT:
command = LEFT;
break;
case EV3_KEY_RIGHT:
command = RIGHT;
break;
}
}
}
{
speed_linear = max_speed * SPEED_LINEAR / 100;
speed_circular = max_speed * SPEED_CIRCULAR / 100;
for ( ; ; ) {
switch ( command ) {
case STOP:
break;
case FORTH:
break;
case BACK:
break;
case LEFT:
break;
case RIGHT:
break;
}
state = command;
}
}
int main( void )
{
printf( "Waiting the EV3 brick online...\n" );
printf( "*** ( EV3 ) Hello! ***\n" );
alive = init();
while ( alive ) {
}
printf( "*** ( EV3 ) Bye! ***\n" );
return ( 0 );
}