#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);
}
Надеюсь, это поможет