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.
Actionneurs/Moteur.cpp@0:1cfd66c3a181, 2019-05-22 (annotated)
- Committer:
- xav_jann1
- Date:
- Wed May 22 16:54:27 2019 +0000
- Revision:
- 0:1cfd66c3a181
Premiere version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xav_jann1 | 0:1cfd66c3a181 | 1 | #include "Moteur.h" |
xav_jann1 | 0:1cfd66c3a181 | 2 | |
xav_jann1 | 0:1cfd66c3a181 | 3 | Moteur::Moteur(PinName pin_en, PinName pin_in1, PinName pin_in2): |
xav_jann1 | 0:1cfd66c3a181 | 4 | m_pwm(pin_en), m_in1(pin_in1, 0), m_in2(pin_in2, 0) { |
xav_jann1 | 0:1cfd66c3a181 | 5 | |
xav_jann1 | 0:1cfd66c3a181 | 6 | m_pwm.period_us(100.0f); // Frequency = 10 kHz |
xav_jann1 | 0:1cfd66c3a181 | 7 | |
xav_jann1 | 0:1cfd66c3a181 | 8 | // PWM maximale qui peut être envoyée avec la commande turn(): |
xav_jann1 | 0:1cfd66c3a181 | 9 | m_pwm_max = 0.5; |
xav_jann1 | 0:1cfd66c3a181 | 10 | |
xav_jann1 | 0:1cfd66c3a181 | 11 | m_offset = 0.0f; |
xav_jann1 | 0:1cfd66c3a181 | 12 | } |
xav_jann1 | 0:1cfd66c3a181 | 13 | |
xav_jann1 | 0:1cfd66c3a181 | 14 | // Setter: |
xav_jann1 | 0:1cfd66c3a181 | 15 | void Moteur::setPWM(float pwm) { m_pwm = pwm + m_offset; } |
xav_jann1 | 0:1cfd66c3a181 | 16 | void Moteur::setPWM_max(float pwm) { m_pwm_max = pwm + m_offset; } |
xav_jann1 | 0:1cfd66c3a181 | 17 | void Moteur::setOffset(float offset) { m_offset = offset; } |
xav_jann1 | 0:1cfd66c3a181 | 18 | |
xav_jann1 | 0:1cfd66c3a181 | 19 | /*** Déplacement ***/ |
xav_jann1 | 0:1cfd66c3a181 | 20 | |
xav_jann1 | 0:1cfd66c3a181 | 21 | // Avant: |
xav_jann1 | 0:1cfd66c3a181 | 22 | void Moteur::forward() { |
xav_jann1 | 0:1cfd66c3a181 | 23 | m_in1 = 1; |
xav_jann1 | 0:1cfd66c3a181 | 24 | m_in2 = 0; |
xav_jann1 | 0:1cfd66c3a181 | 25 | } |
xav_jann1 | 0:1cfd66c3a181 | 26 | |
xav_jann1 | 0:1cfd66c3a181 | 27 | // Arrière: |
xav_jann1 | 0:1cfd66c3a181 | 28 | void Moteur::backward() { |
xav_jann1 | 0:1cfd66c3a181 | 29 | m_in1 = 0; |
xav_jann1 | 0:1cfd66c3a181 | 30 | m_in2 = 1; |
xav_jann1 | 0:1cfd66c3a181 | 31 | } |
xav_jann1 | 0:1cfd66c3a181 | 32 | |
xav_jann1 | 0:1cfd66c3a181 | 33 | // Opposé: |
xav_jann1 | 0:1cfd66c3a181 | 34 | void Moteur::opposite() { |
xav_jann1 | 0:1cfd66c3a181 | 35 | m_in1 = !m_in1.read(); |
xav_jann1 | 0:1cfd66c3a181 | 36 | m_in2 = !m_in2.read(); |
xav_jann1 | 0:1cfd66c3a181 | 37 | } |
xav_jann1 | 0:1cfd66c3a181 | 38 | |
xav_jann1 | 0:1cfd66c3a181 | 39 | // Arrêt: |
xav_jann1 | 0:1cfd66c3a181 | 40 | void Moteur::stop() { |
xav_jann1 | 0:1cfd66c3a181 | 41 | m_pwm.write(0.0f); // Duty cycle |
xav_jann1 | 0:1cfd66c3a181 | 42 | } |
xav_jann1 | 0:1cfd66c3a181 | 43 | |
xav_jann1 | 0:1cfd66c3a181 | 44 | // Avance ou recule en fonction du pwm: |
xav_jann1 | 0:1cfd66c3a181 | 45 | void Moteur::turn(float pwm) { |
xav_jann1 | 0:1cfd66c3a181 | 46 | if (pwm < 0) { |
xav_jann1 | 0:1cfd66c3a181 | 47 | pwm -= m_offset; |
xav_jann1 | 0:1cfd66c3a181 | 48 | if (pwm < -m_pwm_max) pwm = -m_pwm_max; |
xav_jann1 | 0:1cfd66c3a181 | 49 | setPWM(-pwm); |
xav_jann1 | 0:1cfd66c3a181 | 50 | backward(); |
xav_jann1 | 0:1cfd66c3a181 | 51 | } else { |
xav_jann1 | 0:1cfd66c3a181 | 52 | pwm += m_offset; |
xav_jann1 | 0:1cfd66c3a181 | 53 | if (pwm > m_pwm_max) pwm = m_pwm_max; |
xav_jann1 | 0:1cfd66c3a181 | 54 | setPWM(pwm); |
xav_jann1 | 0:1cfd66c3a181 | 55 | forward(); |
xav_jann1 | 0:1cfd66c3a181 | 56 | } |
xav_jann1 | 0:1cfd66c3a181 | 57 | } |