Nico De Witte
/
i2c_mbed_trex_emulator
TRex motor controller emulator for Vives students
main.cpp@1:a525356bd830, 2014-11-06 (annotated)
- Committer:
- dwini
- Date:
- Thu Nov 06 10:58:59 2014 +0000
- Revision:
- 1:a525356bd830
- Parent:
- 0:17670db9a782
Add basic status readout of the slave. Also add automatic battery voltage decreasing in time.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dwini | 0:17670db9a782 | 1 | #include "mbed.h" |
dwini | 1:a525356bd830 | 2 | #include "TRex.h" |
dwini | 0:17670db9a782 | 3 | |
dwini | 0:17670db9a782 | 4 | DigitalOut aLED(LED1); // Alive LED |
dwini | 0:17670db9a782 | 5 | Serial pc(USBTX, USBRX); // TX, RX |
dwini | 0:17670db9a782 | 6 | I2CSlave slave(p28, p27); // SDA, SCL |
dwini | 0:17670db9a782 | 7 | |
dwini | 1:a525356bd830 | 8 | const int SLAVE_ADDRESS = 0x0E; |
dwini | 0:17670db9a782 | 9 | const int I2C_FREQUENCY = 100000; |
dwini | 0:17670db9a782 | 10 | const int I2C_BUFFER_SIZE = 30; |
dwini | 0:17670db9a782 | 11 | |
dwini | 0:17670db9a782 | 12 | int main() { |
dwini | 0:17670db9a782 | 13 | pc.baud(115200); |
dwini | 0:17670db9a782 | 14 | |
dwini | 0:17670db9a782 | 15 | // Alive LED |
dwini | 0:17670db9a782 | 16 | int cAlive = 0; |
dwini | 0:17670db9a782 | 17 | |
dwini | 1:a525356bd830 | 18 | // Battery decrease counter |
dwini | 1:a525356bd830 | 19 | int cBattery = 0; |
dwini | 1:a525356bd830 | 20 | |
dwini | 0:17670db9a782 | 21 | // Configure I2C |
dwini | 0:17670db9a782 | 22 | slave.frequency(I2C_FREQUENCY); |
dwini | 0:17670db9a782 | 23 | pc.printf("Slave is working @ %dHz\r\n", I2C_FREQUENCY); |
dwini | 0:17670db9a782 | 24 | slave.address(SLAVE_ADDRESS); |
dwini | 0:17670db9a782 | 25 | pc.printf("Slave is working @ SLAVE_ADDRESS = 0x%x\r\n", SLAVE_ADDRESS); |
dwini | 0:17670db9a782 | 26 | |
dwini | 0:17670db9a782 | 27 | // I2C buffer |
dwini | 0:17670db9a782 | 28 | char buffer[I2C_BUFFER_SIZE]; |
dwini | 0:17670db9a782 | 29 | |
dwini | 1:a525356bd830 | 30 | // Create TRex |
dwini | 1:a525356bd830 | 31 | TRex trex; |
dwini | 1:a525356bd830 | 32 | |
dwini | 0:17670db9a782 | 33 | // Go infinite |
dwini | 0:17670db9a782 | 34 | while (1) { |
dwini | 0:17670db9a782 | 35 | int rec = slave.receive(); |
dwini | 0:17670db9a782 | 36 | switch (rec) { |
dwini | 0:17670db9a782 | 37 | case I2CSlave::ReadAddressed: |
dwini | 1:a525356bd830 | 38 | trex.getStatusDataPacket(buffer); |
dwini | 1:a525356bd830 | 39 | if (!slave.write(buffer, TRex::SIZE_TREX_DATA_PACKET)) { |
dwini | 1:a525356bd830 | 40 | pc.printf("Send status to master success\r\n"); |
dwini | 1:a525356bd830 | 41 | } else { |
dwini | 1:a525356bd830 | 42 | pc.printf("Send status to master failed\r\n"); |
dwini | 1:a525356bd830 | 43 | } |
dwini | 0:17670db9a782 | 44 | break; |
dwini | 0:17670db9a782 | 45 | |
dwini | 0:17670db9a782 | 46 | case I2CSlave::WriteAddressed: |
dwini | 0:17670db9a782 | 47 | break; |
dwini | 0:17670db9a782 | 48 | } |
dwini | 0:17670db9a782 | 49 | |
dwini | 0:17670db9a782 | 50 | // Clear buffer |
dwini | 0:17670db9a782 | 51 | for (int i = 0; i < I2C_BUFFER_SIZE; i++) { |
dwini | 0:17670db9a782 | 52 | buffer[i] = 0; |
dwini | 0:17670db9a782 | 53 | } |
dwini | 0:17670db9a782 | 54 | |
dwini | 0:17670db9a782 | 55 | // Alive LED |
dwini | 0:17670db9a782 | 56 | cAlive = (cAlive + 1) % 100000; |
dwini | 0:17670db9a782 | 57 | if (!cAlive) { |
dwini | 0:17670db9a782 | 58 | aLED = !aLED; |
dwini | 0:17670db9a782 | 59 | } |
dwini | 1:a525356bd830 | 60 | |
dwini | 1:a525356bd830 | 61 | // Battery decrease of TRex |
dwini | 1:a525356bd830 | 62 | trex.determineBatteryVoltage(); |
dwini | 0:17670db9a782 | 63 | } |
dwini | 0:17670db9a782 | 64 | } |