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.
main_controller.cpp@0:7a97ebb833eb, 2019-05-05 (annotated)
- Committer:
- rzalog
- Date:
- Sun May 05 00:02:11 2019 +0000
- Revision:
- 0:7a97ebb833eb
test commit;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| rzalog | 0:7a97ebb833eb | 1 | #include <string> |
| rzalog | 0:7a97ebb833eb | 2 | |
| rzalog | 0:7a97ebb833eb | 3 | #include "globals.h" |
| rzalog | 0:7a97ebb833eb | 4 | #include "main_controller.h" |
| rzalog | 0:7a97ebb833eb | 5 | #include "pid_controller.h" |
| rzalog | 0:7a97ebb833eb | 6 | |
| rzalog | 0:7a97ebb833eb | 7 | MainController::MainController() { |
| rzalog | 0:7a97ebb833eb | 8 | m_pid = new PIDController; |
| rzalog | 0:7a97ebb833eb | 9 | this->stop(); |
| rzalog | 0:7a97ebb833eb | 10 | } |
| rzalog | 0:7a97ebb833eb | 11 | |
| rzalog | 0:7a97ebb833eb | 12 | MainController::~MainController() { |
| rzalog | 0:7a97ebb833eb | 13 | delete m_pid; |
| rzalog | 0:7a97ebb833eb | 14 | } |
| rzalog | 0:7a97ebb833eb | 15 | |
| rzalog | 0:7a97ebb833eb | 16 | void MainController::start() { |
| rzalog | 0:7a97ebb833eb | 17 | m_pid->reset(); |
| rzalog | 0:7a97ebb833eb | 18 | shouldUpdate = true; |
| rzalog | 0:7a97ebb833eb | 19 | } |
| rzalog | 0:7a97ebb833eb | 20 | |
| rzalog | 0:7a97ebb833eb | 21 | void MainController::stop() { |
| rzalog | 0:7a97ebb833eb | 22 | shouldUpdate = false; |
| rzalog | 0:7a97ebb833eb | 23 | m_pid->reset(); |
| rzalog | 0:7a97ebb833eb | 24 | motors.stop(); |
| rzalog | 0:7a97ebb833eb | 25 | } |
| rzalog | 0:7a97ebb833eb | 26 | |
| rzalog | 0:7a97ebb833eb | 27 | void MainController::update() { |
| rzalog | 0:7a97ebb833eb | 28 | if (shouldUpdate) { |
| rzalog | 0:7a97ebb833eb | 29 | m_pid->update(); |
| rzalog | 0:7a97ebb833eb | 30 | } |
| rzalog | 0:7a97ebb833eb | 31 | } |
| rzalog | 0:7a97ebb833eb | 32 | |
| rzalog | 0:7a97ebb833eb | 33 | void MainController::driveStraight() { |
| rzalog | 0:7a97ebb833eb | 34 | pc.printf("Driving straight.\n"); |
| rzalog | 0:7a97ebb833eb | 35 | m_pid->reset(); |
| rzalog | 0:7a97ebb833eb | 36 | |
| rzalog | 0:7a97ebb833eb | 37 | int start = millis; |
| rzalog | 0:7a97ebb833eb | 38 | |
| rzalog | 0:7a97ebb833eb | 39 | m_pid->setXGoal(100); |
| rzalog | 0:7a97ebb833eb | 40 | m_pid->setWGoal(0); |
| rzalog | 0:7a97ebb833eb | 41 | |
| rzalog | 0:7a97ebb833eb | 42 | while (encoders.right() < 5000) { |
| rzalog | 0:7a97ebb833eb | 43 | pc.printf(m_pid->getData()); |
| rzalog | 0:7a97ebb833eb | 44 | wait(0.5); |
| rzalog | 0:7a97ebb833eb | 45 | } |
| rzalog | 0:7a97ebb833eb | 46 | |
| rzalog | 0:7a97ebb833eb | 47 | int end = millis; |
| rzalog | 0:7a97ebb833eb | 48 | |
| rzalog | 0:7a97ebb833eb | 49 | systick.stop(); |
| rzalog | 0:7a97ebb833eb | 50 | motors.stop(); |
| rzalog | 0:7a97ebb833eb | 51 | |
| rzalog | 0:7a97ebb833eb | 52 | pc.printf("Done moving straight: %d ms\n", end - start); |
| rzalog | 0:7a97ebb833eb | 53 | encoders.printValues(); |
| rzalog | 0:7a97ebb833eb | 54 | } |
| rzalog | 0:7a97ebb833eb | 55 | |
| rzalog | 0:7a97ebb833eb | 56 | void MainController::turn(int deg) { |
| rzalog | 0:7a97ebb833eb | 57 | pc.printf("Turning %d degrees\n", deg); |
| rzalog | 0:7a97ebb833eb | 58 | this->start(); |
| rzalog | 0:7a97ebb833eb | 59 | |
| rzalog | 0:7a97ebb833eb | 60 | int counts = deg * deg_to_counts; |
| rzalog | 0:7a97ebb833eb | 61 | |
| rzalog | 0:7a97ebb833eb | 62 | m_pid->setXGoal(0); |
| rzalog | 0:7a97ebb833eb | 63 | m_pid->setWGoal(counts); |
| rzalog | 0:7a97ebb833eb | 64 | |
| rzalog | 0:7a97ebb833eb | 65 | while (!m_pid->isDone()) { |
| rzalog | 0:7a97ebb833eb | 66 | pc.printf(m_pid->getData()); |
| rzalog | 0:7a97ebb833eb | 67 | } |
| rzalog | 0:7a97ebb833eb | 68 | |
| rzalog | 0:7a97ebb833eb | 69 | pc.printf(m_pid->getData()); |
| rzalog | 0:7a97ebb833eb | 70 | this->stop(); |
| rzalog | 0:7a97ebb833eb | 71 | pc.printf("Done turning %d degrees\n", deg); |
| rzalog | 0:7a97ebb833eb | 72 | } |
| rzalog | 0:7a97ebb833eb | 73 | |
| rzalog | 0:7a97ebb833eb | 74 | void MainController::moveCells(float n) { |
| rzalog | 0:7a97ebb833eb | 75 | pc.printf("Moving %0.2f cells\n", n); |
| rzalog | 0:7a97ebb833eb | 76 | this->start(); |
| rzalog | 0:7a97ebb833eb | 77 | |
| rzalog | 0:7a97ebb833eb | 78 | int counts = n * cells_to_counts; |
| rzalog | 0:7a97ebb833eb | 79 | |
| rzalog | 0:7a97ebb833eb | 80 | pc.printf("Set goal x counts to %d\n", counts); |
| rzalog | 0:7a97ebb833eb | 81 | |
| rzalog | 0:7a97ebb833eb | 82 | int start = millis; |
| rzalog | 0:7a97ebb833eb | 83 | |
| rzalog | 0:7a97ebb833eb | 84 | m_pid->setXGoal(counts); |
| rzalog | 0:7a97ebb833eb | 85 | m_pid->setWGoal(0); |
| rzalog | 0:7a97ebb833eb | 86 | |
| rzalog | 0:7a97ebb833eb | 87 | while (!m_pid->isDone()) { |
| rzalog | 0:7a97ebb833eb | 88 | pc.printf(m_pid->getData()); |
| rzalog | 0:7a97ebb833eb | 89 | } |
| rzalog | 0:7a97ebb833eb | 90 | |
| rzalog | 0:7a97ebb833eb | 91 | int end = millis; |
| rzalog | 0:7a97ebb833eb | 92 | |
| rzalog | 0:7a97ebb833eb | 93 | pc.printf(m_pid->getData()); |
| rzalog | 0:7a97ebb833eb | 94 | |
| rzalog | 0:7a97ebb833eb | 95 | this->stop(); |
| rzalog | 0:7a97ebb833eb | 96 | pc.printf("Finished moving %0.2f cells: %d ms\n", n, end - start); |
| rzalog | 0:7a97ebb833eb | 97 | } |