|
| 1 | +#include <MagAlpha.h> |
| 2 | + |
| 3 | +//Check https://www.arduino.cc/en/reference/SPI for SPI signals connections |
| 4 | + |
| 5 | +#define UART_BAUDRATE 115200 //UART data rate in bits per second (baud) |
| 6 | +#define SPI_SCLK_FREQUENCY 10000000 //SPI SCLK Clock frequency in Hz |
| 7 | +#define SPI_CS_PIN 0 //SPI CS pin |
| 8 | + |
| 9 | +MagAlpha magAlpha; |
| 10 | + |
| 11 | +void setup() { |
| 12 | + // put your setup code here, to run once: |
| 13 | + //Set the SPI SCLK frequency, SPI Mode and CS pin |
| 14 | + magAlpha.begin(SPI_SCLK_FREQUENCY, MA_SPI_MODE_3, SPI_CS_PIN); |
| 15 | + //Set the Serial Communication used to report the angle |
| 16 | + Serial.begin(UART_BAUDRATE); |
| 17 | +} |
| 18 | + |
| 19 | +void loop() { |
| 20 | + // put your main code here, to run repeatedly: |
| 21 | + //======================================================================== |
| 22 | + //Read the angle using different methods |
| 23 | + //======================================================================== |
| 24 | + double angle; |
| 25 | + uint16_t angleRaw16; |
| 26 | + uint8_t angleRaw8; |
| 27 | + |
| 28 | + Serial.println("Read Angle using differents methods:"); |
| 29 | + |
| 30 | + //Read the angle in degree (Read 16-bit raw angle value and then convert it to the 0-360 degree range) |
| 31 | + angle = magAlpha.readAngle(); |
| 32 | + Serial.print(" magAlpha.readAngle() = "); |
| 33 | + Serial.println(angle, 3); |
| 34 | + |
| 35 | + //Read the angle (16-bit raw angle value) |
| 36 | + angleRaw16 = magAlpha.readAngleRaw(); |
| 37 | + Serial.print(" magAlpha.readAngleRaw() = "); |
| 38 | + Serial.println(angleRaw16, DEC); |
| 39 | + |
| 40 | + //Read the angle (16-bit raw angle value), equivalent to magAlpha.readAngleRaw() function |
| 41 | + angleRaw16 = magAlpha.readAngleRaw16(); |
| 42 | + Serial.print(" magAlpha.readAngleRaw16() = "); |
| 43 | + Serial.println(angleRaw16, DEC); |
| 44 | + |
| 45 | + //Read the angle (8-bit raw angle value) |
| 46 | + angleRaw8 = magAlpha.readAngleRaw8(); |
| 47 | + Serial.print(" magAlpha.readAngleRaw8() = "); |
| 48 | + Serial.println(angleRaw8, DEC); |
| 49 | + |
| 50 | + //Read the angle (16-bit raw angle value) and check the parity bit to detect possible communication error |
| 51 | + bool error; |
| 52 | + angleRaw16 = magAlpha.readAngleRaw16(&error); |
| 53 | + Serial.print(" magAlpha.readAngleRaw16(&error) = "); |
| 54 | + Serial.print(angleRaw16, DEC); |
| 55 | + if (error == true){ |
| 56 | + Serial.print("\t => Communication error detected"); |
| 57 | + } |
| 58 | + else{ |
| 59 | + Serial.print("\t => Operation Succeed"); |
| 60 | + } |
| 61 | + Serial.println(); |
| 62 | + |
| 63 | + |
| 64 | + |
| 65 | + //======================================================================== |
| 66 | + //Read the zero settings in register 0 and 1 |
| 67 | + //======================================================================== |
| 68 | + uint8_t readbackRegister0Value, readbackRegister1Value; |
| 69 | + //Read MagAlpha Gen3 Zero Settings (Registers 0 and 1 |
| 70 | + readbackRegister0Value = magAlpha.readRegister(0); |
| 71 | + readbackRegister1Value = magAlpha.readRegister(1); |
| 72 | + Serial.println("Read Zero Setting:"); |
| 73 | + Serial.print(" Read Register[0] = 0x"); |
| 74 | + Serial.println(readbackRegister0Value, HEX); |
| 75 | + Serial.print(" Read Register[1] = 0x"); |
| 76 | + Serial.println(readbackRegister1Value, HEX); |
| 77 | + |
| 78 | + //======================================================================== |
| 79 | + //Write MagAlpha Gen3 Zero Settings with value 0x7FFF (Registers 0 and 1) |
| 80 | + //======================================================================== |
| 81 | + readbackRegister0Value = magAlpha.writeRegister(0, 0xFF); |
| 82 | + readbackRegister1Value = magAlpha.writeRegister(1, 0x7F); |
| 83 | + Serial.println("Write Zero Setting:"); |
| 84 | + Serial.print(" Write Register[0] = 0x"); |
| 85 | + Serial.println(readbackRegister0Value, HEX); |
| 86 | + Serial.print(" Write Register[1] = 0x"); |
| 87 | + Serial.println(readbackRegister1Value, HEX); |
| 88 | + if ((readbackRegister0Value == 0xFF) && (readbackRegister1Value == 0x7F)) |
| 89 | + { |
| 90 | + Serial.println(" Write Process Succeed"); |
| 91 | + } |
| 92 | + else |
| 93 | + { |
| 94 | + Serial.println(" Write Process Fail"); |
| 95 | + } |
| 96 | + |
| 97 | + //======================================================================== |
| 98 | + //Change MagAlpha Gen3 Rotation Direction (Register 9, bit 7) |
| 99 | + //======================================================================== |
| 100 | + uint8_t readbackRegister9Value; |
| 101 | + //Read register 9 and toggle RD state |
| 102 | + readbackRegister9Value = magAlpha.readRegister(9); |
| 103 | + if ((readbackRegister9Value & 0x80) == 0){ |
| 104 | + //Set RD to 1 |
| 105 | + magAlpha.writeRegister(9, 0x80); |
| 106 | + } |
| 107 | + else{ |
| 108 | + //Set RD to 0 |
| 109 | + magAlpha.writeRegister(9, 0x00); |
| 110 | + } |
| 111 | + Serial.println("Write Rotation Direction Setting:"); |
| 112 | + Serial.print(" Write Register[9] = 0x"); |
| 113 | + Serial.println(readbackRegister9Value, HEX); |
| 114 | +} |
0 commit comments