![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
this receive i2cmaster 's data(reg, int) it move Stepping Motor. for WRS2019
main.cpp@0:831a6764c8cf, 2019-12-17 (annotated)
- Committer:
- sgrsn
- Date:
- Tue Dec 17 07:16:39 2019 +0000
- Revision:
- 0:831a6764c8cf
First Commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sgrsn | 0:831a6764c8cf | 1 | #include "mbed.h" |
sgrsn | 0:831a6764c8cf | 2 | #include "i2cslave.h" |
sgrsn | 0:831a6764c8cf | 3 | #include "define.h" |
sgrsn | 0:831a6764c8cf | 4 | |
sgrsn | 0:831a6764c8cf | 5 | |
sgrsn | 0:831a6764c8cf | 6 | // define IIC_ADDR 1:0xB0, 2:0xC0, 3:0xD0 or 4:0xD0 |
sgrsn | 0:831a6764c8cf | 7 | // define I_AM but it not used. |
sgrsn | 0:831a6764c8cf | 8 | #define IIC_ADDR 0xB0 |
sgrsn | 0:831a6764c8cf | 9 | #define I_AM RightForward |
sgrsn | 0:831a6764c8cf | 10 | |
sgrsn | 0:831a6764c8cf | 11 | int32_t Register[0x20] = {}; |
sgrsn | 0:831a6764c8cf | 12 | i2cslave i2c(dp5, dp27, Register); |
sgrsn | 0:831a6764c8cf | 13 | |
sgrsn | 0:831a6764c8cf | 14 | int main() |
sgrsn | 0:831a6764c8cf | 15 | { |
sgrsn | 0:831a6764c8cf | 16 | Register[WHO_AM_I] = I_AM; |
sgrsn | 0:831a6764c8cf | 17 | Register[MY_IIC_ADDR] = IIC_ADDR; |
sgrsn | 0:831a6764c8cf | 18 | |
sgrsn | 0:831a6764c8cf | 19 | Register[MOTOR_DIR] = COAST; |
sgrsn | 0:831a6764c8cf | 20 | |
sgrsn | 0:831a6764c8cf | 21 | PwmOut PWM_PIN(dp24); |
sgrsn | 0:831a6764c8cf | 22 | DigitalOut PWM_ENABLE(dp14); |
sgrsn | 0:831a6764c8cf | 23 | DigitalOut DIR_PIN(dp18); |
sgrsn | 0:831a6764c8cf | 24 | DigitalOut CON_PIN(dp17); |
sgrsn | 0:831a6764c8cf | 25 | |
sgrsn | 0:831a6764c8cf | 26 | DIR_PIN = 0; |
sgrsn | 0:831a6764c8cf | 27 | CON_PIN = 0; |
sgrsn | 0:831a6764c8cf | 28 | |
sgrsn | 0:831a6764c8cf | 29 | i2c.address(IIC_ADDR); |
sgrsn | 0:831a6764c8cf | 30 | |
sgrsn | 0:831a6764c8cf | 31 | float f = 1000; |
sgrsn | 0:831a6764c8cf | 32 | float T = 0.05; |
sgrsn | 0:831a6764c8cf | 33 | float T_last = T; |
sgrsn | 0:831a6764c8cf | 34 | PWM_PIN = 0; |
sgrsn | 0:831a6764c8cf | 35 | int dir = COAST; |
sgrsn | 0:831a6764c8cf | 36 | int last_dir = 0; |
sgrsn | 0:831a6764c8cf | 37 | |
sgrsn | 0:831a6764c8cf | 38 | while(1) |
sgrsn | 0:831a6764c8cf | 39 | { |
sgrsn | 0:831a6764c8cf | 40 | T_last = T; |
sgrsn | 0:831a6764c8cf | 41 | f = float(Register[PWM_FREQUENCY]); |
sgrsn | 0:831a6764c8cf | 42 | if(f > 0 && f <= 1000000) T = 1.0 / f; |
sgrsn | 0:831a6764c8cf | 43 | if(T_last != T) PWM_PIN.period(T); |
sgrsn | 0:831a6764c8cf | 44 | |
sgrsn | 0:831a6764c8cf | 45 | last_dir = dir; |
sgrsn | 0:831a6764c8cf | 46 | dir = Register[MOTOR_DIR]; |
sgrsn | 0:831a6764c8cf | 47 | |
sgrsn | 0:831a6764c8cf | 48 | if(dir != last_dir) |
sgrsn | 0:831a6764c8cf | 49 | { |
sgrsn | 0:831a6764c8cf | 50 | switch(dir) |
sgrsn | 0:831a6764c8cf | 51 | { |
sgrsn | 0:831a6764c8cf | 52 | case COAST: |
sgrsn | 0:831a6764c8cf | 53 | PWM_ENABLE = 0; |
sgrsn | 0:831a6764c8cf | 54 | CON_PIN = 0; |
sgrsn | 0:831a6764c8cf | 55 | break; |
sgrsn | 0:831a6764c8cf | 56 | case BRAKE: |
sgrsn | 0:831a6764c8cf | 57 | CON_PIN = 1; |
sgrsn | 0:831a6764c8cf | 58 | PWM_ENABLE = 1; |
sgrsn | 0:831a6764c8cf | 59 | PWM_PIN = 0; |
sgrsn | 0:831a6764c8cf | 60 | break; |
sgrsn | 0:831a6764c8cf | 61 | case CW: |
sgrsn | 0:831a6764c8cf | 62 | CON_PIN = 1; |
sgrsn | 0:831a6764c8cf | 63 | DIR_PIN = 0; |
sgrsn | 0:831a6764c8cf | 64 | PWM_ENABLE = 1; |
sgrsn | 0:831a6764c8cf | 65 | PWM_PIN = 0.5; |
sgrsn | 0:831a6764c8cf | 66 | break; |
sgrsn | 0:831a6764c8cf | 67 | case CCW: |
sgrsn | 0:831a6764c8cf | 68 | CON_PIN = 1; |
sgrsn | 0:831a6764c8cf | 69 | DIR_PIN = 1; |
sgrsn | 0:831a6764c8cf | 70 | PWM_ENABLE = 1; |
sgrsn | 0:831a6764c8cf | 71 | PWM_PIN = 0.5; |
sgrsn | 0:831a6764c8cf | 72 | break; |
sgrsn | 0:831a6764c8cf | 73 | } |
sgrsn | 0:831a6764c8cf | 74 | } |
sgrsn | 0:831a6764c8cf | 75 | } |
sgrsn | 0:831a6764c8cf | 76 | } |