I already know how to use the Due pwm_lib by Antonio C. Domínguez.
I mean, I have used the following code without any problem:
#include <pwm_defs.h>
#include <pwm_lib.h>
using namespace arduino_due::pwm_lib;
#define PWM_PERIOD_PIN_35 800000000
#define PWM_DUTY_PIN_35 50000000
pwm<pwm_pin::PWMH0_PC3> pwm_pin35;
Then I can use:
pwm_pin35.start(PWM_PERIOD_PIN_35, PWM_DUTY_PIN_35);
pwm_pin35.stop()
No problem here.
But I want to create my own class and pass in pwm_pin35 or maybe pass in pwm_pin::PWMH0_PC3.
I try to pass in pwm_pin35 or pwm_pin::PWMH0_PC3
Like this:
Driver.ino
#include "StepperDriver.h"
#include <SPI.h>
pwm<pwm_pin::PWMH0_PC3> pwm_pin35;
StepperDriver TestDriver(2, 3, 4, 50000, 25000, pwm_pin35);
StepperDriver TestDriver(2, 3, 4, 50000, 25000, pwm_pin::PWMH0_PC3);
void setup() {
Serial.begin(115200);
SPI.begin();
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));
TestDriver.init();
delayMicroseconds(3000);
}
void loop() {
}
StepperDriver.h
#ifndef MyStepperDriver
#define MyStepperDriver
#include <Arduino.h>
#include <pwm_defs.h>
#include <pwm_lib.h>
using namespace arduino_due::pwm_lib;
class StepperDriver {
private:
uint8_t ChipSelectPin;
uint8_t EnablePin = 0;
uint8_t DirPin = 0;
uint32_t Period = 0;
uint32_t Duty = 0;
public:
StepperDriver (uint8_t ChipSelectPin, uint8_t EnablePin, uint8_t DirPin, uint32_t Period, uint32_t Duty, pwm PwmPin);
void init();
void Enable();
void EnableChip();
void Disable();
void DisableChip();
void DirClockWise();
void DirCounterClockWise();
bool isDriverEnable();
void Start();
void Stop();
};
#endif
StepperDriver.cpp
#include "StepperDriver.h"
StepperDriver::StepperDriver(uint8_t ChipSelectPin, uint8_t EnablePin, uint8_t DirPin, uint32_t Period, uint32_t Duty, pwm PwmPin) {
this->ChipSelectPin = ChipSelectPin;
this->EnablePin = EnablePin;
this->DirPin = DirPin;
this->StepPin = StepPin;
this->Period = Period;
this->Duty = Duty;
}
void StepperDriver::init() {
pinMode(ChipSelectPin, OUTPUT);
pinMode(EnablePin, OUTPUT);
pinMode(DirPin, OUTPUT);
pinMode(StepPin, OUTPUT);
Disable();
DisableChip();
}
void StepperDriver::Disable() {
digitalWrite(EnablePin, HIGH);
}
void StepperDriver::DisableChip(){
digitalWrite(ChipSelectPin, HIGH);
}
void StepperDriver::Enable() {
digitalWrite(EnablePin, LOW);
}
void StepperDriver::EnableChip(){
digitalWrite(ChipSelectPin, LOW);
}
bool StepperDriver::isDriverEnable() {
bool DriverEnable = false;
if (digitalRead(EnablePin) == LOW) {
DriverEnable = true;
}
return DriverEnable;
}
void StepperDriver::Start() {
//PwmPin.Start(Period, Duty);
}
void StepperDriver::Stop(){
//PwmPin.Stop;
}
But I get error message " 'pwm' is not a type " at public:StepperDriver.
I also need to mention that I don't know how to use C++ templates.
Thank you very much in advance.