Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mdc.cpp@8:f62e19b0c76e, 2019-04-11 (annotated)
- Committer:
- DaichiArai
- Date:
- Thu Apr 11 02:38:27 2019 +0000
- Revision:
- 8:f62e19b0c76e
- Parent:
- 7:6d3ea87a81c7
- Child:
- 9:a3a2fb1a3ba7
bag is fixed : 2019/04/11
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| DaichiArai | 3:acec9ffd0ac0 | 1 | #include "mbed.h" |
| DaichiArai | 3:acec9ffd0ac0 | 2 | #include "math.h" |
| DaichiArai | 3:acec9ffd0ac0 | 3 | #include "mdc.h" |
| DaichiArai | 3:acec9ffd0ac0 | 4 | |
| DaichiArai | 3:acec9ffd0ac0 | 5 | motor::motor(int addr) |
| DaichiArai | 3:acec9ffd0ac0 | 6 | { |
| DaichiArai | 3:acec9ffd0ac0 | 7 | address = addr; |
| DaichiArai | 3:acec9ffd0ac0 | 8 | data[0] = 0; |
| DaichiArai | 3:acec9ffd0ac0 | 9 | data[1] = 0; |
| DaichiArai | 3:acec9ffd0ac0 | 10 | data[2] = 0; |
| DaichiArai | 3:acec9ffd0ac0 | 11 | data[3] = 0; |
| DaichiArai | 7:6d3ea87a81c7 | 12 | data_reset[0] = 0xff; |
| DaichiArai | 7:6d3ea87a81c7 | 13 | data_reset[1] = 0; |
| DaichiArai | 3:acec9ffd0ac0 | 14 | val = 1; |
| DaichiArai | 3:acec9ffd0ac0 | 15 | } |
| DaichiArai | 3:acec9ffd0ac0 | 16 | |
| DaichiArai | 3:acec9ffd0ac0 | 17 | int motor::move(int spd){ |
| DaichiArai | 3:acec9ffd0ac0 | 18 | if(spd == 1000){ |
| DaichiArai | 3:acec9ffd0ac0 | 19 | md_data[0] = MOTOR_FREE; |
| DaichiArai | 3:acec9ffd0ac0 | 20 | spd = 0; |
| DaichiArai | 3:acec9ffd0ac0 | 21 | } |
| DaichiArai | 3:acec9ffd0ac0 | 22 | else if(spd < 0){ |
| DaichiArai | 3:acec9ffd0ac0 | 23 | md_data[0] = MOTOR_BACK; |
| DaichiArai | 3:acec9ffd0ac0 | 24 | spd = abs(spd); |
| DaichiArai | 3:acec9ffd0ac0 | 25 | } |
| DaichiArai | 3:acec9ffd0ac0 | 26 | else if(spd > 0){ |
| DaichiArai | 3:acec9ffd0ac0 | 27 | md_data[0] = MOTOR_FORWARD; |
| DaichiArai | 3:acec9ffd0ac0 | 28 | } |
| DaichiArai | 3:acec9ffd0ac0 | 29 | else if(spd == 0){ |
| DaichiArai | 3:acec9ffd0ac0 | 30 | md_data[0] = MOTOR_STOP; |
| DaichiArai | 3:acec9ffd0ac0 | 31 | spd = 0; |
| DaichiArai | 3:acec9ffd0ac0 | 32 | } |
| DaichiArai | 3:acec9ffd0ac0 | 33 | |
| DaichiArai | 3:acec9ffd0ac0 | 34 | md_data[1] = spd; |
| DaichiArai | 3:acec9ffd0ac0 | 35 | |
| DaichiArai | 3:acec9ffd0ac0 | 36 | int val = i2c.write(address,md_data,2,false); |
| DaichiArai | 3:acec9ffd0ac0 | 37 | return (val); |
| DaichiArai | 3:acec9ffd0ac0 | 38 | } |
| DaichiArai | 7:6d3ea87a81c7 | 39 | |
| DaichiArai | 7:6d3ea87a81c7 | 40 | void motor::reset_enc(){ |
| DaichiArai | 7:6d3ea87a81c7 | 41 | i2c.write(address,data_reset,2); |
| DaichiArai | 7:6d3ea87a81c7 | 42 | } |
| DaichiArai | 8:f62e19b0c76e | 43 | //回転回数を数える |
| DaichiArai | 8:f62e19b0c76e | 44 | //スピードを算出して、スピードの値を返却 |
| DaichiArai | 3:acec9ffd0ac0 | 45 | float motor::spd_e(){ |
| DaichiArai | 3:acec9ffd0ac0 | 46 | val = i2c.read(address,data,10,false); |
| DaichiArai | 8:f62e19b0c76e | 47 | spd = (double)data[SPD_H] + (double)data[SPD_M]/100 + (double)data[SPD_L]/10000; |
| DaichiArai | 8:f62e19b0c76e | 48 | if(data[SPD_MINUS] == 1){ |
| DaichiArai | 8:f62e19b0c76e | 49 | spd *= -1; |
| DaichiArai | 8:f62e19b0c76e | 50 | } |
| DaichiArai | 3:acec9ffd0ac0 | 51 | return spd; |
| DaichiArai | 3:acec9ffd0ac0 | 52 | } |
| DaichiArai | 8:f62e19b0c76e | 53 | //角度を算出して角度を返す(回転数も考慮 |
| DaichiArai | 3:acec9ffd0ac0 | 54 | float motor::angle_e(){ |
| DaichiArai | 3:acec9ffd0ac0 | 55 | val = i2c.read(address,data,10,false); |
| DaichiArai | 3:acec9ffd0ac0 | 56 | count = ((data[COUNT_MINUS])?(-1):(1))*data[COUNT_SPIN]; |
| DaichiArai | 8:f62e19b0c76e | 57 | |
| DaichiArai | 8:f62e19b0c76e | 58 | float angle_conv = ((double)data[ANGLE_H])+((double)data[ANGLE_M]/100)+((double)data[ANGLE_L]/10000); |
| DaichiArai | 8:f62e19b0c76e | 59 | if(data[ANGLE_MINUS] == 1){ |
| DaichiArai | 8:f62e19b0c76e | 60 | angle_conv *= -1; |
| DaichiArai | 8:f62e19b0c76e | 61 | } |
| DaichiArai | 8:f62e19b0c76e | 62 | |
| DaichiArai | 8:f62e19b0c76e | 63 | return(angle_conv+count*6.28); |
| DaichiArai | 3:acec9ffd0ac0 | 64 | } |
| DaichiArai | 3:acec9ffd0ac0 | 65 | |
| DaichiArai | 3:acec9ffd0ac0 | 66 | void motor::read(){ |
| DaichiArai | 3:acec9ffd0ac0 | 67 | val = i2c.read(address,data,10,false); |
| DaichiArai | 8:f62e19b0c76e | 68 | //spd = ((data[SPD_MINUS])?(-1):(1))*((double)(data[SPD_H])+((double)data[SPD_M]/100)+((double)data[SPD_L]/10000)); |
| DaichiArai | 8:f62e19b0c76e | 69 | //count = ((data[COUNT_MINUS])?(-1):(1))*data[COUNT_SPIN]; |
| DaichiArai | 8:f62e19b0c76e | 70 | //angle = ((data[ANGLE_MINUS])?(-1):(1))*((double)(data[ANGLE_H])+((double)data[ANGLE_M]/100)+((double)data[ANGLE_L]/10000)); |
| DaichiArai | 3:acec9ffd0ac0 | 71 | } |