36 lines
966 B
C++
36 lines
966 B
C++
#include "AS5040.h"
|
|
|
|
AS5040Sensor::AS5040Sensor(uint16_t cs, uint16_t mosi, uint16_t miso, uint16_t sck) {
|
|
cs_ = cs;
|
|
mosi_ = mosi;
|
|
miso_ = miso;
|
|
sck_ = sck;
|
|
}
|
|
void AS5040Sensor::init(SPIClass *_spi) {
|
|
spi = _spi;
|
|
// 1MHz clock (AMS should be able to accept up to 10MHz)
|
|
settings = SPISettings(1000000, MSBFIRST, SPI_MODE0);
|
|
//setup pins
|
|
pinMode(cs_, OUTPUT);
|
|
pinMode(miso_, INPUT);
|
|
pinMode(mosi_, OUTPUT);
|
|
pinMode(sck_, OUTPUT);
|
|
spi->setMISO(miso_);
|
|
spi->setMOSI(mosi_);
|
|
spi->setSCLK(sck_);
|
|
spi->begin();
|
|
this->Sensor::init(); // call base class init
|
|
}
|
|
|
|
float AS5040Sensor::getSensorAngle() {
|
|
//SPI - begin transaction
|
|
spi->beginTransaction(settings);
|
|
//Send the command
|
|
digitalWrite(cs_, LOW);
|
|
uint16_t data = spi->transfer16(0x3FFF);
|
|
digitalWrite(cs_,HIGH);
|
|
//SPI - end transaction
|
|
spi->endTransaction();
|
|
data = (data) >> 5;
|
|
return (float)data * _2PI / cpr;
|
|
}
|