SCL3300 sensor 3-axis inclinometer with angle output and digital SPI interface
SCL3300.h@1:52b1117c65ea, 22 months ago (annotated)
- Committer:
- metronix
- Date:
- Mon Sep 05 15:56:44 2022 +0000
- Revision:
- 1:52b1117c65ea
- Parent:
- 0:e8ba98a758d0
modified scl3300 Library test program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sameera0824 | 0:e8ba98a758d0 | 1 | /****************************************************************************** |
sameera0824 | 0:e8ba98a758d0 | 2 | SCL3300.h |
sameera0824 | 0:e8ba98a758d0 | 3 | SCL3300 Arduino Library Header File |
sameera0824 | 0:e8ba98a758d0 | 4 | David Armstrong |
sameera0824 | 0:e8ba98a758d0 | 5 | Version 3.2.0 - September 3, 2021 |
sameera0824 | 0:e8ba98a758d0 | 6 | https://github.com/DavidArmstrong/SCL3300 |
sameera0824 | 0:e8ba98a758d0 | 7 | |
sameera0824 | 0:e8ba98a758d0 | 8 | Resources: |
sameera0824 | 0:e8ba98a758d0 | 9 | Uses SPI.h for SPI operation |
sameera0824 | 0:e8ba98a758d0 | 10 | This code is released under the [MIT License](http://opensource.org/licenses/MIT). |
sameera0824 | 0:e8ba98a758d0 | 11 | Please review the LICENSE.md file included with this example. |
sameera0824 | 0:e8ba98a758d0 | 12 | Distributed as-is; no warranty is given. |
sameera0824 | 0:e8ba98a758d0 | 13 | |
sameera0824 | 0:e8ba98a758d0 | 14 | This file prototypes the SCL3300 class, as implemented in SCL3300.cpp |
sameera0824 | 0:e8ba98a758d0 | 15 | |
sameera0824 | 0:e8ba98a758d0 | 16 | ******************************************************************************/ |
sameera0824 | 0:e8ba98a758d0 | 17 | |
sameera0824 | 0:e8ba98a758d0 | 18 | // ensure this library description is only included once |
sameera0824 | 0:e8ba98a758d0 | 19 | #ifndef __SCL3300_h |
sameera0824 | 0:e8ba98a758d0 | 20 | #define __SCL3300_h |
sameera0824 | 0:e8ba98a758d0 | 21 | |
sameera0824 | 0:e8ba98a758d0 | 22 | // Uncomment the following line for debugging output |
sameera0824 | 0:e8ba98a758d0 | 23 | //#define debug_scl3300 |
sameera0824 | 0:e8ba98a758d0 | 24 | |
metronix | 1:52b1117c65ea | 25 | #include "mbed.h"// SPI library is used for...SPI. |
sameera0824 | 0:e8ba98a758d0 | 26 | |
sameera0824 | 0:e8ba98a758d0 | 27 | //Define allowed commands to SCL3300 inclinometer |
sameera0824 | 0:e8ba98a758d0 | 28 | #define RdAccX 0x040000f7 |
sameera0824 | 0:e8ba98a758d0 | 29 | #define RdAccY 0x080000fd |
sameera0824 | 0:e8ba98a758d0 | 30 | #define RdAccZ 0x0c0000fb |
sameera0824 | 0:e8ba98a758d0 | 31 | #define RdSTO 0x100000e9 |
sameera0824 | 0:e8ba98a758d0 | 32 | #define EnaAngOut 0xb0001f6f |
sameera0824 | 0:e8ba98a758d0 | 33 | #define RdAngX 0x240000c7 |
sameera0824 | 0:e8ba98a758d0 | 34 | #define RdAngY 0x280000cd |
sameera0824 | 0:e8ba98a758d0 | 35 | #define RdAngZ 0x2c0000cb |
sameera0824 | 0:e8ba98a758d0 | 36 | #define RdTemp 0x140000ef |
sameera0824 | 0:e8ba98a758d0 | 37 | #define RdStatSum 0x180000e5 |
sameera0824 | 0:e8ba98a758d0 | 38 | #define RdErrFlg1 0x1c0000e3 |
sameera0824 | 0:e8ba98a758d0 | 39 | #define RdErrFlg2 0x200000c1 |
sameera0824 | 0:e8ba98a758d0 | 40 | #define RdCMD 0x340000df |
sameera0824 | 0:e8ba98a758d0 | 41 | #define ChgMode1 0xb400001f |
sameera0824 | 0:e8ba98a758d0 | 42 | #define ChgMode2 0xb4000102 |
sameera0824 | 0:e8ba98a758d0 | 43 | #define ChgMode3 0xb4000225 |
sameera0824 | 0:e8ba98a758d0 | 44 | #define ChgMode4 0xb4000338 |
sameera0824 | 0:e8ba98a758d0 | 45 | #define SetPwrDwn 0xb400046b |
sameera0824 | 0:e8ba98a758d0 | 46 | #define WakeUp 0xb400001f |
sameera0824 | 0:e8ba98a758d0 | 47 | #define SWreset 0xb4002098 |
sameera0824 | 0:e8ba98a758d0 | 48 | #define RdWHOAMI 0x40000091 |
sameera0824 | 0:e8ba98a758d0 | 49 | #define RdSer1 0x640000a7 |
sameera0824 | 0:e8ba98a758d0 | 50 | #define RdSer2 0x680000AD |
sameera0824 | 0:e8ba98a758d0 | 51 | #define RdCurBank 0x7c0000b3 |
sameera0824 | 0:e8ba98a758d0 | 52 | #define SwtchBnk0 0xfc000073 |
sameera0824 | 0:e8ba98a758d0 | 53 | #define SwtchBnk1 0xfc00016e |
sameera0824 | 0:e8ba98a758d0 | 54 | |
sameera0824 | 0:e8ba98a758d0 | 55 | // Structure to hold raw sensor data |
sameera0824 | 0:e8ba98a758d0 | 56 | // We need to populate all this every time we read a set of data |
sameera0824 | 0:e8ba98a758d0 | 57 | struct SCL3300data { |
sameera0824 | 0:e8ba98a758d0 | 58 | public: |
sameera0824 | 0:e8ba98a758d0 | 59 | int16_t AccX; |
sameera0824 | 0:e8ba98a758d0 | 60 | int16_t AccY; |
sameera0824 | 0:e8ba98a758d0 | 61 | int16_t AccZ; |
sameera0824 | 0:e8ba98a758d0 | 62 | int16_t STO; |
sameera0824 | 0:e8ba98a758d0 | 63 | int16_t TEMP; |
sameera0824 | 0:e8ba98a758d0 | 64 | int16_t AngX; |
sameera0824 | 0:e8ba98a758d0 | 65 | int16_t AngY; |
sameera0824 | 0:e8ba98a758d0 | 66 | int16_t AngZ; |
sameera0824 | 0:e8ba98a758d0 | 67 | uint16_t StatusSum; |
sameera0824 | 0:e8ba98a758d0 | 68 | uint16_t WHOAMI; |
sameera0824 | 0:e8ba98a758d0 | 69 | }; |
sameera0824 | 0:e8ba98a758d0 | 70 | |
sameera0824 | 0:e8ba98a758d0 | 71 | // SCL3300 library interface description |
sameera0824 | 0:e8ba98a758d0 | 72 | class SCL3300 { |
sameera0824 | 0:e8ba98a758d0 | 73 | // user-accessible "public" interface |
sameera0824 | 0:e8ba98a758d0 | 74 | public: |
metronix | 1:52b1117c65ea | 75 | SCL3300 (PinName mosi, PinName miso, PinName sclk, PinName scl3300_csPin);//constructer |
sameera0824 | 0:e8ba98a758d0 | 76 | |
sameera0824 | 0:e8ba98a758d0 | 77 | SCL3300data sclData; |
metronix | 1:52b1117c65ea | 78 | bool setMode(int mode); |
metronix | 1:52b1117c65ea | 79 | bool begin(void); |
sameera0824 | 0:e8ba98a758d0 | 80 | //Functions to retrieve sensor data |
metronix | 1:52b1117c65ea | 81 | bool isConnected(); |
metronix | 1:52b1117c65ea | 82 | bool available(void); |
sameera0824 | 0:e8ba98a758d0 | 83 | void setFastReadMode(); |
sameera0824 | 0:e8ba98a758d0 | 84 | void stopFastReadMode(); |
sameera0824 | 0:e8ba98a758d0 | 85 | double getCalculatedAngleX(void); |
sameera0824 | 0:e8ba98a758d0 | 86 | double getCalculatedAngleY(void); |
sameera0824 | 0:e8ba98a758d0 | 87 | double getCalculatedAngleZ(void); |
sameera0824 | 0:e8ba98a758d0 | 88 | double getTiltLevelOffsetAngleX(void); |
sameera0824 | 0:e8ba98a758d0 | 89 | double getTiltLevelOffsetAngleY(void); |
sameera0824 | 0:e8ba98a758d0 | 90 | double getTiltLevelOffsetAngleZ(void); |
sameera0824 | 0:e8ba98a758d0 | 91 | double getCalculatedAccelerometerX(void); |
sameera0824 | 0:e8ba98a758d0 | 92 | double getCalculatedAccelerometerY(void); |
sameera0824 | 0:e8ba98a758d0 | 93 | double getCalculatedAccelerometerZ(void); |
sameera0824 | 0:e8ba98a758d0 | 94 | uint16_t getErrFlag1(void); |
sameera0824 | 0:e8ba98a758d0 | 95 | uint16_t getErrFlag2(void); |
sameera0824 | 0:e8ba98a758d0 | 96 | unsigned long getSerialNumber(void); |
sameera0824 | 0:e8ba98a758d0 | 97 | double getCalculatedTemperatureCelsius(void); |
sameera0824 | 0:e8ba98a758d0 | 98 | double getCalculatedTemperatureFarenheit(void); |
sameera0824 | 0:e8ba98a758d0 | 99 | double angle(int16_t SCL3300_ANG); //two's complement value expected |
sameera0824 | 0:e8ba98a758d0 | 100 | double acceleration(int16_t SCL3300_ACC); |
sameera0824 | 0:e8ba98a758d0 | 101 | bool crcerr, statuserr; |
sameera0824 | 0:e8ba98a758d0 | 102 | uint16_t powerDownMode(void); |
sameera0824 | 0:e8ba98a758d0 | 103 | uint16_t WakeMeUp(void); |
sameera0824 | 0:e8ba98a758d0 | 104 | uint16_t reset(void); |
sameera0824 | 0:e8ba98a758d0 | 105 | |
sameera0824 | 0:e8ba98a758d0 | 106 | // library-accessible "private" interface |
sameera0824 | 0:e8ba98a758d0 | 107 | private: |
metronix | 1:52b1117c65ea | 108 | SPI _spi; |
metronix | 1:52b1117c65ea | 109 | Timer timer1; |
metronix | 1:52b1117c65ea | 110 | Timer timer2; |
metronix | 1:52b1117c65ea | 111 | DigitalOut _scl3300_csPin; // SPI chip select pin |
metronix | 1:52b1117c65ea | 112 | uint8_t scl3300_mode ; // no Default mode |
sameera0824 | 0:e8ba98a758d0 | 113 | uint8_t SCL3300_CMD, SCL3300_CRC; |
sameera0824 | 0:e8ba98a758d0 | 114 | uint16_t SCL3300_DATA; |
sameera0824 | 0:e8ba98a758d0 | 115 | double Temperature, X_angle, Y_angle, Z_angle; |
metronix | 1:52b1117c65ea | 116 | bool setFastRead; //chose mode |
metronix | 1:52b1117c65ea | 117 | uint32_t _transfer_sck; |
sameera0824 | 0:e8ba98a758d0 | 118 | |
sameera0824 | 0:e8ba98a758d0 | 119 | void initSPI(); |
sameera0824 | 0:e8ba98a758d0 | 120 | void beginTransmission(); |
sameera0824 | 0:e8ba98a758d0 | 121 | void endTransmission(); |
sameera0824 | 0:e8ba98a758d0 | 122 | uint8_t CalculateCRC(uint32_t Data); |
sameera0824 | 0:e8ba98a758d0 | 123 | uint8_t CRC8(uint8_t BitValue, uint8_t SCL3300_CRC); |
sameera0824 | 0:e8ba98a758d0 | 124 | unsigned long transfer(unsigned long value); |
sameera0824 | 0:e8ba98a758d0 | 125 | |
sameera0824 | 0:e8ba98a758d0 | 126 | union FourByte { |
sameera0824 | 0:e8ba98a758d0 | 127 | unsigned long bit32; |
sameera0824 | 0:e8ba98a758d0 | 128 | unsigned int bit16[2]; |
sameera0824 | 0:e8ba98a758d0 | 129 | unsigned char bit8[4]; |
sameera0824 | 0:e8ba98a758d0 | 130 | }; |
metronix | 1:52b1117c65ea | 131 | unsigned long modeCMD[5]; |
sameera0824 | 0:e8ba98a758d0 | 132 | }; |
sameera0824 | 0:e8ba98a758d0 | 133 | #endif |