TRex motor controller emulator for Vives students

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }