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.
Dependencies: mbed
main.cpp@10:d24a94a677ea, 2018-04-22 (annotated)
- Committer:
- KDrainEE
- Date:
- Sun Apr 22 13:52:41 2018 +0000
- Revision:
- 10:d24a94a677ea
- Parent:
- 9:1ba8ee3f4ee3
Moving things. Probably breaking things
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| KDrainEE | 0:30871514c229 | 1 | //Works at speed 2.0, KPS 2.0e-2, KD 1.0e-4 |
| KDrainEE | 0:30871514c229 | 2 | |
| KDrainEE | 0:30871514c229 | 3 | //Has tolerance check, Steering doesn't |
| KDrainEE | 0:30871514c229 | 4 | //Values from Simulation |
| KDrainEE | 0:30871514c229 | 5 | //#define KPS 0.0896852742245504f |
| KDrainEE | 0:30871514c229 | 6 | //#define KD 0.072870569295611f |
| KDrainEE | 0:30871514c229 | 7 | //#define KPS 0.03f |
| KDrainEE | 0:30871514c229 | 8 | |
| KDrainEE | 0:30871514c229 | 9 | #include "mbed.h" |
| KDrainEE | 0:30871514c229 | 10 | #include <iostream> |
| ELCT302Honors | 6:1b4a677c468c | 11 | #include "lsc.h" |
| KDrainEE | 10:d24a94a677ea | 12 | #include "states.h" |
| KDrainEE | 10:d24a94a677ea | 13 | #include "control.h" |
| KDrainEE | 0:30871514c229 | 14 | |
| KDrainEE | 0:30871514c229 | 15 | |
| KDrainEE | 0:30871514c229 | 16 | |
| ELCT302Honors | 6:1b4a677c468c | 17 | /***********************************|Pin Declarations|*************************************************************/ |
| ELCT302Honors | 6:1b4a677c468c | 18 | //Communication |
| ELCT302Honors | 6:1b4a677c468c | 19 | Serial bt(PTE22, PTE23); //Serial Pins (Tx, Rx) |
| KDrainEE | 10:d24a94a677ea | 20 | |
| ELCT302Honors | 6:1b4a677c468c | 21 | //Checkpoint Interrupts |
| ELCT302Honors | 6:1b4a677c468c | 22 | InterruptIn navRt(PTD2); |
| ELCT302Honors | 6:1b4a677c468c | 23 | InterruptIn navLft(PTD3); |
| KDrainEE | 10:d24a94a677ea | 24 | |
| KDrainEE | 0:30871514c229 | 25 | |
| ELCT302Honors | 6:1b4a677c468c | 26 | /***********************************|Variable Declarations|*************************************************************/ |
| KDrainEE | 0:30871514c229 | 27 | |
| KDrainEE | 10:d24a94a677ea | 28 | |
| ELCT302Honors | 3:246625f3ceee | 29 | |
| ELCT302Honors | 5:aa582398b2eb | 30 | bool lTrig = false; |
| ELCT302Honors | 5:aa582398b2eb | 31 | bool rTrig = false; |
| ELCT302Honors | 3:246625f3ceee | 32 | |
| ELCT302Honors | 3:246625f3ceee | 33 | volatile int rightCount; |
| ELCT302Honors | 3:246625f3ceee | 34 | volatile int leftCount; |
| ELCT302Honors | 3:246625f3ceee | 35 | |
| KDrainEE | 0:30871514c229 | 36 | float data[6]; |
| KDrainEE | 0:30871514c229 | 37 | |
| KDrainEE | 0:30871514c229 | 38 | |
| ELCT302Honors | 6:1b4a677c468c | 39 | |
| ELCT302Honors | 6:1b4a677c468c | 40 | |
| ELCT302Honors | 6:1b4a677c468c | 41 | |
| KDrainEE | 4:af9973350ffe | 42 | |
| KDrainEE | 4:af9973350ffe | 43 | |
| KDrainEE | 2:e87736742f99 | 44 | void display() |
| KDrainEE | 2:e87736742f99 | 45 | { |
| ELCT302Honors | 3:246625f3ceee | 46 | bt.printf("Setpoint = %f, Kps = %f, Kd = %f, Kpm = %f, Brake = %f\r\n", Setpoint, Kps, Kd, Kpm, brake.read()); |
| KDrainEE | 2:e87736742f99 | 47 | } |
| KDrainEE | 2:e87736742f99 | 48 | |
| ELCT302Honors | 6:1b4a677c468c | 49 | |
| KDrainEE | 0:30871514c229 | 50 | void serCb() |
| KDrainEE | 0:30871514c229 | 51 | { |
| KDrainEE | 0:30871514c229 | 52 | char x = bt.getc(); |
| KDrainEE | 0:30871514c229 | 53 | if (x == 'u') |
| KDrainEE | 0:30871514c229 | 54 | { |
| ELCT302Honors | 3:246625f3ceee | 55 | Setpoint += 0.025; |
| KDrainEE | 2:e87736742f99 | 56 | display(); |
| KDrainEE | 0:30871514c229 | 57 | } |
| KDrainEE | 0:30871514c229 | 58 | else if(x == 'h') |
| KDrainEE | 0:30871514c229 | 59 | { |
| ELCT302Honors | 3:246625f3ceee | 60 | Setpoint -= 0.025; |
| KDrainEE | 2:e87736742f99 | 61 | display(); |
| KDrainEE | 0:30871514c229 | 62 | } |
| KDrainEE | 1:9149cfedd4d5 | 63 | else if (x == 'i') |
| KDrainEE | 1:9149cfedd4d5 | 64 | { |
| KDrainEE | 1:9149cfedd4d5 | 65 | Kps += 1.0e-3; |
| KDrainEE | 2:e87736742f99 | 66 | display(); |
| KDrainEE | 1:9149cfedd4d5 | 67 | } |
| KDrainEE | 1:9149cfedd4d5 | 68 | else if (x == 'j') |
| KDrainEE | 1:9149cfedd4d5 | 69 | { |
| KDrainEE | 1:9149cfedd4d5 | 70 | Kps -= 1.0e-3; |
| KDrainEE | 2:e87736742f99 | 71 | display(); |
| KDrainEE | 1:9149cfedd4d5 | 72 | } |
| KDrainEE | 1:9149cfedd4d5 | 73 | else if (x == 'o') |
| KDrainEE | 1:9149cfedd4d5 | 74 | { |
| KDrainEE | 1:9149cfedd4d5 | 75 | Kd += 1.0e-5; |
| KDrainEE | 2:e87736742f99 | 76 | display(); |
| KDrainEE | 1:9149cfedd4d5 | 77 | } |
| KDrainEE | 1:9149cfedd4d5 | 78 | else if (x == 'k') |
| KDrainEE | 1:9149cfedd4d5 | 79 | { |
| KDrainEE | 1:9149cfedd4d5 | 80 | Kd -= 1.0e-5; |
| KDrainEE | 2:e87736742f99 | 81 | display(); |
| KDrainEE | 1:9149cfedd4d5 | 82 | } |
| KDrainEE | 2:e87736742f99 | 83 | else if (x == 'b') |
| KDrainEE | 2:e87736742f99 | 84 | { |
| KDrainEE | 4:af9973350ffe | 85 | applyBrake(); |
| KDrainEE | 2:e87736742f99 | 86 | display(); |
| ELCT302Honors | 3:246625f3ceee | 87 | |
| KDrainEE | 2:e87736742f99 | 88 | } |
| ELCT302Honors | 3:246625f3ceee | 89 | else if (x == 'n') |
| KDrainEE | 2:e87736742f99 | 90 | { |
| KDrainEE | 4:af9973350ffe | 91 | releaseBrake(); |
| KDrainEE | 2:e87736742f99 | 92 | display(); |
| KDrainEE | 2:e87736742f99 | 93 | } |
| KDrainEE | 2:e87736742f99 | 94 | else if (x == 'p') |
| KDrainEE | 2:e87736742f99 | 95 | { |
| KDrainEE | 2:e87736742f99 | 96 | display(); |
| ELCT302Honors | 3:246625f3ceee | 97 | } |
| ELCT302Honors | 3:246625f3ceee | 98 | else if (x == 'y') |
| ELCT302Honors | 3:246625f3ceee | 99 | { |
| ELCT302Honors | 3:246625f3ceee | 100 | Kpm += 0.003; |
| ELCT302Honors | 3:246625f3ceee | 101 | display(); |
| ELCT302Honors | 3:246625f3ceee | 102 | } |
| ELCT302Honors | 3:246625f3ceee | 103 | else if(x == 'g') |
| ELCT302Honors | 3:246625f3ceee | 104 | { |
| ELCT302Honors | 3:246625f3ceee | 105 | Kpm -= 0.003; |
| ELCT302Honors | 3:246625f3ceee | 106 | display(); |
| ELCT302Honors | 3:246625f3ceee | 107 | } |
| ELCT302Honors | 3:246625f3ceee | 108 | else if (x == 'z') |
| ELCT302Honors | 3:246625f3ceee | 109 | { |
| ELCT302Honors | 3:246625f3ceee | 110 | bt.printf("Right = %i Left = %i\r\n", rightCount, leftCount); |
| ELCT302Honors | 3:246625f3ceee | 111 | } |
| ELCT302Honors | 6:1b4a677c468c | 112 | else if(x== 's') |
| ELCT302Honors | 6:1b4a677c468c | 113 | { |
| ELCT302Honors | 6:1b4a677c468c | 114 | stopState(); |
| ELCT302Honors | 6:1b4a677c468c | 115 | } |
| ELCT302Honors | 6:1b4a677c468c | 116 | else if(x == 'a') |
| ELCT302Honors | 6:1b4a677c468c | 117 | { |
| ELCT302Honors | 6:1b4a677c468c | 118 | letsGo(); |
| ELCT302Honors | 6:1b4a677c468c | 119 | } |
| KDrainEE | 0:30871514c229 | 120 | else |
| KDrainEE | 0:30871514c229 | 121 | { |
| KDrainEE | 2:e87736742f99 | 122 | bt.printf("Invalid input"); |
| KDrainEE | 0:30871514c229 | 123 | } |
| KDrainEE | 0:30871514c229 | 124 | if(Setpoint > MAXM) Setpoint = MAXM; |
| KDrainEE | 2:e87736742f99 | 125 | if(Setpoint < MINM) Setpoint = MINM; |
| KDrainEE | 0:30871514c229 | 126 | } |
| KDrainEE | 0:30871514c229 | 127 | |
| KDrainEE | 2:e87736742f99 | 128 | |
| ELCT302Honors | 3:246625f3ceee | 129 | void incL() |
| ELCT302Honors | 3:246625f3ceee | 130 | { |
| ELCT302Honors | 3:246625f3ceee | 131 | leftCount++; |
| ELCT302Honors | 5:aa582398b2eb | 132 | lTrig = true; |
| ELCT302Honors | 3:246625f3ceee | 133 | } |
| KDrainEE | 2:e87736742f99 | 134 | |
| ELCT302Honors | 3:246625f3ceee | 135 | void incR() |
| KDrainEE | 0:30871514c229 | 136 | { |
| ELCT302Honors | 3:246625f3ceee | 137 | rightCount++; |
| ELCT302Honors | 5:aa582398b2eb | 138 | rTrig = true; |
| KDrainEE | 0:30871514c229 | 139 | } |
| KDrainEE | 0:30871514c229 | 140 | |
| ELCT302Honors | 3:246625f3ceee | 141 | |
| KDrainEE | 0:30871514c229 | 142 | |
| KDrainEE | 0:30871514c229 | 143 | int main() |
| KDrainEE | 0:30871514c229 | 144 | { |
| KDrainEE | 0:30871514c229 | 145 | //startup checks |
| ELCT302Honors | 3:246625f3ceee | 146 | bt.baud(115200); |
| ELCT302Honors | 6:1b4a677c468c | 147 | bt.attach(&serCb); |
| ELCT302Honors | 6:1b4a677c468c | 148 | cameraInit(); |
| ELCT302Honors | 6:1b4a677c468c | 149 | cameraDaq.attach(&acquire, 0.01f); |
| KDrainEE | 0:30871514c229 | 150 | servoSig.period(STEER_FREQ); |
| KDrainEE | 0:30871514c229 | 151 | gateDrive.period(.00005f); |
| KDrainEE | 0:30871514c229 | 152 | gateDrive.write(Setpoint); |
| ELCT302Honors | 6:1b4a677c468c | 153 | |
| KDrainEE | 0:30871514c229 | 154 | |
| KDrainEE | 0:30871514c229 | 155 | ctrlTimer.start(); |
| KDrainEE | 0:30871514c229 | 156 | control.attach(&cb, TI); |
| KDrainEE | 0:30871514c229 | 157 | |
| ELCT302Honors | 3:246625f3ceee | 158 | rightCount = 0; |
| ELCT302Honors | 3:246625f3ceee | 159 | leftCount = 0; |
| ELCT302Honors | 5:aa582398b2eb | 160 | |
| ELCT302Honors | 5:aa582398b2eb | 161 | |
| ELCT302Honors | 3:246625f3ceee | 162 | navRt.fall(&incR); |
| ELCT302Honors | 3:246625f3ceee | 163 | navLft.fall(&incL); |
| ELCT302Honors | 3:246625f3ceee | 164 | |
| ELCT302Honors | 6:1b4a677c468c | 165 | goButton.fall(&letsGo); |
| ELCT302Honors | 6:1b4a677c468c | 166 | stopButton.fall(&stopState); |
| ELCT302Honors | 6:1b4a677c468c | 167 | waitState(); |
| KDrainEE | 0:30871514c229 | 168 | while(1) { |
| ELCT302Honors | 6:1b4a677c468c | 169 | |
| ELCT302Honors | 5:aa582398b2eb | 170 | if(lTrig){ |
| ELCT302Honors | 5:aa582398b2eb | 171 | bt.putc('l'); |
| ELCT302Honors | 5:aa582398b2eb | 172 | lTrig = false; |
| ELCT302Honors | 5:aa582398b2eb | 173 | } |
| ELCT302Honors | 5:aa582398b2eb | 174 | if(rTrig){ |
| ELCT302Honors | 5:aa582398b2eb | 175 | bt.putc('r'); |
| ELCT302Honors | 5:aa582398b2eb | 176 | rTrig = false; |
| ELCT302Honors | 5:aa582398b2eb | 177 | } |
| ELCT302Honors | 6:1b4a677c468c | 178 | //bt.printf("Cammax %i\r\n", camMax); |
| ELCT302Honors | 6:1b4a677c468c | 179 | |
| KDrainEE | 0:30871514c229 | 180 | } |
| KDrainEE | 0:30871514c229 | 181 | } |