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.
Diff: main.cpp
- Revision:
- 13:41bf923cd055
- Parent:
- 12:3dfd8f2939ac
- Child:
- 16:1be4a1c2d08a
--- a/main.cpp Mon Apr 19 08:47:39 2021 +0000
+++ b/main.cpp Mon Apr 19 15:54:20 2021 +0000
@@ -5,6 +5,7 @@
#include "EncoderCounter.h"
#include "Servo.h"
#include "SpeedController.h"
+#include "PositionController.h"
#include "FastPWM.h"
#include "RangeFinder.h"
@@ -44,8 +45,9 @@
float counts_per_turn = 20.0f*78.125f; // counts/turn * gearratio
float kn = 180.0f/12.0f; // (RPM/V)
float max_voltage = 12.0f; // adjust this to 6.0f if only one batterypack is used
-SpeedController speedController_M1(counts_per_turn, kn, max_voltage, pwmOut_M1, encoderCounter_M1);
-SpeedController speedController_M2(counts_per_turn, kn, max_voltage, pwmOut_M2, encoderCounter_M2);
+SpeedController speedController_M1(counts_per_turn, kn, max_voltage, pwmOut_M1, encoderCounter_M1);
+PositionController positionController_M2(counts_per_turn, kn, max_voltage, pwmOut_M2, encoderCounter_M2);
+float max_speed_rps = 1.0f; // has to be smaller or equal to kn * max_voltage
// Futaba Servo S3001 20mm 3kg Analog
// https://www.modellmarkt24.ch/pi/RC-Elektronik/Servos/Standard-Servo-20mm/futaba-servo-s3001-20mm-3kg-analog.html?gclid=CjwKCAjw3pWDBhB3EiwAV1c5rK_-x_Bt19_wIY-IcS2C-RULXKBtYfY0byxejkZLjASro-EMPBUhrxoCgaQQAvD_BwE
@@ -96,7 +98,7 @@
/* command a speed to dc motors M1 and M2*/
speedController_M1.setDesiredSpeedRPS( 1.0f);
- speedController_M2.setDesiredSpeedRPS(-0.5f);
+ positionController_M2.setDesiredRotation(0.5f, max_speed_rps);
/* write output voltage to motor M3 */
pwmOut_M3.write(0.75);
@@ -122,7 +124,7 @@
dist_IRSensor = 0.0f;
speedController_M1.setDesiredSpeedRPS(0.0f);
- speedController_M2.setDesiredSpeedRPS(0.0f);
+ positionController_M2.setDesiredRotation(0.0f, max_speed_rps);
pwmOut_M3.write(0.5);
servoOutput_mus_S1 = 0;
@@ -136,15 +138,15 @@
}
/* do only output via serial what's really necessary (this makes your code slow)*/
- printf("%3.3f, %3d, %3d, %3d, %3.3f, %3.3f, %3.3f;\r\n",
+ printf("%3.3f, %3d, %3d, %3.3f, %3.3f, %3d, %3.3f;\r\n",
dist_IRSensor,
servoOutput_mus_S1,
servoOutput_mus_S2,
+ speedController_M1.getSpeedRPS(),
+ positionController_M2.getRotation(),
encoderCounter_M3.read(),
- speedController_M1.getSpeedRPS(),
- speedController_M2.getSpeedRPS(),
dist_USSensor);
-
+
/* ------------- stop hacking ------------- -------------*/
int T_loop_ms = duration_cast<milliseconds>(loop_timer.elapsed_time()).count();