Ошибка

Тема в разделе "Arduino & Shields", создана пользователем Gbsyi, 23 окт 2015.

  1. Gbsyi

    Gbsyi Нуб

    Вот такая ошибка выскакивает при проверке кода:
    expected unqualified-id before '{' token
    Подскажите что это.
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Нужен контекст. Рядом с ошибкой есть номер строки, где она произошла. Нужен код в районе этой строки.
     
  3. Gbsyi

    Gbsyi Нуб

    Код (Text):

    void setup()
    {
      pinMode(MOTOR_PIN, OUTPUT);
      for (int i = 0; i < BUTTON_COUNT; ++i)
      pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);
    }
    {
      myServo.attach(11);
    }
     

     
     
  4. Gbsyi

    Gbsyi Нуб

    То же самое есть тут, но только он не выдает ошибку

    Код (Text):

      analogWrite(MOTOR_PIN, speed);
      }
      {
      int position;

     
     
  5. nailxx

    nailxx Официальный Нерд Администратор

    Код (C++):
    void setup()
    {
      pinMode(MOTOR_PIN, OUTPUT);
      for (int i = 0; i < BUTTON_COUNT; ++i)
      pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);
    } // вот тут вы закончили функцию setup
    // вот тут вы в глобальном скоупе, где можно только объявлять и определять переменные и символы
    { // ... и начинаете исполнять код в глобальном скоупе. Компилятор и я вас не понимают
      myServo.attach(11);
    }
     
    Возможно вы имели в виду:

    Код (C++):
    void setup()
    {
      pinMode(MOTOR_PIN, OUTPUT);
      for (int i = 0; i < BUTTON_COUNT; ++i)
        pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);

      myServo.attach(11);
    }
     
     
  6. Gbsyi

    Gbsyi Нуб

    Исправил но все равно есть ошибка.
    Мотор не крутится.
    Лучше скину весь код.
    Код (Text):

    #include <Servo.h>

    #define MOTOR_PIN  9
    #define FIRST_BUTTON_PIN 5
    #define BUTTON_COUNT  3
    #define SPEED_STEP  (255 / (BUTTON_COUNT - 1))

     Servo myServo;
    void setup()
    {
      pinMode(MOTOR_PIN, OUTPUT);
      for (int i = 0; i < BUTTON_COUNT; ++i)
      pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);
     
      myServo.attach(11);
    }
     
    void loop()
    {
      for (int i = 0; i < BUTTON_COUNT; ++i) {
      if (digitalRead(i + FIRST_BUTTON_PIN))
      continue;
     
      int speed = i * SPEED_STEP;
     
      analogWrite(MOTOR_PIN, speed);
      }
      {
      int position;
     
      myServo.write(90);
      delay(500);
      myServo.write(0);
      delay(2000);

      }
    }
     
     
  7. Gbsyi

    Gbsyi Нуб

    Сам компилятор ошибку не находит
     
  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Компилятор может указать на ошибку в синтаксисе, но не в логике. Он же не знает, какого результата вы хотите добиться.
    Вставьте в код отладочный вывод в Serial и проследите за переменными и ходом выполнения программы.
     
  9. Gbsyi

    Gbsyi Нуб

    А как это сделать?
     
  10. Mestniy

    Mestniy Гуру

    Код (C++):
    void setup()
    {
    Serial.begin(9600);
    }
    void loop()
    {
    Serial.print(ваша переменная)
    }
     
  11. Gbsyi

    Gbsyi Нуб

    Какую переменную вписывать?
     
  12. Megakoteyka

    Megakoteyka Оракул Модератор

    Вам нужно выяснить, как на самом деле работает программа. Для этого в интересующие места программы вставляется отладочный вывод. Затем по выводу анализируете ход выполнения программы и находите проблемные места.
    Код (C++):
    if(x == 5)
    {
      Serial.print("x=5");
      ...
    }
    else
    {
      Serial.print("x=");
      Serial.print(x);
      ...
    }
    Код (C++):
    analogWrite(MOTOR_PIN, speed);
    Serial.print("speed=");
    Serial.print(speed);
    Принцип ясен?
     
  13. Gbsyi

    Gbsyi Нуб

    Принцип ясен все вписал, насколько я понял надо смотреть в мониторе последовательного порта.
    Ничего не появляется.
     
  14. Mestniy

    Mestniy Гуру

    А вы что ввели?
     
  15. Megakoteyka

    Megakoteyka Оракул Модератор

    А порт инициализировать не забыли?
    Код (C++):
    void setup()
    {
      Serial.begin(9600);
    }
    Возьмите за правило выкладывать текущую версию кода, если она отличается от предыдущей.
    Вот вы что-то туда вписали, и говорите, что не работает. А как нам узнать, что и как вы вписали?
     
  16. Gbsyi

    Gbsyi Нуб

    Вот весь код.
    Код (Text):

    #include <Servo.h>

    #define MOTOR_PIN  9
    #define FIRST_BUTTON_PIN 5
    #define BUTTON_COUNT  3
    #define SPEED_STEP  (255 / (BUTTON_COUNT - 1))

     Servo myServo;
    void setup()
    {
      pinMode(MOTOR_PIN, OUTPUT);
      for (int i = 0; i < BUTTON_COUNT; ++i)
      pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);
     {  
     Serial.begin(9600);
     }  
      myServo.attach(11);
    }
     
    void loop()
    {
      int position;
      for (int i = 0; i < BUTTON_COUNT; ++i) {
      if (digitalRead(i + FIRST_BUTTON_PIN))
      continue;
     
      int speed = i * SPEED_STEP;
     
      analogWrite(MOTOR_PIN, speed);
      Serial.print("position=");
      Serial.print(position);
      }
      {
      myServo.write(90);
      delay(150);
      myServo.write(0);
      delay(5000);

      }
    }
     
     
  17. Megakoteyka

    Megakoteyka Оракул Модератор

    Монитор порта настроен на скорость 9600?
    Код (C++):
    {
    Serial.begin(9600);
    }
    Зачем пишете фигурные скобки там, где они не нужны?
    Пишите код с отступами или нажимайте Ctrl+T в Arduino IDE для автоматического форматирования
     
  18. Gbsyi

    Gbsyi Нуб

    Я не так давно начал увлекаться этим и еще не достаточно понимаю где фигурные скобки нужны, а где нет.

    А какая должна быть?
     
  19. geher

    geher Гуру

    Скорость порта должна быть одинаковая и в мониторе порта, и в скетче
    Serial.begin(9600); задает скорость порта 9600 в скетче.
    Логично предположить, что в мониторе порта тогда тоже должно быть 9600.
     
  20. Gbsyi

    Gbsyi Нуб

    И там и там и есть 9600 скорость.