Ошибки в скетче робот для кегельринга

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем tuo, 15 дек 2014.

  1. tuo

    tuo Нуб

    Пытался написать программу, по которой робот доезжал бы до черной линии и поворачивал, делал на основе статьи и вики. Но при проверке выдает ошибки в коде. второй день пытаюсь найти, в чем проблема, но ничего не получается :с
    Подскажите пожалуйста, как можно это исправить, а то я уже все перепробовал
    Ошибки : 23 строка expected unqualified-id before 'else'
    63, 70 строка a function-definition is not allowed here before '{' token
    104 строка expected `}' at end of input

    Заранее спасибо)
     
  2. Alex19

    Alex19 Гуру

    У Вас не закрыта функция

    Код (Text):
    void turnLeft()
    {
    state = TURN_LEFT;

    analogWrite(SPEED_LEFT, SPEED / STOP);
    analogWrite(SPEED_RIGHT, SPEED);

    digitalWrite(DIR_LEFT, HIGH);
    digitalWrite(DIR_RIGHT, LOW);

    void setup()
    {
    А должно быть так
    Код (Text):
    void turnLeft()
    {
    state = TURN_LEFT;

    analogWrite(SPEED_LEFT, SPEED / STOP);
    analogWrite(SPEED_RIGHT, SPEED);

    digitalWrite(DIR_LEFT, HIGH);
    digitalWrite(DIR_RIGHT, LOW);
    }

    void setup()
    {
    Совет, делайте отступы, так ошибиться будет труднее, примерно так
    Код (Text):

    #define SPEED_LEFT 6
    #define SPEED_RIGHT 5
    #define DIR_LEFT 7
    #define DIR_RIGHT 4
    #define FRONT_SENSOR_PIN 8
    #define BACK_SENSOR_PIN 9

    #define SPEED 100

    #define STATE_FORWARD 0
    #define TURN_RIGHT 1
    #define TURN_LEFT 2
    #define STOP 4

    int state = STATE_FORWARD;


    void runForward()
    {
        state = STATE_FORWARD;

        analogWrite(SPEED_LEFT,SPEED );
        analogWrite(SPEED_RIGHT,SPEED);

        digitalWrite(DIR_LEFT, HIGH);
        digitalWrite(DIR_RIGHT, HIGH);
    }
    void goBack()
    {
        state = STATE_FORWARD;

        analogWrite(SPEED_RIGHT, SPEED);
        analogWrite(SPEED_LEFT, SPEED);

        digitalWrite(DIR_LEFT, LOW);
        digitalWrite(DIR_RIGHT, HIGH);
    }

    void turnRight()
    {
        state = TURN_RIGHT;

        // Замедляем правое колесо относительно левого,
        // чтобы начать поворот
        analogWrite(SPEED_RIGHT, SPEED / STOP);
        analogWrite(SPEED_LEFT, SPEED);

        digitalWrite(DIR_LEFT, HIGH);
        digitalWrite(DIR_RIGHT, LOW);
    }

    void turnLeft()
    {
        state = TURN_LEFT;

        analogWrite(SPEED_LEFT, SPEED / STOP);
        analogWrite(SPEED_RIGHT, SPEED);

        digitalWrite(DIR_LEFT, HIGH);
        digitalWrite(DIR_RIGHT, LOW);
    }
    void setup()
    {
        for(int i = 4; i <= 7; i++)
            pinMode(i, OUTPUT);

    }

    void loop()
    {
        bool front = !digitalRead(FRONT_SENSOR_PIN);
        bool back = !digitalRead(BACK_SENSOR_PIN);

        int targetState;

        if (front == back)
        {
            targetState = STATE_FORWARD;
        }
        else if (front)
        {
            targetState = TURN_LEFT;
        }
        else
        {
            targetState = TURN_RIGHT;
        }
        if (state == targetState)
        {
            return;
        }
        switch (targetState)
        {
        case STATE_FORWARD:
            goForward();
            break;
        case TURN_LEFT:
            goBack();
            break;
        case TURN_RIGHT:
            goForward();
            break;
        }
        delay (100);
    }
     
    Да у Вас еще 1 ошибка, не определена функция goForward(), судя по коду должен быть вызов runForward(). Если прав, тогда поменяйте goForward() на runForward().
     
  3. tuo

    tuo Нуб

    Благодарю)