[英]How do I fix my stepper motor library that I made for Arduino?
我有一個 Arduino Mega,我正在使用 L298N,我的目標是制作一個成功的 Arduino 庫,用步進電機制作音樂。 我知道這種方法以前已經做過,但我正在嘗試自己做。 我不能使用 Moppy 庫,坦率地說,其他的代碼非常復雜。 那么,我的問題是什么? 我的問題是當我使用我制作的庫(作為測試)時出現此錯誤:
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\mega" "-IC:\\Users\\austin\\Documents\\Arduino\\libraries\\stepperTestLibrary" "C:\\Users\\austin\\Documents\\Arduino\\libraries\\stepperTestLibrary\\stepperTestLibrary.cpp" -o "C:\\Users\\austin\\AppData\\Local\\Temp\\arduino_build_519425\\libraries\\stepperTestLibrary\\stepperTestLibrary.cpp.o"
C:\Users\austin\Documents\Arduino\libraries\stepperTestLibrary\stepperTestLibrary.cpp:13:1: error: prototype for 'stepperTest::stepperTest(int, int, int, int)' does not match any in class 'stepperTest'
stepperTest::stepperTest(int SMPin1, int SMPin2, int SMPin3, int SMPin4){
^~~~~~~~~~~
In file included from C:\Users\austin\Documents\Arduino\libraries\stepperTestLibrary\stepperTestLibrary.cpp:11:0:
C:\Users\austin\Documents\Arduino\libraries\stepperTestLibrary\stepperTestLibrary.h:15:7: error: candidates are: constexpr stepperTest::stepperTest(stepperTest&&)
class stepperTest{
^~~~~~~~~~~
C:\Users\austin\Documents\Arduino\libraries\stepperTestLibrary\stepperTestLibrary.h:15:7: error: constexpr stepperTest::stepperTest(const stepperTest&)
C:\Users\austin\Documents\Arduino\libraries\stepperTestLibrary\stepperTestLibrary.h:19:1: error: stepperTest::stepperTest(uint8_t, uint8_t, uint8_t, uint8_t)
stepperTest(uint8_t SMPin1, uint8_t SMPin2, uint8_t SMPin3, uint8_t SMPin4);
^~~~~~~~~~~
C:\Users\austin\Documents\Arduino\libraries\stepperTestLibrary\stepperTestLibrary.cpp:29:6: error: prototype for 'void stepperTest::runStepper(int, int)' does not match any in class 'stepperTest'
void stepperTest::runStepper(int frequency, int duration){
^~~~~~~~~~~
In file included from C:\Users\austin\Documents\Arduino\libraries\stepperTestLibrary\stepperTestLibrary.cpp:11:0:
C:\Users\austin\Documents\Arduino\libraries\stepperTestLibrary\stepperTestLibrary.h:21:6: error: candidate is: void stepperTest::runStepper(uint8_t, uint8_t)
void runStepper(uint8_t frequency, uint8_t duration);
^~~~~~~~~~
這也是:
exit status 1
Error compiling for board Arduino Mega or Mega 2560.
我希望該庫能夠順利運行,因為我正在關注其他一些用於步進電機的庫,但我遇到了這些錯誤。 我已經嘗試多次修改代碼,但我遇到了類似的問題,所以我不確定如何解決我自己的問題。 我什至嘗試復制和粘貼一些代碼來使庫正常工作。 沒有什么。 我正在使用 Arduino 步進器、Accelstepper 和其他人制作的雙極步進器庫,但沒有結果。 https://create.arduino.cc/projecthub/ambhatt/bipolar-stepper-motor-library-b9d5e0
這是.h文件:
/*
This library is designed for testing purposing only. CC Public Domain
Austin Harris
3/4/2021
This library is designed to run a stepper motor at a certain frequency to
make musical notes and for a certain duration
*/
#ifndef stepperTestLibrary_h
#define stepperTestLibrary_h
#include "Arduino.h"
class stepperTest{
public:
stepperTest(int SMPin1, int SMPin2, int SMPin3, int SMPin4);
void runStepper(int frequency, int duration);
private:
int direction;
int SMPin1, intSMPin2, intSMPin3, intSMPin4;
};
#endif
這是.cpp文件:
/*
This library is designed for testing purposing only. CC Public Domain
Austin Harris
3/4/2021
This library is designed to run a stepper motor at a certain frequency to
make musical notes and for a cetain duration
*/
#include "Arduino.h"
#include "stepperTestLibrary.h"
stepperTest::stepperTest(int SMPin1, int SMPin2, int SMPin3, int SMPin4){
pinMode(SMPin1, OUTPUT);
pinMode(SMPin2, OUTPUT);
pinMode(SMPin3, OUTPUT);
pinMode(SMPin4, OUTPUT);
_SMPin1 = SMPin1;
_SMPin2 = SMPin2;
_SMPin3 = SMPin3;
_SMPin4 = SMPin4;
int direction = 0; // motor direction
}
void stepperTest::runStepper(int frequency, int duration){
int rpmCalculation = abs(1000.0 / frequency);
// determine direction based on whether steps_to_mode is + or -:
if (frequency > 0) { direction = 1; }
if (frequency < 0) { direction = 0; }
digitalWrite(SMPin1, HIGH);
digitalWrite(SMPin2, LOW);
digitalWrite(SMPin3, HIGH);
digitalWrite(SMPin4, LOW);
delay(1);
digitalWrite(SMPin1, LOW);
digitalWrite(SMPin2, HIGH);
digitalWrite(SMPin3, HIGH);
digitalWrite(SMPin4, LOW);
delay(1);
digitalWrite(SMPin1, LOW);
digitalWrite(SMPin2, HIGH);
digitalWrite(SMPin3, LOW);
digitalWrite(SMPin4, HIGH);
delay(1);
digitalWrite(SMPin1, HIGH);
digitalWrite(SMPin2, LOW);
digitalWrite(SMPin3, LOW);
digitalWrite(SMPin4, HIGH);
delay(duration);
}
這是keywords.txt:
stepperTest KEYWORD1
runStepper KEYWORD2
這是.ino 的例子:
#include <stepperTestLibrary.h>
stepperTest myStepper(22, 23, 24, 25);
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
myStepper.runStepper(440, 500);
}
這是接線:
這是步進器數據表的鏈接:
-謝謝,
奧斯汀
在 C++ 中閱讀有關類的內容將是一個好的開始。 也許變量名是如何工作的。 以及陰影變量的工作原理。 SMPin2、_SMPin2 和第三種變體是 intSMPin2 之間有很大的不同(其他變體也搞砸了)
無論如何,如果要在構造函數中使用與成員相同的參數名稱,則必須使用構造函數初始化列表。
#ifndef stepperTestLibrary_h
#define stepperTestLibrary_h
#include "Arduino.h"
class stepperTest {
public:
stepperTest(uint8_t SMPin1, uint8_t SMPin2, uint8_t SMPin3, uint8_t SMPin4);
void runStepper(int frequency, int duration);
private:
// just give some space to it:
uint8_t SMPin1;
uint8_t SMPin2;
uint8_t SMPin3;
uint8_t SMPin4;
int8_t direction;
/// or you'll mess it up like this:
/// int SMPin1, --->>>>> intSMPin2, intSMPin3, intSMPin4 <<<<<---;
};
#endif
主要部分:
#include "Arduino.h"
#include "stepperTestLibrary.h"
stepperTest::stepperTest(uint8_t SMPin1, uint8_t SMPin2, uint8_t SMPin3, uint8_t SMPin4)
// constructor's initializer list:
: SMPin1{ SMPin1 }
, SMPin2{ SMPin2 }
, SMPin3{ SMPin3 }
, SMPin4{ SMPin4 }
, direction{ 0 }
{
pinMode(SMPin1, OUTPUT);
pinMode(SMPin2, OUTPUT);
pinMode(SMPin3, OUTPUT);
pinMode(SMPin4, OUTPUT);
}
void stepperTest::runStepper(int frequency, int duration) {
// // Never used anywhere:
// int rpmCalculation = abs(1000.0 / frequency);
// // determine direction based on whether steps_to_mode is + or -:
// if (frequency > 0) { direction = 1; }
// if (frequency < 0) { direction = 0; }
digitalWrite(SMPin1, HIGH);
digitalWrite(SMPin2, LOW);
digitalWrite(SMPin3, HIGH);
digitalWrite(SMPin4, LOW);
delay(1);
digitalWrite(SMPin1, LOW);
digitalWrite(SMPin2, HIGH);
digitalWrite(SMPin3, HIGH);
digitalWrite(SMPin4, LOW);
delay(1);
digitalWrite(SMPin1, LOW);
digitalWrite(SMPin2, HIGH);
digitalWrite(SMPin3, LOW);
digitalWrite(SMPin4, HIGH);
delay(1);
digitalWrite(SMPin1, HIGH);
digitalWrite(SMPin2, LOW);
digitalWrite(SMPin3, LOW);
digitalWrite(SMPin4, HIGH);
delay(duration); // what? why???
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.