Camilo Ramirez
/
ENTREGA1
AVANCE PICCOLO CORTE 1
servo.h@0:2032b926fd86, 2018-03-13 (annotated)
- Committer:
- Camilokingxd
- Date:
- Tue Mar 13 04:30:04 2018 +0000
- Revision:
- 0:2032b926fd86
- Child:
- 1:8574f732dba3
ENTREGA AVANZE PICCOLO CORTE 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Camilokingxd | 0:2032b926fd86 | 1 | #include "mbed.h" |
Camilokingxd | 0:2032b926fd86 | 2 | #include "Serial.h" //serial |
Camilokingxd | 0:2032b926fd86 | 3 | #ifndef SERVO_H |
Camilokingxd | 0:2032b926fd86 | 4 | #define SERVO_H |
Camilokingxd | 0:2032b926fd86 | 5 | #define MINPULSE 560 |
Camilokingxd | 0:2032b926fd86 | 6 | #define MAXPULSE 2400 |
Camilokingxd | 0:2032b926fd86 | 7 | #define MAXPOS 50// poscisión max de la coordenasda en mm |
Camilokingxd | 0:2032b926fd86 | 8 | #define DRAW 50 |
Camilokingxd | 0:2032b926fd86 | 9 | #define NODRAW 0 |
Camilokingxd | 0:2032b926fd86 | 10 | #define CM_EJECUTAR 0Xff |
Camilokingxd | 0:2032b926fd86 | 11 | #define CM_GUARDAR 0Xfe |
Camilokingxd | 0:2032b926fd86 | 12 | #define CM_SERVO 0Xfd |
Camilokingxd | 0:2032b926fd86 | 13 | #define CM_SDRAW 0xfc |
Camilokingxd | 0:2032b926fd86 | 14 | #define CM_SN0DRAW 0xfb |
Camilokingxd | 0:2032b926fd86 | 15 | #define CM_STOP 0xfa |
Camilokingxd | 0:2032b926fd86 | 16 | #define CM_END 0xf0 |
Camilokingxd | 0:2032b926fd86 | 17 | |
Camilokingxd | 0:2032b926fd86 | 18 | class Servo |
Camilokingxd | 0:2032b926fd86 | 19 | { |
Camilokingxd | 0:2032b926fd86 | 20 | private: |
Camilokingxd | 0:2032b926fd86 | 21 | uint8_t x,y,z; |
Camilokingxd | 0:2032b926fd86 | 22 | int mm2pulse(float vmm); |
Camilokingxd | 0:2032b926fd86 | 23 | public: |
Camilokingxd | 0:2032b926fd86 | 24 | Servo(); |
Camilokingxd | 0:2032b926fd86 | 25 | ~Servo(); |
Camilokingxd | 0:2032b926fd86 | 26 | void SetServo(uint8_t,uint8_t); |
Camilokingxd | 0:2032b926fd86 | 27 | void SetZ(uint8_t); |
Camilokingxd | 0:2032b926fd86 | 28 | uint8_t GetServoX(); |
Camilokingxd | 0:2032b926fd86 | 29 | uint8_t GetServoY(); |
Camilokingxd | 0:2032b926fd86 | 30 | uint8_t GetServoZ(); |
Camilokingxd | 0:2032b926fd86 | 31 | int CONVERTIDOR(int); |
Camilokingxd | 0:2032b926fd86 | 32 | }; |
Camilokingxd | 0:2032b926fd86 | 33 | |
Camilokingxd | 0:2032b926fd86 | 34 | #endif |
Camilokingxd | 0:2032b926fd86 | 35 | |
Camilokingxd | 0:2032b926fd86 | 36 | PwmOut mypwmX(PA_8); |
Camilokingxd | 0:2032b926fd86 | 37 | PwmOut mypwmY(PB_10); |
Camilokingxd | 0:2032b926fd86 | 38 | PwmOut mypwmZ(PB_4); |
Camilokingxd | 0:2032b926fd86 | 39 | |
Camilokingxd | 0:2032b926fd86 | 40 | Servo::Servo() |
Camilokingxd | 0:2032b926fd86 | 41 | { |
Camilokingxd | 0:2032b926fd86 | 42 | mypwmX.period_ms(20); |
Camilokingxd | 0:2032b926fd86 | 43 | mypwmY.period_ms(20); |
Camilokingxd | 0:2032b926fd86 | 44 | mypwmZ.period_ms(20); |
Camilokingxd | 0:2032b926fd86 | 45 | mypwmX.pulsewidth_us(MAXPULSE); |
Camilokingxd | 0:2032b926fd86 | 46 | mypwmY.pulsewidth_us(MAXPULSE); |
Camilokingxd | 0:2032b926fd86 | 47 | mypwmZ.pulsewidth_us(NODRAW); |
Camilokingxd | 0:2032b926fd86 | 48 | |
Camilokingxd | 0:2032b926fd86 | 49 | } |
Camilokingxd | 0:2032b926fd86 | 50 | |
Camilokingxd | 0:2032b926fd86 | 51 | Servo::~Servo() |
Camilokingxd | 0:2032b926fd86 | 52 | { |
Camilokingxd | 0:2032b926fd86 | 53 | } |
Camilokingxd | 0:2032b926fd86 | 54 | int Servo::mm2pulse(float vmm) |
Camilokingxd | 0:2032b926fd86 | 55 | { |
Camilokingxd | 0:2032b926fd86 | 56 | if (vmm < MAXPOS) |
Camilokingxd | 0:2032b926fd86 | 57 | return int (vmm*(MAXPULSE-MINPULSE)/(MAXPOS)) +MINPULSE; |
Camilokingxd | 0:2032b926fd86 | 58 | return MAXPULSE; |
Camilokingxd | 0:2032b926fd86 | 59 | } |
Camilokingxd | 0:2032b926fd86 | 60 | void Servo::SetZ(uint8_t _z) |
Camilokingxd | 0:2032b926fd86 | 61 | { |
Camilokingxd | 0:2032b926fd86 | 62 | z=_z; |
Camilokingxd | 0:2032b926fd86 | 63 | int PULSEZ=mm2pulse(CONVERTIDOR(z)); |
Camilokingxd | 0:2032b926fd86 | 64 | mypwmZ.pulsewidth_us(PULSEZ); |
Camilokingxd | 0:2032b926fd86 | 65 | } |
Camilokingxd | 0:2032b926fd86 | 66 | void Servo::SetServo(uint8_t _x,uint8_t _y) |
Camilokingxd | 0:2032b926fd86 | 67 | { |
Camilokingxd | 0:2032b926fd86 | 68 | x=_x; |
Camilokingxd | 0:2032b926fd86 | 69 | y=_y; |
Camilokingxd | 0:2032b926fd86 | 70 | int PULSEX=mm2pulse(CONVERTIDOR(x)); |
Camilokingxd | 0:2032b926fd86 | 71 | int PULSEY=mm2pulse(CONVERTIDOR(y)); |
Camilokingxd | 0:2032b926fd86 | 72 | mypwmX.pulsewidth_us(PULSEX); |
Camilokingxd | 0:2032b926fd86 | 73 | mypwmY.pulsewidth_us(PULSEY); |
Camilokingxd | 0:2032b926fd86 | 74 | } |
Camilokingxd | 0:2032b926fd86 | 75 | uint8_t Servo::GetServoX() |
Camilokingxd | 0:2032b926fd86 | 76 | { |
Camilokingxd | 0:2032b926fd86 | 77 | return x; |
Camilokingxd | 0:2032b926fd86 | 78 | } |
Camilokingxd | 0:2032b926fd86 | 79 | uint8_t Servo::GetServoY() |
Camilokingxd | 0:2032b926fd86 | 80 | { |
Camilokingxd | 0:2032b926fd86 | 81 | return y; |
Camilokingxd | 0:2032b926fd86 | 82 | } |
Camilokingxd | 0:2032b926fd86 | 83 | uint8_t Servo::GetServoZ() |
Camilokingxd | 0:2032b926fd86 | 84 | { |
Camilokingxd | 0:2032b926fd86 | 85 | return z; |
Camilokingxd | 0:2032b926fd86 | 86 | } |
Camilokingxd | 0:2032b926fd86 | 87 | int Servo::CONVERTIDOR(int c) |
Camilokingxd | 0:2032b926fd86 | 88 | { |
Camilokingxd | 0:2032b926fd86 | 89 | int u=0; |
Camilokingxd | 0:2032b926fd86 | 90 | u=c/16; |
Camilokingxd | 0:2032b926fd86 | 91 | return c-6*u; |
Camilokingxd | 0:2032b926fd86 | 92 | } |