De motorcontroller van het TLS2 project.

Dependencies:   mbed PID

Committer:
RichardHoekstra
Date:
Wed Nov 16 15:30:21 2016 +0000
Revision:
1:9e6c4011eef6
Parent:
0:48c10918dabf
Child:
2:b9449fc96691
Motorcontroller I2C is ready and the switch statement is ready to work with codes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardHoekstra 0:48c10918dabf 1 #include "mbed.h"
RichardHoekstra 1:9e6c4011eef6 2 #define motor_addr 0x91
RichardHoekstra 1:9e6c4011eef6 3 //I2C settings
RichardHoekstra 1:9e6c4011eef6 4 #define SDA D14
RichardHoekstra 1:9e6c4011eef6 5 #define SCL D15
RichardHoekstra 1:9e6c4011eef6 6 #define I2C_BUFFER_SIZE 10
RichardHoekstra 1:9e6c4011eef6 7 I2CSlave slave(SDA,SCL);
RichardHoekstra 0:48c10918dabf 8
RichardHoekstra 1:9e6c4011eef6 9
RichardHoekstra 0:48c10918dabf 10
RichardHoekstra 1:9e6c4011eef6 11 int main() {
RichardHoekstra 1:9e6c4011eef6 12 slave.address(motor_addr); //Set the correct address for this module
RichardHoekstra 1:9e6c4011eef6 13 char buffer[I2C_BUFFER_SIZE] = {0}; //Create the buffer for I2C
RichardHoekstra 1:9e6c4011eef6 14 bool buffer_changed;
RichardHoekstra 1:9e6c4011eef6 15 while(1) {
RichardHoekstra 1:9e6c4011eef6 16 int i = slave.receive();
RichardHoekstra 1:9e6c4011eef6 17 switch (i) {
RichardHoekstra 1:9e6c4011eef6 18 case I2CSlave::ReadAddressed:
RichardHoekstra 1:9e6c4011eef6 19 //Received a request to be read
RichardHoekstra 1:9e6c4011eef6 20 //Irrelevant for now
RichardHoekstra 1:9e6c4011eef6 21 break;
RichardHoekstra 1:9e6c4011eef6 22 case I2CSlave::WriteGeneral:
RichardHoekstra 1:9e6c4011eef6 23 //Received a request to be written to
RichardHoekstra 1:9e6c4011eef6 24 slave.read(buffer,I2C_BUFFER_SIZE);
RichardHoekstra 1:9e6c4011eef6 25 buffer_changed = true;
RichardHoekstra 1:9e6c4011eef6 26 break;
RichardHoekstra 1:9e6c4011eef6 27 case I2CSlave::WriteAddressed:
RichardHoekstra 1:9e6c4011eef6 28 //Received a request to be written to a specific location
RichardHoekstra 1:9e6c4011eef6 29 slave.read(buffer,I2C_BUFFER_SIZE);
RichardHoekstra 1:9e6c4011eef6 30 buffer_changed = true;
RichardHoekstra 1:9e6c4011eef6 31 break;
RichardHoekstra 1:9e6c4011eef6 32 }
RichardHoekstra 1:9e6c4011eef6 33 //Do shit depending on the command it received in the first data block
RichardHoekstra 1:9e6c4011eef6 34 if(buffer_changed == true){
RichardHoekstra 1:9e6c4011eef6 35 int command = buffer[0];
RichardHoekstra 1:9e6c4011eef6 36 switch(command){
RichardHoekstra 1:9e6c4011eef6 37 case 0:
RichardHoekstra 1:9e6c4011eef6 38 break;
RichardHoekstra 1:9e6c4011eef6 39 case 1:
RichardHoekstra 1:9e6c4011eef6 40 break;
RichardHoekstra 1:9e6c4011eef6 41 case 2:
RichardHoekstra 1:9e6c4011eef6 42 break;
RichardHoekstra 1:9e6c4011eef6 43 case default:
RichardHoekstra 1:9e6c4011eef6 44 //No command was valid
RichardHoekstra 1:9e6c4011eef6 45 //Create some kind of error? Maybe, blinking led.
RichardHoekstra 1:9e6c4011eef6 46 break;
RichardHoekstra 1:9e6c4011eef6 47 }
RichardHoekstra 1:9e6c4011eef6 48
RichardHoekstra 1:9e6c4011eef6 49 }
RichardHoekstra 1:9e6c4011eef6 50 //Clear the buffer for the next iteration
RichardHoekstra 1:9e6c4011eef6 51 if(buffer_changed == true){
RichardHoekstra 1:9e6c4011eef6 52 for(int i=0;i<I2C_BUFFER_SIZE;i++){
RichardHoekstra 1:9e6c4011eef6 53 buffer[i] = 0;
RichardHoekstra 1:9e6c4011eef6 54 }
RichardHoekstra 1:9e6c4011eef6 55 buffer_changed = false;
RichardHoekstra 1:9e6c4011eef6 56 }
RichardHoekstra 0:48c10918dabf 57
RichardHoekstra 0:48c10918dabf 58 }
RichardHoekstra 0:48c10918dabf 59 }