Richard Hoekstra
/
TLS2-Motorcontroller_v2
De motorcontroller van het TLS2 project.
main.cpp@2:b9449fc96691, 2016-11-16 (annotated)
- Committer:
- RichardHoekstra
- Date:
- Wed Nov 16 15:49:30 2016 +0000
- Revision:
- 2:b9449fc96691
- Parent:
- 1:9e6c4011eef6
- Child:
- 3:10c6e7aaf375
Added back in the sinus curve creation.
Who changed what in which revision?
User | Revision | Line number | New 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 | 2:b9449fc96691 | 9 | #define CURVE_BUFFER_SIZE 100 |
RichardHoekstra | 2:b9449fc96691 | 10 | |
RichardHoekstra | 2:b9449fc96691 | 11 | //Curve settings |
RichardHoekstra | 2:b9449fc96691 | 12 | float curve_buffer[CURVE_BUFFER_SIZE]; |
RichardHoekstra | 2:b9449fc96691 | 13 | float curve_min=80; //[mmHg] |
RichardHoekstra | 2:b9449fc96691 | 14 | float curve_max=120; //[mmHg] |
RichardHoekstra | 2:b9449fc96691 | 15 | float curve_period=10; //[ms] |
RichardHoekstra | 2:b9449fc96691 | 16 | |
RichardHoekstra | 2:b9449fc96691 | 17 | //Note: om de frequentie aan te passen speel je de buffer sneller af. Hierbij neemt nauwkeurigheid wel af. Om dit te verminderen |
RichardHoekstra | 2:b9449fc96691 | 18 | //heb je meer punten in de buffer nodig. |
RichardHoekstra | 2:b9449fc96691 | 19 | float curve_sinus(){ |
RichardHoekstra | 2:b9449fc96691 | 20 | float amplitude = (curve_max - curve_min)/2; //amplitude*sin(t) //van -amplitude naar +amplitude |
RichardHoekstra | 2:b9449fc96691 | 21 | //Als sin(x) = 0, moet de curve exact in het midden van max en min zitten |
RichardHoekstra | 2:b9449fc96691 | 22 | float offset = (curve_max+curve_min)/2; |
RichardHoekstra | 2:b9449fc96691 | 23 | //Genereer een volle periode en zet het in de buffer |
RichardHoekstra | 2:b9449fc96691 | 24 | float step = 2*3.1415926/CURVE_BUFFER_SIZE; |
RichardHoekstra | 2:b9449fc96691 | 25 | for(int i=0;i<CURVE_BUFFER_SIZE;i++){ |
RichardHoekstra | 2:b9449fc96691 | 26 | curve_buffer[i] = offset+amplitude*sin(step*x); |
RichardHoekstra | 2:b9449fc96691 | 27 | } |
RichardHoekstra | 2:b9449fc96691 | 28 | } |
RichardHoekstra | 2:b9449fc96691 | 29 | |
RichardHoekstra | 2:b9449fc96691 | 30 | float curve_arterial(){ |
RichardHoekstra | 2:b9449fc96691 | 31 | //Help. |
RichardHoekstra | 2:b9449fc96691 | 32 | } |
RichardHoekstra | 1:9e6c4011eef6 | 33 | |
RichardHoekstra | 0:48c10918dabf | 34 | |
RichardHoekstra | 1:9e6c4011eef6 | 35 | int main() { |
RichardHoekstra | 1:9e6c4011eef6 | 36 | slave.address(motor_addr); //Set the correct address for this module |
RichardHoekstra | 1:9e6c4011eef6 | 37 | char buffer[I2C_BUFFER_SIZE] = {0}; //Create the buffer for I2C |
RichardHoekstra | 1:9e6c4011eef6 | 38 | bool buffer_changed; |
RichardHoekstra | 1:9e6c4011eef6 | 39 | while(1) { |
RichardHoekstra | 1:9e6c4011eef6 | 40 | int i = slave.receive(); |
RichardHoekstra | 1:9e6c4011eef6 | 41 | switch (i) { |
RichardHoekstra | 1:9e6c4011eef6 | 42 | case I2CSlave::ReadAddressed: |
RichardHoekstra | 1:9e6c4011eef6 | 43 | //Received a request to be read |
RichardHoekstra | 1:9e6c4011eef6 | 44 | //Irrelevant for now |
RichardHoekstra | 1:9e6c4011eef6 | 45 | break; |
RichardHoekstra | 1:9e6c4011eef6 | 46 | case I2CSlave::WriteGeneral: |
RichardHoekstra | 1:9e6c4011eef6 | 47 | //Received a request to be written to |
RichardHoekstra | 1:9e6c4011eef6 | 48 | slave.read(buffer,I2C_BUFFER_SIZE); |
RichardHoekstra | 1:9e6c4011eef6 | 49 | buffer_changed = true; |
RichardHoekstra | 1:9e6c4011eef6 | 50 | break; |
RichardHoekstra | 1:9e6c4011eef6 | 51 | case I2CSlave::WriteAddressed: |
RichardHoekstra | 1:9e6c4011eef6 | 52 | //Received a request to be written to a specific location |
RichardHoekstra | 1:9e6c4011eef6 | 53 | slave.read(buffer,I2C_BUFFER_SIZE); |
RichardHoekstra | 1:9e6c4011eef6 | 54 | buffer_changed = true; |
RichardHoekstra | 1:9e6c4011eef6 | 55 | break; |
RichardHoekstra | 1:9e6c4011eef6 | 56 | } |
RichardHoekstra | 1:9e6c4011eef6 | 57 | //Do shit depending on the command it received in the first data block |
RichardHoekstra | 1:9e6c4011eef6 | 58 | if(buffer_changed == true){ |
RichardHoekstra | 1:9e6c4011eef6 | 59 | int command = buffer[0]; |
RichardHoekstra | 1:9e6c4011eef6 | 60 | switch(command){ |
RichardHoekstra | 1:9e6c4011eef6 | 61 | case 0: |
RichardHoekstra | 1:9e6c4011eef6 | 62 | break; |
RichardHoekstra | 1:9e6c4011eef6 | 63 | case 1: |
RichardHoekstra | 1:9e6c4011eef6 | 64 | break; |
RichardHoekstra | 1:9e6c4011eef6 | 65 | case 2: |
RichardHoekstra | 1:9e6c4011eef6 | 66 | break; |
RichardHoekstra | 1:9e6c4011eef6 | 67 | case default: |
RichardHoekstra | 1:9e6c4011eef6 | 68 | //No command was valid |
RichardHoekstra | 1:9e6c4011eef6 | 69 | //Create some kind of error? Maybe, blinking led. |
RichardHoekstra | 1:9e6c4011eef6 | 70 | break; |
RichardHoekstra | 1:9e6c4011eef6 | 71 | } |
RichardHoekstra | 1:9e6c4011eef6 | 72 | |
RichardHoekstra | 1:9e6c4011eef6 | 73 | } |
RichardHoekstra | 1:9e6c4011eef6 | 74 | //Clear the buffer for the next iteration |
RichardHoekstra | 1:9e6c4011eef6 | 75 | if(buffer_changed == true){ |
RichardHoekstra | 1:9e6c4011eef6 | 76 | for(int i=0;i<I2C_BUFFER_SIZE;i++){ |
RichardHoekstra | 1:9e6c4011eef6 | 77 | buffer[i] = 0; |
RichardHoekstra | 1:9e6c4011eef6 | 78 | } |
RichardHoekstra | 1:9e6c4011eef6 | 79 | buffer_changed = false; |
RichardHoekstra | 1:9e6c4011eef6 | 80 | } |
RichardHoekstra | 0:48c10918dabf | 81 | |
RichardHoekstra | 0:48c10918dabf | 82 | } |
RichardHoekstra | 0:48c10918dabf | 83 | } |