Руслан Урядинский / MS9g_move_sin

Dependents:   CAN_Simple_Publisher CAN_Pub_actuator

Committer:
RuslanUrya
Date:
Wed May 02 12:19:26 2018 +0000
Revision:
1:1ec6af6d0c6d
Parent:
0:be6047ad0802
Child:
2:3eadad0761e9
errors in CAN-class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RuslanUrya 0:be6047ad0802 1 #include "MS9g_move_sin.h"
RuslanUrya 1:1ec6af6d0c6d 2 //class Servo_9g
RuslanUrya 1:1ec6af6d0c6d 3 Servo_9g::Servo_9g(){}
RuslanUrya 0:be6047ad0802 4
RuslanUrya 0:be6047ad0802 5 Servo_9g::Servo_9g (PinName Pin):
RuslanUrya 0:be6047ad0802 6 Servo(Pin)
RuslanUrya 0:be6047ad0802 7 {
RuslanUrya 0:be6047ad0802 8 Servo.period_ms(20);
RuslanUrya 0:be6047ad0802 9 }
RuslanUrya 0:be6047ad0802 10
RuslanUrya 1:1ec6af6d0c6d 11 Servo_9g::~Servo_9g(){
RuslanUrya 0:be6047ad0802 12
RuslanUrya 0:be6047ad0802 13 }
RuslanUrya 1:1ec6af6d0c6d 14 //end of class Servo_9g
RuslanUrya 0:be6047ad0802 15
RuslanUrya 1:1ec6af6d0c6d 16 //class Servo_9g_Move
RuslanUrya 1:1ec6af6d0c6d 17 //Servo_9g_Move::Servo_9g_Move():Servo_9g(){}
RuslanUrya 1:1ec6af6d0c6d 18 //Servo_9g_Move::Servo_9g_Move(PinName Pin):Servo_9g(Pin){}
RuslanUrya 1:1ec6af6d0c6d 19 Servo_9g_Move::~Servo_9g_Move(){}
RuslanUrya 0:be6047ad0802 20
RuslanUrya 1:1ec6af6d0c6d 21 void Servo_9g_Move::Move (float f){
RuslanUrya 1:1ec6af6d0c6d 22 Servo = f * val; // duty-cycle, perсents 0..1
RuslanUrya 0:be6047ad0802 23 }
RuslanUrya 0:be6047ad0802 24
RuslanUrya 1:1ec6af6d0c6d 25 void Servo_9g_Move::NextSin(){
RuslanUrya 0:be6047ad0802 26 i += 0.1;
RuslanUrya 0:be6047ad0802 27 if (i > 2) i = 0;
RuslanUrya 0:be6047ad0802 28 f = (sin(i * pi) + 1.0) / 2 + 1; //1..2
RuslanUrya 1:1ec6af6d0c6d 29 }
RuslanUrya 1:1ec6af6d0c6d 30
RuslanUrya 1:1ec6af6d0c6d 31 void Servo_9g_Move::CalCnMove(){
RuslanUrya 1:1ec6af6d0c6d 32 Move((float)f);
RuslanUrya 1:1ec6af6d0c6d 33 NextSin();
RuslanUrya 0:be6047ad0802 34 }
RuslanUrya 0:be6047ad0802 35
RuslanUrya 1:1ec6af6d0c6d 36 void Servo_9g_Move::StartMoveSin(){
RuslanUrya 1:1ec6af6d0c6d 37 timer.attach(this, &Servo_9g_Move::CalCnMove, val); //sine period, sec
RuslanUrya 1:1ec6af6d0c6d 38 }
RuslanUrya 1:1ec6af6d0c6d 39 //end of class Servo_9g_Move
RuslanUrya 1:1ec6af6d0c6d 40
RuslanUrya 1:1ec6af6d0c6d 41 //class Servo_9g_CAN
RuslanUrya 1:1ec6af6d0c6d 42 Servo_9g_CAN::Servo_9g_CAN(PinName rd, PinName td):Servo_9g_Move():
RuslanUrya 1:1ec6af6d0c6d 43 can(rd, td)
RuslanUrya 1:1ec6af6d0c6d 44 {
RuslanUrya 1:1ec6af6d0c6d 45 func.id = 1;
RuslanUrya 1:1ec6af6d0c6d 46 func.len = 4;
RuslanUrya 1:1ec6af6d0c6d 47 }
RuslanUrya 1:1ec6af6d0c6d 48 Servo_9g_CAN::Servo_9g_CAN(PinName rd, PinName td, int hz):Servo_9g_Move():
RuslanUrya 1:1ec6af6d0c6d 49 can(rd, td, hz)
RuslanUrya 1:1ec6af6d0c6d 50 {
RuslanUrya 1:1ec6af6d0c6d 51 func.id = 1;
RuslanUrya 1:1ec6af6d0c6d 52 func.len = 4;
RuslanUrya 1:1ec6af6d0c6d 53 }
RuslanUrya 1:1ec6af6d0c6d 54
RuslanUrya 0:be6047ad0802 55 Servo_9g_CAN::Servo_9g_CAN(PinName servo_pwm, PinName rd, PinName td):Servo_9g_Move(servo_pwm):
RuslanUrya 0:be6047ad0802 56 can(rd, td)
RuslanUrya 0:be6047ad0802 57 {
RuslanUrya 1:1ec6af6d0c6d 58 func.id = 1;
RuslanUrya 1:1ec6af6d0c6d 59 func.len = 4;
RuslanUrya 0:be6047ad0802 60 }
RuslanUrya 0:be6047ad0802 61
RuslanUrya 0:be6047ad0802 62 Servo_9g_CAN::Servo_9g_CAN(PinName servo_pwm, PinName rd, PinName td, int hz):Servo_9g_Move(servo_pwm):
RuslanUrya 0:be6047ad0802 63 can(rd, td, hz)
RuslanUrya 0:be6047ad0802 64 {
RuslanUrya 1:1ec6af6d0c6d 65 func.id = 1;
RuslanUrya 1:1ec6af6d0c6d 66 func.len = 4;
RuslanUrya 1:1ec6af6d0c6d 67 }
RuslanUrya 1:1ec6af6d0c6d 68
RuslanUrya 1:1ec6af6d0c6d 69 Servo_9g_CAN::~Servo_9g_CAN(){
RuslanUrya 0:be6047ad0802 70
RuslanUrya 1:1ec6af6d0c6d 71 }
RuslanUrya 1:1ec6af6d0c6d 72
RuslanUrya 1:1ec6af6d0c6d 73 void Servo_9g_CAN::SendNextSin(){
RuslanUrya 1:1ec6af6d0c6d 74 NextSin();
RuslanUrya 1:1ec6af6d0c6d 75 func.data = &f; //возможно func.data = &(const char)f; или func.data = (const char*)&f;
RuslanUrya 1:1ec6af6d0c6d 76 can.write(func);
RuslanUrya 1:1ec6af6d0c6d 77 }
RuslanUrya 1:1ec6af6d0c6d 78
RuslanUrya 1:1ec6af6d0c6d 79 void Servo_9g_CAN::ReceiveServo(){
RuslanUrya 1:1ec6af6d0c6d 80 if(can.read(func)){
RuslanUrya 1:1ec6af6d0c6d 81 Move((float)func.data); //по идее функ- массив, значит имя-указатель
RuslanUrya 1:1ec6af6d0c6d 82 }
RuslanUrya 1:1ec6af6d0c6d 83 }
RuslanUrya 1:1ec6af6d0c6d 84
RuslanUrya 1:1ec6af6d0c6d 85 void Servo_9g_CAN::SendSin(){
RuslanUrya 1:1ec6af6d0c6d 86 timer.attach(this, &Servo_9g_CAN::SendNextSin, val);
RuslanUrya 1:1ec6af6d0c6d 87 }
RuslanUrya 1:1ec6af6d0c6d 88 //end of class Servo_9g_CAN