Rob Griffith / Mbed 2 deprecated rat_code

Dependencies:   mbed QEI

Committer:
dionigi
Date:
Thu Nov 15 17:19:20 2018 +0000
Revision:
1:6f18bb7a77a5
Child:
3:35deb5c21b33
Added assignment3 files

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dionigi 1:6f18bb7a77a5 1 #include "assignment3.h"
dionigi 1:6f18bb7a77a5 2
dionigi 1:6f18bb7a77a5 3 #include "globals.h"
dionigi 1:6f18bb7a77a5 4
dionigi 1:6f18bb7a77a5 5 /***
dionigi 1:6f18bb7a77a5 6 * Assignment 3, Part A
dionigi 1:6f18bb7a77a5 7 *
dionigi 1:6f18bb7a77a5 8 * PID! First get your mouse driving straight endlessly (you
dionigi 1:6f18bb7a77a5 9 * will have to pick it up to stop it).
dionigi 1:6f18bb7a77a5 10 * Then, get your mouse to turn.
dionigi 1:6f18bb7a77a5 11 *
dionigi 1:6f18bb7a77a5 12 * You should not be modifying any of the following
dionigi 1:6f18bb7a77a5 13 * functions! They are essentially test cases. If your rat does
dionigi 1:6f18bb7a77a5 14 * not achieve the specified behavior, then something is wrong
dionigi 1:6f18bb7a77a5 15 * in either your "mainController" class or your
dionigi 1:6f18bb7a77a5 16 * "pid_controller" class.
dionigi 1:6f18bb7a77a5 17 *
dionigi 1:6f18bb7a77a5 18 * Part 1: "test_systick". Again, do not modify this function.
dionigi 1:6f18bb7a77a5 19 * Instead, modify your systick function to use the "logger"
dionigi 1:6f18bb7a77a5 20 * object to "log" (NOT print!) messages, which will be printed
dionigi 1:6f18bb7a77a5 21 * every 100ms. You'll also need to initialize your systick
dionigi 1:6f18bb7a77a5 22 * properly by modifying its "start()" function.
dionigi 1:6f18bb7a77a5 23 *
dionigi 1:6f18bb7a77a5 24 * Part 2: "drive_straight". Your mouse should drive straight
dionigi 1:6f18bb7a77a5 25 * forever, until you pick it up and stop it.
dionigi 1:6f18bb7a77a5 26 ***/
dionigi 1:6f18bb7a77a5 27
dionigi 1:6f18bb7a77a5 28 void test_systick() {
dionigi 1:6f18bb7a77a5 29 systick.start();
dionigi 1:6f18bb7a77a5 30
dionigi 1:6f18bb7a77a5 31 while (true) {
dionigi 1:6f18bb7a77a5 32 wait(1);
dionigi 1:6f18bb7a77a5 33 pc.printf("Current time (ms): %d\n", millis);
dionigi 1:6f18bb7a77a5 34 }
dionigi 1:6f18bb7a77a5 35 }
dionigi 1:6f18bb7a77a5 36
dionigi 1:6f18bb7a77a5 37 void drive_straight() {
dionigi 1:6f18bb7a77a5 38 systick.start();
dionigi 1:6f18bb7a77a5 39
dionigi 1:6f18bb7a77a5 40 wait(1);
dionigi 1:6f18bb7a77a5 41 mainController.driveStraight();
dionigi 1:6f18bb7a77a5 42 }
dionigi 1:6f18bb7a77a5 43
dionigi 1:6f18bb7a77a5 44 /*** Assignment 3, Part B
dionigi 1:6f18bb7a77a5 45 *
dionigi 1:6f18bb7a77a5 46 * Even more PID! Once again, do not modify these functions, as
dionigi 1:6f18bb7a77a5 47 * they act as test cases. For all these test cases, the mouse
dionigi 1:6f18bb7a77a5 48 * should finish in its original position.
dionigi 1:6f18bb7a77a5 49 *
dionigi 1:6f18bb7a77a5 50 * Part 2a: "do_turnsX". Your mouse will execute a series of turns.
dionigi 1:6f18bb7a77a5 51 * Each of these turns should be 90 or 180 degrees, and your
dionigi 1:6f18bb7a77a5 52 * rat should end up somewhat close to its original position.
dionigi 1:6f18bb7a77a5 53 * Also, there are various stages. If you can pass Stage 1 and 2,
dionigi 1:6f18bb7a77a5 54 * you are fine for this assignment. If you can pass Stage 3,
dionigi 1:6f18bb7a77a5 55 * your rat has extremely good turns.
dionigi 1:6f18bb7a77a5 56 *
dionigi 1:6f18bb7a77a5 57 * Part 2b: "move_cells": Your rat will move three cells,
dionigi 1:6f18bb7a77a5 58 * first one at a time, then two at a time. Put your rat in the
dionigi 1:6f18bb7a77a5 59 * maze to verify the distances travelled are correct.
dionigi 1:6f18bb7a77a5 60 *
dionigi 1:6f18bb7a77a5 61 * Part 2c: "move_path": This simply combines the previous two
dionigi 1:6f18bb7a77a5 62 * functions, simulating your mouse navigating a real path.
dionigi 1:6f18bb7a77a5 63 ***/
dionigi 1:6f18bb7a77a5 64
dionigi 1:6f18bb7a77a5 65 void do_turns1() {
dionigi 1:6f18bb7a77a5 66 systick.start();
dionigi 1:6f18bb7a77a5 67
dionigi 1:6f18bb7a77a5 68 // STAGE 1: Turn left, then right.
dionigi 1:6f18bb7a77a5 69 mainController.turn(90);
dionigi 1:6f18bb7a77a5 70 mainController.turn(-90);
dionigi 1:6f18bb7a77a5 71 }
dionigi 1:6f18bb7a77a5 72
dionigi 1:6f18bb7a77a5 73 void do_turns2() {
dionigi 1:6f18bb7a77a5 74 systick.start();
dionigi 1:6f18bb7a77a5 75
dionigi 1:6f18bb7a77a5 76 // STAGE 2: Now with 180's.
dionigi 1:6f18bb7a77a5 77 mainController.turn(90);
dionigi 1:6f18bb7a77a5 78 mainController.turn(90);
dionigi 1:6f18bb7a77a5 79 mainController.turn(-180);
dionigi 1:6f18bb7a77a5 80 mainController.turn(-90);
dionigi 1:6f18bb7a77a5 81 mainController.turn(-90);
dionigi 1:6f18bb7a77a5 82 mainController.turn(180);
dionigi 1:6f18bb7a77a5 83 }
dionigi 1:6f18bb7a77a5 84
dionigi 1:6f18bb7a77a5 85 void do_turns3() {
dionigi 1:6f18bb7a77a5 86 systick.start();
dionigi 1:6f18bb7a77a5 87
dionigi 1:6f18bb7a77a5 88 // STAGE 3: The real (optional) test.
dionigi 1:6f18bb7a77a5 89 mainController.turn(90);
dionigi 1:6f18bb7a77a5 90 mainController.turn(90);
dionigi 1:6f18bb7a77a5 91 mainController.turn(180);
dionigi 1:6f18bb7a77a5 92
dionigi 1:6f18bb7a77a5 93 mainController.turn(-90);
dionigi 1:6f18bb7a77a5 94 mainController.turn(-90);
dionigi 1:6f18bb7a77a5 95 mainController.turn(-180);
dionigi 1:6f18bb7a77a5 96
dionigi 1:6f18bb7a77a5 97 mainController.turn(90);
dionigi 1:6f18bb7a77a5 98 mainController.turn(90);
dionigi 1:6f18bb7a77a5 99 mainController.turn(-90);
dionigi 1:6f18bb7a77a5 100 mainController.turn(-90);
dionigi 1:6f18bb7a77a5 101 }
dionigi 1:6f18bb7a77a5 102
dionigi 1:6f18bb7a77a5 103 void move_cells() {
dionigi 1:6f18bb7a77a5 104 systick.start();
dionigi 1:6f18bb7a77a5 105
dionigi 1:6f18bb7a77a5 106 mainController.moveCells(1);
dionigi 1:6f18bb7a77a5 107 mainController.moveCells(2);
dionigi 1:6f18bb7a77a5 108 }
dionigi 1:6f18bb7a77a5 109
dionigi 1:6f18bb7a77a5 110 void move_path() {
dionigi 1:6f18bb7a77a5 111 systick.start();
dionigi 1:6f18bb7a77a5 112
dionigi 1:6f18bb7a77a5 113 mainController.moveCells(1);
dionigi 1:6f18bb7a77a5 114 mainController.moveCells(1);
dionigi 1:6f18bb7a77a5 115 mainController.turn(180);
dionigi 1:6f18bb7a77a5 116 mainController.moveCells(2);
dionigi 1:6f18bb7a77a5 117 mainController.turn(180);
dionigi 1:6f18bb7a77a5 118 }