i2c driver for PiBorg PicoBorgReverse

Dependents:   TheBubbleWorks_MicroBorg

Committer:
waynek
Date:
Tue Feb 09 11:16:09 2016 +0000
Revision:
0:f8a6d1cc7fa8
Child:
2:cecfacbc2048
initial commit

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