Skip to content

Commit

Permalink
feat: added WT901 with I2C for hardware 0.10.x
Browse files Browse the repository at this point in the history
  • Loading branch information
ClemensElflein committed Nov 10, 2022
1 parent 2f65159 commit 2874c6e
Show file tree
Hide file tree
Showing 7 changed files with 431 additions and 15 deletions.
21 changes: 12 additions & 9 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,18 @@ jobs:
- name: Copy Artifacts
run: |
mkdir artifacts
mkdir ./artifacts/ELFLEIN_PROTOTYPE
cp Firmware/LowLevel/.pio/build/ELFLEIN_PROTOTYPE/firmware.elf ./artifacts/ELFLEIN_PROTOTYPE
cp Firmware/LowLevel/.pio/build/ELFLEIN_PROTOTYPE/firmware.uf2 ./artifacts/ELFLEIN_PROTOTYPE
mkdir ./artifacts/MPU9250
cp Firmware/LowLevel/.pio/build/MPU9250/firmware.elf ./artifacts/MPU9250
cp Firmware/LowLevel/.pio/build/MPU9250/firmware.uf2 ./artifacts/MPU9250
mkdir ./artifacts/WT901_INSTEAD_OF_SOUND
cp Firmware/LowLevel/.pio/build/WT901_INSTEAD_OF_SOUND/firmware.elf ./artifacts/WT901_INSTEAD_OF_SOUND
cp Firmware/LowLevel/.pio/build/WT901_INSTEAD_OF_SOUND/firmware.uf2 ./artifacts/WT901_INSTEAD_OF_SOUND
mkdir ./artifacts/0_10_X_MPU9250
cp Firmware/LowLevel/.pio/build/0_10_X_MPU9250/firmware.elf ./artifacts/0_10_X_MPU9250
cp Firmware/LowLevel/.pio/build/0_10_X_MPU9250/firmware.uf2 ./artifacts/0_10_X_MPU9250
mkdir ./artifacts/0_10_X_WT901
cp Firmware/LowLevel/.pio/build/0_10_X_WT901/firmware.elf ./artifacts/0_10_X_WT901
cp Firmware/LowLevel/.pio/build/0_10_X_WT901/firmware.uf2 ./artifacts/0_10_X_WT901
mkdir ./artifacts/0_9_X_MPU9250
cp Firmware/LowLevel/.pio/build/0_9_X_MPU9250/firmware.elf ./artifacts/0_9_X_MPU9250
cp Firmware/LowLevel/.pio/build/0_9_X_MPU9250/firmware.uf2 ./artifacts/0_9_X_MPU9250
mkdir ./artifacts/0_9_X_WT901_INSTEAD_OF_SOUND
cp Firmware/LowLevel/.pio/build/0_9_X_WT901_INSTEAD_OF_SOUND/firmware.elf ./artifacts/0_9_X_WT901_INSTEAD_OF_SOUND
cp Firmware/LowLevel/.pio/build/0_9_X_WT901_INSTEAD_OF_SOUND/firmware.uf2 ./artifacts/0_9_X_WT901_INSTEAD_OF_SOUND
- name: Step 3 - Use the Upload Artifact GitHub Action
uses: actions/upload-artifact@v3
with:
Expand Down
123 changes: 123 additions & 0 deletions Firmware/LowLevel/lib/JY901_I2C/JY901.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
#include "JY901.h"
#include "string.h"

CJY901 ::CJY901 (HardwareI2C *wire)
{
ucDevAddr =0x50;
this->wire = wire;
}
void CJY901::StartIIC()
{
ucDevAddr = 0x50;
wire->begin();
}
void CJY901::StartIIC(unsigned char ucAddr)
{
ucDevAddr = ucAddr;
wire->begin();
}
void CJY901 ::CopeSerialData(unsigned char ucData)
{
static unsigned char ucRxBuffer[250];
static unsigned char ucRxCnt = 0;

ucRxBuffer[ucRxCnt++]=ucData;
if (ucRxBuffer[0]!=0x55)
{
ucRxCnt=0;
return;
}
if (ucRxCnt<11) {return;}
else
{
switch(ucRxBuffer[1])
{
case 0x50: memcpy(&stcTime,&ucRxBuffer[2],8);break;
case 0x51: memcpy(&stcAcc,&ucRxBuffer[2],8);break;
case 0x52: memcpy(&stcGyro,&ucRxBuffer[2],8);break;
case 0x53: memcpy(&stcAngle,&ucRxBuffer[2],8);break;
case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break;
case 0x55: memcpy(&stcDStatus,&ucRxBuffer[2],8);break;
case 0x56: memcpy(&stcPress,&ucRxBuffer[2],8);break;
case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;
case 0x58: memcpy(&stcGPSV,&ucRxBuffer[2],8);break;
case 0x59: memcpy(&stcQuater,&ucRxBuffer[2],8);break;
case 0x5a: memcpy(&stcSN,&ucRxBuffer[2],8);break;
}
ucRxCnt=0;
}
}
void CJY901::readRegisters(unsigned char deviceAddr,unsigned char addressToRead, unsigned char bytesToRead, char * dest)
{
wire->beginTransmission(deviceAddr);
wire->write(addressToRead);
wire->endTransmission(false); //endTransmission but keep the connection active

wire->requestFrom(deviceAddr, bytesToRead); //Ask for bytes, once done, bus is released by default

while(wire->available() < bytesToRead); //Hang out until we get the # of bytes we expect

for(int x = 0 ; x < bytesToRead ; x++)
dest[x] = wire->read();
}
void CJY901::writeRegister(unsigned char deviceAddr,unsigned char addressToWrite,unsigned char bytesToRead, char *dataToWrite)
{
wire->beginTransmission(deviceAddr);
wire->write(addressToWrite);
for(int i = 0 ; i < bytesToRead ; i++)
wire->write(dataToWrite[i]);
wire->endTransmission(); //Stop transmitting
}

short CJY901::ReadWord(unsigned char ucAddr)
{
short sResult;
readRegisters(ucDevAddr, ucAddr, 2, (char *)&sResult);
return sResult;
}
void CJY901::WriteWord(unsigned char ucAddr,short sData)
{
writeRegister(ucDevAddr, ucAddr, 2, (char *)&sData);
}
void CJY901::ReadData(unsigned char ucAddr,unsigned char ucLength,char chrData[])
{
readRegisters(ucDevAddr, ucAddr, ucLength, chrData);
}

void CJY901::GetTime()
{
readRegisters(ucDevAddr, 0x30, 8, (char*)&stcTime);
}
void CJY901::GetAcc()
{
readRegisters(ucDevAddr, AX, 6, (char *)&stcAcc);
}
void CJY901::GetGyro()
{
readRegisters(ucDevAddr, GX, 6, (char *)&stcGyro);
}

void CJY901::GetAngle()
{
readRegisters(ucDevAddr, Roll, 6, (char *)&stcAngle);
}
void CJY901::GetMag()
{
readRegisters(ucDevAddr, HX, 6, (char *)&stcMag);
}
void CJY901::GetPress()
{
readRegisters(ucDevAddr, PressureL, 8, (char *)&stcPress);
}
void CJY901::GetDStatus()
{
readRegisters(ucDevAddr, D0Status, 8, (char *)&stcDStatus);
}
void CJY901::GetLonLat()
{
readRegisters(ucDevAddr, LonL, 8, (char *)&stcLonLat);
}
void CJY901::GetGPSV()
{
readRegisters(ucDevAddr, GPSHeight, 8, (char *)&stcGPSV);
}
184 changes: 184 additions & 0 deletions Firmware/LowLevel/lib/JY901_I2C/JY901.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
#ifndef JY901_h
#define JY901_h
#include <Wire.h>

#define SAVE 0x00
#define CALSW 0x01
#define RSW 0x02
#define RRATE 0x03
#define BAUD 0x04
#define AXOFFSET 0x05
#define AYOFFSET 0x06
#define AZOFFSET 0x07
#define GXOFFSET 0x08
#define GYOFFSET 0x09
#define GZOFFSET 0x0a
#define HXOFFSET 0x0b
#define HYOFFSET 0x0c
#define HZOFFSET 0x0d
#define D0MODE 0x0e
#define D1MODE 0x0f
#define D2MODE 0x10
#define D3MODE 0x11
#define D0PWMH 0x12
#define D1PWMH 0x13
#define D2PWMH 0x14
#define D3PWMH 0x15
#define D0PWMT 0x16
#define D1PWMT 0x17
#define D2PWMT 0x18
#define D3PWMT 0x19
#define IICADDR 0x1a
#define LEDOFF 0x1b
#define GPSBAUD 0x1c

#define YYMM 0x30
#define DDHH 0x31
#define MMSS 0x32
#define MS 0x33
#define AX 0x34
#define AY 0x35
#define AZ 0x36
#define GX 0x37
#define GY 0x38
#define GZ 0x39
#define HX 0x3a
#define HY 0x3b
#define HZ 0x3c
#define Roll 0x3d
#define Pitch 0x3e
#define Yaw 0x3f
#define TEMP 0x40
#define D0Status 0x41
#define D1Status 0x42
#define D2Status 0x43
#define D3Status 0x44
#define PressureL 0x45
#define PressureH 0x46
#define HeightL 0x47
#define HeightH 0x48
#define LonL 0x49
#define LonH 0x4a
#define LatL 0x4b
#define LatH 0x4c
#define GPSHeight 0x4d
#define GPSYAW 0x4e
#define GPSVL 0x4f
#define GPSVH 0x50

#define DIO_MODE_AIN 0
#define DIO_MODE_DIN 1
#define DIO_MODE_DOH 2
#define DIO_MODE_DOL 3
#define DIO_MODE_DOPWM 4
#define DIO_MODE_GPS 5

struct STime
{
unsigned char ucYear;
unsigned char ucMonth;
unsigned char ucDay;
unsigned char ucHour;
unsigned char ucMinute;
unsigned char ucSecond;
unsigned short usMiliSecond;
};
struct SAcc
{
short a[3];
short T;
};
struct SGyro
{
short w[3];
short T;
};
struct SAngle
{
short Angle[3];
short T;
};
struct SMag
{
short h[3];
short T;
};

struct SDStatus
{
short sDStatus[4];
};

struct SPress
{
long lPressure;
long lAltitude;
};

struct SLonLat
{
long lLon;
long lLat;
};

struct SGPSV
{
short sGPSHeight;
short sGPSYaw;
long lGPSVelocity;
};
struct SQuater
{
short q0;
short q1;
short q2;
short q3;
};
struct SSN
{
short sSVNum;
short sPDOP;
short sHDOP;
short sVDOP;
};
class CJY901
{
public:
struct STime stcTime;
struct SAcc stcAcc;
struct SGyro stcGyro;
struct SAngle stcAngle;
struct SMag stcMag;
struct SDStatus stcDStatus;
struct SPress stcPress;
struct SLonLat stcLonLat;
struct SGPSV stcGPSV;
struct SQuater stcQuater;
struct SSN stcSN;

CJY901 (HardwareI2C *wire);
void StartIIC();
void StartIIC(unsigned char ucAddr);
void CopeSerialData(unsigned char ucData);
short ReadWord(unsigned char ucAddr);
void WriteWord(unsigned char ucAddr,short sData);
void ReadData(unsigned char ucAddr,unsigned char ucLength,char chrData[]);
void GetTime();
void GetAcc();
void GetGyro();
void GetAngle();
void GetMag();
void GetPress();
void GetDStatus();
void GetLonLat();
void GetGPSV();

private:
HardwareI2C *wire;
unsigned char ucDevAddr;
void readRegisters(unsigned char deviceAddr,unsigned char addressToRead, unsigned char bytesToRead, char * dest);
void writeRegister(unsigned char deviceAddr,unsigned char addressToWrite,unsigned char bytesToRead, char *dataToWrite);
};
extern CJY901 JY901;
#include <Wire.h>
#endif
31 changes: 25 additions & 6 deletions Firmware/LowLevel/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ lib_deps =
debug_tool = custom
debug_init_break =
debug_load_mode = always
debug_port = tcp:ubuntu.local:3333
debug_port = tcp:openmower.local:3333

; 133MHz
board_build.f_cpu = 133000000L
Expand All @@ -43,17 +43,36 @@ debug_build_flags = -O0 -g -ggdb
build_src_filter = +<*> -<.git/> -<.svn/> -<imu/*> -<soundsystem.cpp>


[env:MPU9250]


[env:0_10_X_MPU9250]
lib_ignore = JY901_SERIAL,JY901_I2C
lib_deps = ${env.lib_deps}
bolderflight/Bolder Flight Systems MPU9250@^1.0.2
powerbroker2/DFPlayerMini_Fast@^1.2.4
build_src_filter = ${env.build_src_filter} +<imu/MPU9250/>
build_flags = ${env.build_flags} -DHW_0_10_X

[env:0_10_X_WT901]
build_src_filter = ${env.build_src_filter} +<imu/WT901_I2C/>
lib_ignore = JY901_SERIAL
lib_deps = ${env.lib_deps}
JY901_I2C
build_flags =
${env.build_flags} -DWT901_I2C -DHW_0_10_X

[env:0_9_X_MPU9250]
lib_ignore = JY901_SERIAL,JY901_I2C
lib_deps = ${env.lib_deps}
bolderflight/Bolder Flight Systems MPU9250@^1.0.2
powerbroker2/DFPlayerMini_Fast@^1.2.4
build_src_filter = ${env.build_src_filter} +<imu/MPU9250/>
build_flags = ${env.build_flags}
build_flags = ${env.build_flags} -DHW_0_9_X

[env:WT901_INSTEAD_OF_SOUND]
build_src_filter = ${env.build_src_filter} +<imu/WT901/>
[env:0_9_X_WT901_INSTEAD_OF_SOUND]
lib_ignore = JY901_I2C
build_src_filter = ${env.build_src_filter} +<imu/WT901_SERIAL/>
lib_deps = ${env.lib_deps}
JY901_SERIAL
build_flags =
${env.build_flags} -DWT901_INSTEAD_OF_SOUND
${env.build_flags} -DWT901_INSTEAD_OF_SOUND -DHW_0_9_X

0 comments on commit 2874c6e

Please sign in to comment.