i2c driver for PiBorg PicoBorgReverse

Dependents:   TheBubbleWorks_MicroBorg

Committer:
waynek
Date:
Tue Feb 09 15:31:10 2016 +0000
Revision:
2:cecfacbc2048
Parent:
0:f8a6d1cc7fa8
removed microbit dependancy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
waynek 0:f8a6d1cc7fa8 1 /************************************/
waynek 0:f8a6d1cc7fa8 2 /***** PicoBorg Reverse Library *****/
waynek 0:f8a6d1cc7fa8 3 /************************************/
waynek 0:f8a6d1cc7fa8 4
waynek 0:f8a6d1cc7fa8 5 // Includes
waynek 0:f8a6d1cc7fa8 6 #include "PicoBorgReverse.h" // The PicoBorg Reverse library constants
waynek 0:f8a6d1cc7fa8 7
waynek 0:f8a6d1cc7fa8 8
waynek 0:f8a6d1cc7fa8 9 bool PicoBorgReverse::checkId(void)
waynek 0:f8a6d1cc7fa8 10 {
waynek 0:f8a6d1cc7fa8 11 i2c_write(PBR_COMMAND_GET_ID);
waynek 0:f8a6d1cc7fa8 12 char readBuf[PBR_I2C_MAX_LEN] = {0};
waynek 2:cecfacbc2048 13 int readStatus = i2c_read(readBuf, PBR_I2C_MAX_LEN);
waynek 0:f8a6d1cc7fa8 14 return readBuf[1] == PBR_I2C_ID_PICOBORG_REV;
waynek 0:f8a6d1cc7fa8 15 }
waynek 0:f8a6d1cc7fa8 16
waynek 0:f8a6d1cc7fa8 17
waynek 0:f8a6d1cc7fa8 18 void PicoBorgReverse::resetEpo(void)
waynek 0:f8a6d1cc7fa8 19 {
waynek 0:f8a6d1cc7fa8 20 i2c_write(PBR_COMMAND_RESET_EPO);
waynek 0:f8a6d1cc7fa8 21 }
waynek 0:f8a6d1cc7fa8 22
waynek 0:f8a6d1cc7fa8 23 bool PicoBorgReverse::getEpo(void) {
waynek 2:cecfacbc2048 24 i2c_write(PBR_COMMAND_GET_EPO);
waynek 0:f8a6d1cc7fa8 25
waynek 0:f8a6d1cc7fa8 26 char readBuf[PBR_I2C_MAX_LEN] = {0};
waynek 2:cecfacbc2048 27 int readStatus = i2c_read(readBuf, PBR_I2C_MAX_LEN);
waynek 0:f8a6d1cc7fa8 28
waynek 0:f8a6d1cc7fa8 29 return readBuf[1] == PBR_COMMAND_VALUE_ON;
waynek 0:f8a6d1cc7fa8 30 }
waynek 0:f8a6d1cc7fa8 31
waynek 0:f8a6d1cc7fa8 32 // Sets the system to ignore or use the EPO latch, set to false if you have an EPO switch, true if you do not
waynek 0:f8a6d1cc7fa8 33 void PicoBorgReverse::setEpoIgnore(bool state) {
waynek 0:f8a6d1cc7fa8 34 i2c_write(PBR_COMMAND_SET_EPO_IGNORE, state ? PBR_COMMAND_VALUE_ON : PBR_COMMAND_VALUE_OFF);
waynek 0:f8a6d1cc7fa8 35 }
waynek 0:f8a6d1cc7fa8 36
waynek 0:f8a6d1cc7fa8 37 // Reads the system EPO ignore state, False for using the EPO latch, True for ignoring the EPO latch
waynek 0:f8a6d1cc7fa8 38 bool PicoBorgReverse::getEpoIgnore(void) {
waynek 0:f8a6d1cc7fa8 39
waynek 0:f8a6d1cc7fa8 40 i2c_write(PBR_COMMAND_GET_EPO_IGNORE);
waynek 0:f8a6d1cc7fa8 41
waynek 0:f8a6d1cc7fa8 42 char readBuf[PBR_I2C_MAX_LEN] = {0};
waynek 2:cecfacbc2048 43 int readStatus = i2c_read(readBuf, PBR_I2C_MAX_LEN);
waynek 0:f8a6d1cc7fa8 44
waynek 0:f8a6d1cc7fa8 45 return readBuf[1] == PBR_COMMAND_VALUE_ON;
waynek 0:f8a6d1cc7fa8 46
waynek 0:f8a6d1cc7fa8 47 }
waynek 0:f8a6d1cc7fa8 48
waynek 0:f8a6d1cc7fa8 49
waynek 0:f8a6d1cc7fa8 50 bool PicoBorgReverse::getCommsFailsafe(void)
waynek 0:f8a6d1cc7fa8 51 {
waynek 0:f8a6d1cc7fa8 52 i2c_write(PBR_COMMAND_GET_FAILSAFE);
waynek 0:f8a6d1cc7fa8 53
waynek 0:f8a6d1cc7fa8 54 char readBuf[PBR_I2C_MAX_LEN] = {0};
waynek 2:cecfacbc2048 55 int readStatus = i2c_read(readBuf, PBR_I2C_MAX_LEN);
waynek 0:f8a6d1cc7fa8 56
waynek 0:f8a6d1cc7fa8 57 return readBuf[1] == PBR_COMMAND_VALUE_ON;
waynek 0:f8a6d1cc7fa8 58 }
waynek 0:f8a6d1cc7fa8 59
waynek 0:f8a6d1cc7fa8 60 void PicoBorgReverse::setCommsFailsafe(bool state)
waynek 0:f8a6d1cc7fa8 61 {
waynek 0:f8a6d1cc7fa8 62 i2c_write(PBR_COMMAND_SET_FAILSAFE, state ? PBR_COMMAND_VALUE_ON : PBR_COMMAND_VALUE_OFF);
waynek 0:f8a6d1cc7fa8 63 }
waynek 0:f8a6d1cc7fa8 64
waynek 0:f8a6d1cc7fa8 65 bool PicoBorgReverse::getDriveFault(void) {
waynek 0:f8a6d1cc7fa8 66 i2c_write(PBR_COMMAND_GET_DRIVE_FAULT);
waynek 0:f8a6d1cc7fa8 67
waynek 0:f8a6d1cc7fa8 68 char readBuf[PBR_I2C_MAX_LEN] = {0};
waynek 2:cecfacbc2048 69 int readStatus = i2c_read(readBuf, PBR_I2C_MAX_LEN);
waynek 0:f8a6d1cc7fa8 70
waynek 0:f8a6d1cc7fa8 71 return readBuf[1] == PBR_COMMAND_VALUE_ON;
waynek 0:f8a6d1cc7fa8 72 }
waynek 0:f8a6d1cc7fa8 73
waynek 0:f8a6d1cc7fa8 74
waynek 0:f8a6d1cc7fa8 75
waynek 0:f8a6d1cc7fa8 76 // Motor functions
waynek 0:f8a6d1cc7fa8 77
waynek 0:f8a6d1cc7fa8 78 void PicoBorgReverse::setMotor1(int power)
waynek 0:f8a6d1cc7fa8 79 {
waynek 0:f8a6d1cc7fa8 80 char cmd = power < 0 ? PBR_COMMAND_SET_B_REV : PBR_COMMAND_SET_B_FWD;
waynek 0:f8a6d1cc7fa8 81 power = power > PBR_PWM_MAX ? PBR_PWM_MAX : abs(power);
waynek 0:f8a6d1cc7fa8 82 i2c_write(cmd, (char) power);
waynek 0:f8a6d1cc7fa8 83 }
waynek 0:f8a6d1cc7fa8 84
waynek 0:f8a6d1cc7fa8 85 void PicoBorgReverse::setMotor2(int power)
waynek 0:f8a6d1cc7fa8 86 {
waynek 0:f8a6d1cc7fa8 87 char cmd = power < 0 ? PBR_COMMAND_SET_A_REV : PBR_COMMAND_SET_A_FWD;
waynek 0:f8a6d1cc7fa8 88 power = power > PBR_PWM_MAX ? PBR_PWM_MAX : abs(power);
waynek 0:f8a6d1cc7fa8 89 i2c_write(cmd, (char) power);
waynek 0:f8a6d1cc7fa8 90 }
waynek 0:f8a6d1cc7fa8 91
waynek 0:f8a6d1cc7fa8 92
waynek 0:f8a6d1cc7fa8 93 void PicoBorgReverse::setLed(bool state) {
waynek 0:f8a6d1cc7fa8 94 i2c_write(PBR_COMMAND_SET_LED, state ? PBR_COMMAND_VALUE_ON : PBR_COMMAND_VALUE_OFF);
waynek 0:f8a6d1cc7fa8 95 }
waynek 0:f8a6d1cc7fa8 96
waynek 0:f8a6d1cc7fa8 97