Servo_Pointer' was not declared in this scope

Кажется, я не могу найти ошибку, которую допустил; кто-нибудь может мне помочь?

Сообщение об ошибке: 'Servo_Pointer' не был объявлен в этой области

Я получаю сообщение об ошибке в конце кода со строкой: Servo_Pointer.write(servo_pos)

Код:

const int photo_left = A0;    // выберите входные контакты для фоторезистора
const int photo_right = A1; 
const int ledPin_1 = 2; // Эти светодиоды будут использоваться для проверки наведения серводвигателя
const int ledPin_2 = 4;
const int ledPin_3 = 7;
const int ledPin_4 = 8;
const int ledPin_5 = 12;
const int photoValue = 0;  // переменная для хранения значения, поступающего с фоторезистора
const int numReadings = 10;
int readings[numReadings];      // показания с аналогового входа
int readIndex = 0;              // индекс текущего значения
int total = 0;                  // текущее общее
int average = 0;                // среднее

void setup() {
  // объявить вывод ledPin в качестве ВЫВОДА:
  pinMode(ledPin_1, OUTPUT);
  pinMode(ledPin_2, OUTPUT);
  pinMode(ledPin_3, OUTPUT);
  pinMode(ledPin_4, OUTPUT);
  pinMode(ledPin_5, OUTPUT);
  Serial.begin(9600);
  #include <Servo.h>
  Servo Servo_Pointer;
  Servo_Pointer.attach(9);
  int servo_pos = 0;
  // инициализировать последовательную связь с компьютером:
  Serial.begin(9600);
  // инициализировать все показания равными 0:
  for (int thisReading = 0; thisReading < numReadings; thisReading  ) {
    readings[thisReading] = 0;
  }
}

void loop() {
  Servo_Pointer.write(servo_pos); // указать серводвигателю перейти в положение в переменной 'servo_pos'
  delay(15);          // ожидает 15 мс, пока сервопривод достигнет нужного положения
  // включите светодиодную штифт с
  delay(15);
}

, 👍3

Обсуждение

Пожалуйста, не создавайте лишней работы для других людей, вандализируя свои посты. Проводя публикацию в сети Stack Exchange (SE), вы предоставляете право, не подлежащее отзыву, в соответствии с [лицензией CC BY-SA 4.0] (https://creativecommons.org/licenses/by-sa/4.0 ) для того, чтобы SE распространял этот контент. Согласно политике SE, любой вандализм будет отменен. Если вы хотите узнать больше об удалении записи, рассмотрите возможность ознакомления с: [Как работает удаление] (https://meta.stackexchange.com/q/5221/295232 )?, @Glorfindel


2 ответа


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

3

Вы должны сделать Servo Servo_Pointer; глобальным, т. е. Поместить его вне функции настройки, например, после строки int average = 0;.

В вашем коде это локальная переменная внутри функции настройки. Когда эта функция завершается, локальные переменные внутри этой функции (такие как Servo_Pointer ) больше не существуют.

Сделав переменную глобальной, вы можете использовать ее где угодно. Однако использование глобальных переменных, когда они не нужны, не является хорошей практикой кодирования.

Преимущество того, чтобы сделать переменную глобальной, заключается в том, что вы можете видеть потребление памяти экземпляром Servo_Pointer при компиляции.

Также смотрите Комментарий timemage ниже: не помещайте операторы #include в середину вашего кода, поместите их в начало вашего кода.

,

Возможно, стоит добавить, что, по крайней мере, нетрадиционно иметь директиву #include в середине вашей функции., @timemage

@timemage Хороший улов, я выполнил поиск по Servo_Pointer, пропустив эту строку., @Michel Keijzers


0

Вам нужно поместить объявление вне вашей функции setup(). Другими словами, вам нужно переместить следующие 3 строки и поместить их над вашей функцией setup():

#include <Servo.h>
Servo Servo_Pointer;
int servo_pos = 0;

Ваш код должен выглядеть следующим образом:

#include <Servo.h>

const int photo_left = A0;    // выберите входные контакты для фоторезистора
const int photo_right = A1; 
const int ledPin_1 = 2; // Эти светодиоды будут использоваться для проверки наведения серводвигателя
const int ledPin_2 = 4;
const int ledPin_3 = 7;
const int ledPin_4 = 8;
const int ledPin_5 = 12;
const int photoValue = 0;  // переменная для хранения значения, поступающего с фоторезистора
const int numReadings = 10;
int readings[numReadings];      // показания с аналогового входа
int readIndex = 0;              // индекс текущего значения
int total = 0;                  // текущее общее
int average = 0;                // среднее
int servo_pos = 0;

Servo Servo_Pointer;

void setup() {
  // объявить вывод ledPin в качестве ВЫВОДА:
  pinMode(ledPin_1, OUTPUT);
  pinMode(ledPin_2, OUTPUT);
  pinMode(ledPin_3, OUTPUT);
  pinMode(ledPin_4, OUTPUT);
  pinMode(ledPin_5, OUTPUT);
  Serial.begin(9600);
  Servo_Pointer.attach(9);
  // инициализировать последовательную связь с компьютером:
  Serial.begin(9600);
  // инициализировать все показания равными 0:
  for (int thisReading = 0; thisReading < numReadings; thisReading  ) {
    readings[thisReading] = 0;
  }
}

void loop() {
  Servo_Pointer.write(servo_pos); // указать серводвигателю перейти в положение в переменной 'servo_pos'
  delay(15);          // ожидает 15 мс, пока сервопривод достигнет нужного положения
  // включите светодиодную штифт с
  delay(15);
}
,