Esempio n. 1
0
static void event(int evt)
{
    switch (evt) {
        case EVT_FRONT_BLOCKED:
            puts("front blocked");
            break;
        case EVT_BACK_BLOCKED:
            puts("back blocked");
            break;
        case EVT_FRONT_FREE:
            puts("front free");
            break;
        case EVT_BACK_FREE:
            puts("back free");
            break;
        default:
            puts("unkown");
    }

    if ((behavior == 0) || (behavior == 1)) {
        /* start condition */
        if ((state == 0) && (evt == EVT_FRONT_FREE)) {
            puts("evt: start");
            speed = CONF_BRAIN_SPEED;
            motor_set(&mot, speed);
        }

        /* going forward, hitting obstacle -> steer full and go backwards */
        else if ((state == 0) && (evt == EVT_FRONT_BLOCKED)) {
            motor_stop(&mot);

            puts("evt: hit forward obstacle");

            dir = (behavior == 0) ? -1000 : 1000;
            speed = -CONF_BRAIN_SPEED;
            brain_steer(dir);
            motor_set(&mot, speed);
            state = 1;
        }

        /* going backwards, hitting obstacle */
        else if ((state == 1) && (evt == EVT_BACK_BLOCKED)) {
            motor_stop(&mot);

            puts("evt: hit backwards obstacle");

            dir = 0;
            speed = CONF_BRAIN_SPEED;
            brain_steer(dir);
            motor_set(&mot, speed);
            state = 0;
        }
    }
}
Esempio n. 2
0
void brain_ctrl(int16_t speed, int16_t dir)
{
    if ((speed > 0) && front_blocked) {
        motor_stop(&mot);
        return;
    }
    if ((speed < 0) && back_blocked) {
        motor_stop(&mot);
        return;
    }
    brain_set_speed(speed);
    brain_steer(dir);
}
Esempio n. 3
0
void brain_ctrl(int16_t speed, int16_t dir)
{
    printf("[brain] CTRL set speed %i and dir %i\n", speed, dir);
    if ((speed > 0) && front_blocked) {
        motor_stop(&mot);
        printf("[brain] CTRL FRONT BLOCKED\n");
        return;
    }
    if ((speed < 0) && back_blocked) {
        motor_stop(&mot);
        printf("[brain] CTRL BACK BLOCKED\n");
        return;
    }
    brain_set_speed(speed);
    brain_steer(dir);
}
Esempio n. 4
0
static int _steer(int argc, char **argv)
{
    int16_t dir;

    if (argc < 2) {
        printf("usage: %s DIR [-1024 to 1023]\n", argv[0]);
        return 1;
    }

    dir = (int16_t)atoi(argv[1]);
    printf("read steering value: %i\n", dir);
    if (dir < -0x03ff || dir > 0x03ff) {
        puts("dir value out of range\n");
        return 1;
    }
    brain_steer(dir);
    return 0;
}