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.
Dependents: CAN_Simple_Publisher CAN_Pub_actuator
MS9g_move_sin.cpp@2:3eadad0761e9, 2018-05-03 (annotated)
- 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?
| User | Revision | Line number | New 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 |