Daichi Arai / mdc_simple

Dependents:  

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?

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