this receive i2cmaster 's data(reg, int) it move Stepping Motor. for WRS2019

Dependencies:   mbed i2cslave

Committer:
sgrsn
Date:
Tue Dec 17 07:16:39 2019 +0000
Revision:
0:831a6764c8cf
First Commit

Who changed what in which revision?

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