ожидаемый неквалифицированный идентификатор перед ‘.’ библиотека токенов arduino

#c #arduino #header-files

#c #arduino #заголовочные файлы

Вопрос:

Я получаю эту ошибку:

В функции ‘void loop ()’: headers_stepper_test:12: ошибка: ожидаемый неквалифицированный идентификатор перед ‘.’ токен ожидаемый неквалифицированный идентификатор перед ‘.’ токен

в этом коде:

 #include "StepperMotor.h"

void setup() {
  // put your setup code here, to run once:
StepperMotor(8,9);
}

void loop() {
  // put your main code here, to run repeatedly:


  void StepperMotor.moveDegrees(-180);
  delay(1000);

}
  

Файл библиотеки cpp:

 #include "Arduino.h"

StepperMotor::StepperMotor(int pin1, int pin2)
{
    dirPin=pin1;
    pinMode(dirPin,OUTPUT);
      stepperPin=pin2;
      pinMode(stepperPin,OUTPUT);

}

void StepperMotor::stepDegrees(bool dir, int steps);
{
 digitalWrite(dirPin,dir);
 delay(50);
 for(int i=0;i<steps;i  ){
   digitalWrite(stepperPin, HIGH);
   delayMicroseconds(800);
   digitalWrite(stepperPin, LOW);
   delayMicroseconds(800);
}

void StepperMotor::moveDegrees(int degreeNumber);
{
  if (degrees > 0){
    userAbs = (degreeNumber);
    stepNumber = (userAbs * 200/360);
    step(true,stepNumber);
 }
  if (degrees < 0){
    userAbs = (-1*degreesNumber);
    stepNumber = (userAbs * 200/360);
    step(false,stepNumber);
  }
}
  

the .файл заголовка h:

 #ifndef StepperMotor_h
#define StepperMotor_h

#include "Arduino.h"

class StepperMotor
{
    public:
            StepperMotor(int pin1, int pin2);
     void moveDegrees(int degreeNumber);
    private:
     void stepDegrees(bool dir, int steps);
         int dirPin;
         int stepPin;
         float userAbs;
         float stepNumber;
};
#endif
  

Когда я пытаюсь реализовать свои собственные файлы библиотеки. Я не уверен, нужен ли мне «void» в этом случае, но в любом случае возникает одна и та же ошибка. Что является причиной этого?

Комментарии:

1. Как вы думаете void StepperMotor.moveDegrees(-180); , что нужно делать?

2. он переместит шаговый двигатель на «x» градусов.

3. Хорошо. Что, если я хочу иметь несколько StepperMotors ? Как будет выглядеть синтаксис?

4. Этот код указывает на отсутствие базового понимания того, как создавать и использовать класс. Изучение этих фундаментальных понятий в учебнике или онлайн-руководстве будет более полезным, чем получение ответа на эту конкретную проблему.

5. @Alan, void StepperMotor.moveDegrees(-180); это вопиющий случай. StepperMotor(8,9); еще один, но не такой плохой.

Ответ №1:

Давайте резюмируем ваш код:

 void loop() {
    // put your main code here, to run repeatedly:
    void StepperMotor.moveDegrees(-180);
    delay(1000);
}
  

Первое, что нужно сделать: не вводите void вызов moveDegress() туда.

Второй:

Метод moveDegrees не является статическим, поэтому для его вызова вам нужен экземпляр класса StepperMotor :

 // note: you can initialize the variable here 
// but I'll  do it in setup
StepperMotor stepperMotorInstance; // your variable

void setup() {
    stepperMotorInstance = StepperMotor(8,9); // option 2: initialize variable in setup
}

void loop() {
    // put your main code here, to run repeatedly:
    stepperMotorInstance.moveDegrees(-180);
    delay(1000);
}
  

Надеюсь, это поможет