myservo' не называет тип

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

/*********************************************************
* Управление ботами
* Автор: soleil_zero
* На основе кода
* Магистр. Фаусто М. Лагос С.
* @пиратакс007
* Версия 2.0.0 — 2019 г.
* ГНУ ГПЛВ3+
*
* Аппаратное обеспечение:
* Ардуино Мега2560
* Adafruit Motor Shield V1.2
* Модуль Bluetooth H6
* 1 сервопривод
* 2 двигателя постоянного тока
 *********************************************************/

// Библиотека для Adafruit Motor Shield V1.2 и Servo
#include "AFMotor.h"
#include "Servo.h"

// Двигатели подключены к портам 1 и 2
AF_DCMotor leftMotor(1, MOTOR12_64KHZ);
AF_DCMotor rightMotor(2, MOTOR12_64KHZ);

Servo myservo;
myservo.attach(9);

// Переменная для передачи сообщений через Bluetooth
char message;
// угол поворота сервопривода
int angle = 0;

void setup() {
  // Скорости в двигателях
  leftMotor.setSpeed(150);
  rightMotor.setSpeed(150);

  /* Debido a que el Adafruit Motor Shield V1.2 ocupa los pines digitales 0 y 1 para la conexión del módulo HC05 
     bluetooth deben utilizarse cualquiera de los otros disponibles: 14 (TX3) y 15 (RX3) o 16 (TX2) y 17 (RX2) o
     18 (TX1) Y 19 (RX1). De acuerdo a cuál de los cuatro pines se utilicen deben modificarse las líneas
     relacionadas a la comunicación Serial e.g si se utilizan los pines 18 y 19 la instrucción será Serial1 */
  Serial3.begin(9600);
  myservo.write(angle);
}

void loop() {
  // Проверка сообщения на последовательном порту
  if (Serial3.available() > 0) {
    message = Serial3.read();
  }

 if (message == 'F') {// Вперед
    leftMotor.run(FORWARD);
    rightMotor.run(FORWARD);
  } else if (message == 'B') {//Назад
    leftMotor.run(BACKWARD);
    rightMotor.run(BACKWARD);
  } else if (message == 'L') {//Left
    leftMotor.run(FORWARD);
    rightMotor.run(BACKWARD);
  } else if (message == 'R') {//правильно
    leftMotor.run(BACKWARD);
    rightMotor.run(FORWARD);
  } else if (message == 'S') {//stop
    leftMotor.run(RELEASE);
    rightMotor.run(RELEASE);
    Serial3.print("stop");
  } 
  } else if (message == 'U') {//вниз
    angle = 0;
    servo1.write(angle);
  }else if (message == 'D') {//up
    angle = 90;
    servo1.write(angle);
  }
}

, 👍-1

Обсуждение

это было задано много ... пожалуйста, изучите, прежде чем публиковать свой вопрос, @jsotola


1 ответ


Лучший ответ:

1

В языках C и C++ операторы пишутся внутри функций. Этот myservo.attach(9); является оператором. Вы не можете просто написать это в середине файла. Он должен находиться внутри функции.

В вашем коде myservo.attach(9); просто находится в глуши. У вас хватило ума поместить leftMotor.setSpeed(150); внутрь setup(). Почему вы вдруг решили разместить myservo.attach(9); вне каких-либо функций?

Функция setup() была бы подходящим местом для этого оператора.

,