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

Dependents:   CAN_Simple_Publisher CAN_Pub_actuator

Committer:
RuslanUrya
Date:
Thu May 03 14:46:58 2018 +0000
Revision:
2:3eadad0761e9
Parent:
1:1ec6af6d0c6d
Child:
3:9839ae432c26
Child:
4:98c0904b5ec7
sine to servo is work, but without error processing.

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 2:3eadad0761e9 4 Servo_9g::Servo_9g (PinName Pin){
RuslanUrya 2:3eadad0761e9 5 Servo = new PwmOut(Pin);
RuslanUrya 2:3eadad0761e9 6 Servo->period_ms(20);
RuslanUrya 0:be6047ad0802 7 }
RuslanUrya 0:be6047ad0802 8
RuslanUrya 1:1ec6af6d0c6d 9 Servo_9g::~Servo_9g(){
RuslanUrya 2:3eadad0761e9 10 delete Servo;
RuslanUrya 0:be6047ad0802 11 }
RuslanUrya 1:1ec6af6d0c6d 12 //end of class Servo_9g
RuslanUrya 0:be6047ad0802 13
RuslanUrya 1:1ec6af6d0c6d 14 //class Servo_9g_Move
RuslanUrya 2:3eadad0761e9 15 Servo_9g_Move::Servo_9g_Move():Servo_9g(){}
RuslanUrya 2:3eadad0761e9 16 Servo_9g_Move::Servo_9g_Move(PinName Pin):Servo_9g(Pin){}
RuslanUrya 1:1ec6af6d0c6d 17 Servo_9g_Move::~Servo_9g_Move(){}
RuslanUrya 0:be6047ad0802 18
RuslanUrya 2:3eadad0761e9 19 void Servo_9g_Move::Move (float a){
RuslanUrya 2:3eadad0761e9 20 Servo_9g::Servo->write(a * val); // duty-cycle, perсents 0..1
RuslanUrya 0:be6047ad0802 21 }
RuslanUrya 0:be6047ad0802 22
RuslanUrya 1:1ec6af6d0c6d 23 void Servo_9g_Move::NextSin(){
RuslanUrya 0:be6047ad0802 24 i += 0.1;
RuslanUrya 0:be6047ad0802 25 if (i > 2) i = 0;
RuslanUrya 0:be6047ad0802 26 f = (sin(i * pi) + 1.0) / 2 + 1; //1..2
RuslanUrya 1:1ec6af6d0c6d 27 }
RuslanUrya 1:1ec6af6d0c6d 28
RuslanUrya 1:1ec6af6d0c6d 29 void Servo_9g_Move::CalCnMove(){
RuslanUrya 1:1ec6af6d0c6d 30 Move((float)f);
RuslanUrya 1:1ec6af6d0c6d 31 NextSin();
RuslanUrya 0:be6047ad0802 32 }
RuslanUrya 0:be6047ad0802 33
RuslanUrya 1:1ec6af6d0c6d 34 void Servo_9g_Move::StartMoveSin(){
RuslanUrya 1:1ec6af6d0c6d 35 timer.attach(this, &Servo_9g_Move::CalCnMove, val); //sine period, sec
RuslanUrya 1:1ec6af6d0c6d 36 }
RuslanUrya 1:1ec6af6d0c6d 37 //end of class Servo_9g_Move
RuslanUrya 1:1ec6af6d0c6d 38
RuslanUrya 1:1ec6af6d0c6d 39 //class Servo_9g_CAN
RuslanUrya 2:3eadad0761e9 40 Servo_9g_CAN::Servo_9g_CAN(PinName rd, PinName td) :
RuslanUrya 2:3eadad0761e9 41 Servo_9g_Move(),
RuslanUrya 2:3eadad0761e9 42 can(rd, td)
RuslanUrya 1:1ec6af6d0c6d 43 {
RuslanUrya 2:3eadad0761e9 44
RuslanUrya 1:1ec6af6d0c6d 45 }
RuslanUrya 2:3eadad0761e9 46 Servo_9g_CAN::Servo_9g_CAN(PinName rd, PinName td, int hz) :
RuslanUrya 2:3eadad0761e9 47 Servo_9g_Move(),
RuslanUrya 2:3eadad0761e9 48 can(rd, td, hz)
RuslanUrya 1:1ec6af6d0c6d 49 {
RuslanUrya 2:3eadad0761e9 50
RuslanUrya 1:1ec6af6d0c6d 51 }
RuslanUrya 1:1ec6af6d0c6d 52
RuslanUrya 2:3eadad0761e9 53 Servo_9g_CAN::Servo_9g_CAN(PinName servo_pwm, PinName rd, PinName td) :
RuslanUrya 2:3eadad0761e9 54 Servo_9g_Move(servo_pwm),
RuslanUrya 2:3eadad0761e9 55 can(rd, td)
RuslanUrya 0:be6047ad0802 56 {
RuslanUrya 2:3eadad0761e9 57 CANMessage msg;
RuslanUrya 0:be6047ad0802 58 }
RuslanUrya 0:be6047ad0802 59
RuslanUrya 2:3eadad0761e9 60 Servo_9g_CAN::Servo_9g_CAN(PinName servo_pwm, PinName rd, PinName td, int hz) :
RuslanUrya 2:3eadad0761e9 61 Servo_9g_Move(servo_pwm),
RuslanUrya 2:3eadad0761e9 62 can(rd, td, hz)
RuslanUrya 0:be6047ad0802 63 {
RuslanUrya 2:3eadad0761e9 64 CANMessage msg;
RuslanUrya 1:1ec6af6d0c6d 65 }
RuslanUrya 1:1ec6af6d0c6d 66
RuslanUrya 1:1ec6af6d0c6d 67 Servo_9g_CAN::~Servo_9g_CAN(){
RuslanUrya 0:be6047ad0802 68
RuslanUrya 1:1ec6af6d0c6d 69 }
RuslanUrya 1:1ec6af6d0c6d 70
RuslanUrya 1:1ec6af6d0c6d 71 void Servo_9g_CAN::SendNextSin(){
RuslanUrya 1:1ec6af6d0c6d 72 NextSin();
RuslanUrya 2:3eadad0761e9 73 float send = static_cast<float>(f);
RuslanUrya 2:3eadad0761e9 74 can.write(CANMessage(1, (char*)&send, sizeof(send)));
RuslanUrya 1:1ec6af6d0c6d 75 }
RuslanUrya 1:1ec6af6d0c6d 76
RuslanUrya 2:3eadad0761e9 77 bool Servo_9g_CAN::ReceiveServo(){
RuslanUrya 2:3eadad0761e9 78 if(can.read(msg)){
RuslanUrya 2:3eadad0761e9 79 float rec;
RuslanUrya 2:3eadad0761e9 80 memcpy(&rec, msg.data, sizeof(rec));
RuslanUrya 2:3eadad0761e9 81 // Move((float)*msg.data);
RuslanUrya 2:3eadad0761e9 82 Move(rec);
RuslanUrya 2:3eadad0761e9 83 return true;
RuslanUrya 1:1ec6af6d0c6d 84 }
RuslanUrya 2:3eadad0761e9 85 return false;
RuslanUrya 1:1ec6af6d0c6d 86 }
RuslanUrya 1:1ec6af6d0c6d 87 void Servo_9g_CAN::SendSin(){
RuslanUrya 1:1ec6af6d0c6d 88 timer.attach(this, &Servo_9g_CAN::SendNextSin, val);
RuslanUrya 2:3eadad0761e9 89
RuslanUrya 1:1ec6af6d0c6d 90 }
RuslanUrya 1:1ec6af6d0c6d 91 //end of class Servo_9g_CAN