ELCT 302 / Mbed 2 deprecated Top_Fuel_Dragster

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }