i2c driver for PiBorg PicoBorgReverse
Dependents: TheBubbleWorks_MicroBorg
PicoBorgReverse.cpp@0:f8a6d1cc7fa8, 2016-02-09 (annotated)
- 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?
User | Revision | Line number | New 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 |