NXP Group 13 / Mbed 2 deprecated Car3

Dependencies:   camera mbed tsi_sensor

Fork of Car2 by Zach Matthews

Committer:
zamatthews
Date:
Thu Mar 02 21:55:33 2017 +0000
Revision:
5:137dfb3e692f
Parent:
4:f4852befd69c
Child:
6:971236e48adc
Motors can be individually controlled, will need to come up with algorithm to set ratio between motors;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zamatthews 0:b761ef827157 1 #include "mbed.h"
zamatthews 2:0db7cc5ad6db 2 #include "Servo.h"
zamatthews 2:0db7cc5ad6db 3
zamatthews 3:dadfc15fc2d1 4 //#define CIRCUMFERENCE SOMEINT //circumference in some unit of measurement (inches perhaps?)
zamatthews 3:dadfc15fc2d1 5 //#define RESWIDTH 80 //resolution width/height. change these based on actual resolution
zamatthews 3:dadfc15fc2d1 6 //#define RESHEIGHT 60
lmstthomas 4:f4852befd69c 7 #define STRAIGHT 0.00095f
lmstthomas 4:f4852befd69c 8 #define FULLRIGHT 0.0013f
lmstthomas 4:f4852befd69c 9 #define FULLLEFT 0.0006
zamatthews 3:dadfc15fc2d1 10
zamatthews 3:dadfc15fc2d1 11 //InterruptIn camera(PXXX); //can set up to get a frame from the camera whenever is sends one? does the camera even have a pin for this?
zamatthews 3:dadfc15fc2d1 12 //Timer timer;
zamatthews 3:dadfc15fc2d1 13 //DigitalIn rotation(PXXX);
zamatthews 3:dadfc15fc2d1 14 //camera data pins used are (D0-D7): PTC7, PTC0, PTC3, PTC4, PTC5, PTC6, PTC10, PTC11
zamatthews 3:dadfc15fc2d1 15 //other camera pins: SCL->PTE5, SDA->PTE4, PCLK->PTE21, VSYNC->PTE30, H->PTE29
zamatthews 3:dadfc15fc2d1 16 PwmOut servo(PTE20);
zamatthews 5:137dfb3e692f 17 PwmOut motor_left(PTA5);
zamatthews 5:137dfb3e692f 18 PwmOut motor_right(PTC8);
zamatthews 3:dadfc15fc2d1 19 DigitalOut DIR_L(PTD4);
zamatthews 3:dadfc15fc2d1 20 DigitalOut DIR_R(PTA4);
zamatthews 3:dadfc15fc2d1 21
zamatthews 3:dadfc15fc2d1 22 //int start = 0;
zamatthews 3:dadfc15fc2d1 23 //int end = 0;
zamatthews 3:dadfc15fc2d1 24 //int rotationTime = 0;
zamatthews 3:dadfc15fc2d1 25 //float speed = 0;
zamatthews 3:dadfc15fc2d1 26 //int startFinish = 0;
zamatthews 3:dadfc15fc2d1 27 //int frame[RESWIDTH][RESHEIGHT];
zamatthews 0:b761ef827157 28
zamatthews 3:dadfc15fc2d1 29 /*
zamatthews 3:dadfc15fc2d1 30 int frame(){ //triggered by interrupt from camera or request frame from camera?
zamatthews 3:dadfc15fc2d1 31 //get all the pixels
zamatthews 3:dadfc15fc2d1 32 int i = 0;
zamatthews 3:dadfc15fc2d1 33 int j = 0;
zamatthews 3:dadfc15fc2d1 34 for(i; i<RESWIDTH; i++){
zamatthews 3:dadfc15fc2d1 35 for(j; j<RESHEIGHT; j++){
zamatthews 3:dadfc15fc2d1 36 frame[i][j] = ???;
zamatthews 3:dadfc15fc2d1 37 }//j for
zamatthews 3:dadfc15fc2d1 38 }//i for
zamatthews 3:dadfc15fc2d1 39 return frame;
zamatthews 3:dadfc15fc2d1 40 }
lmstthomas 4:f4852befd69c 41 */
zamatthews 3:dadfc15fc2d1 42
lmstthomas 4:f4852befd69c 43 void setAccel(float turnAngle){//, float speed){
zamatthews 3:dadfc15fc2d1 44 //ififififififif
lmstthomas 4:f4852befd69c 45 turnAngle -= STRAIGHT; //this gets a value from -0.00035 and +0.00035
lmstthomas 4:f4852befd69c 46 turnAngle = abs(turnAngle);
lmstthomas 4:f4852befd69c 47 float turnRatio = turnAngle/0.00035f;
zamatthews 5:137dfb3e692f 48 float newSpeed = (0.7*(1-turnRatio)/4)+0.3;
zamatthews 5:137dfb3e692f 49 motor_left.write(newSpeed);
zamatthews 5:137dfb3e692f 50 motor_right.write(newSpeed);
zamatthews 3:dadfc15fc2d1 51 }
zamatthews 3:dadfc15fc2d1 52
lmstthomas 4:f4852befd69c 53 void turnWheels(){//int[][] frame, float speed){
zamatthews 3:dadfc15fc2d1 54 //ififififififif
lmstthomas 4:f4852befd69c 55 for(float p=FULLLEFT; p<=FULLRIGHT; p += 0.00005f) {
lmstthomas 4:f4852befd69c 56 servo.pulsewidth(p);
lmstthomas 4:f4852befd69c 57 setAccel(p);
lmstthomas 4:f4852befd69c 58 wait(.1);
lmstthomas 4:f4852befd69c 59 }//for p increase
lmstthomas 4:f4852befd69c 60 for(float p=FULLRIGHT; p>=FULLLEFT; p -= 0.00005f) {
lmstthomas 4:f4852befd69c 61 servo.pulsewidth(p);
lmstthomas 4:f4852befd69c 62 setAccel(p);
lmstthomas 4:f4852befd69c 63 wait(.1);
lmstthomas 4:f4852befd69c 64 }//for p decrease
zamatthews 3:dadfc15fc2d1 65 }
zamatthews 3:dadfc15fc2d1 66
lmstthomas 4:f4852befd69c 67
lmstthomas 4:f4852befd69c 68 /*
zamatthews 3:dadfc15fc2d1 69 int startFinish(int[][] frame){
zamatthews 3:dadfc15fc2d1 70 //if start
zamatthews 3:dadfc15fc2d1 71 return 1;
zamatthews 3:dadfc15fc2d1 72 //if notFinished
zamatthews 3:dadfc15fc2d1 73 return 1;
zamatthews 3:dadfc15fc2d1 74 //if finished
zamatthews 3:dadfc15fc2d1 75 return 0;
zamatthews 3:dadfc15fc2d1 76 }
zamatthews 3:dadfc15fc2d1 77 */
zamatthews 2:0db7cc5ad6db 78
zamatthews 2:0db7cc5ad6db 79 int main() {
zamatthews 3:dadfc15fc2d1 80 //timer.start();
zamatthews 5:137dfb3e692f 81 motor_left.period_us(50);
zamatthews 5:137dfb3e692f 82 motor_right.period_us(50);
lmstthomas 4:f4852befd69c 83 //motor.write(0.25);
zamatthews 5:137dfb3e692f 84 DIR_R = 1;
zamatthews 2:0db7cc5ad6db 85 DIR_L = 0;
zamatthews 3:dadfc15fc2d1 86 servo.period(0.020f);
lmstthomas 4:f4852befd69c 87 //servo.pulsewidth(STRAIGHT);
zamatthews 2:0db7cc5ad6db 88 while(1){
zamatthews 3:dadfc15fc2d1 89 /*
zamatthews 3:dadfc15fc2d1 90 if(rotation){
zamatthews 3:dadfc15fc2d1 91 end = time.read_ms();
zamatthews 3:dadfc15fc2d1 92 rotationTime = end-start;
zamatthews 3:dadfc15fc2d1 93 speed = CIRCUFERENCE / rotationTime; //inches/ms
zamatthews 3:dadfc15fc2d1 94 speed *= 56.8182 //convert to miles/hour
zamatthews 3:dadfc15fc2d1 95 start = timer.read_ms();
zamatthews 3:dadfc15fc2d1 96 }
zamatthews 3:dadfc15fc2d1 97 //camera.rise(&frame); //idea is that camera tells MCU that it's sending a frame
zamatthews 3:dadfc15fc2d1 98 //frame = frame();
zamatthews 3:dadfc15fc2d1 99 if(startFinish(frame)){; //frame returns the result
zamatthews 3:dadfc15fc2d1 100 */
lmstthomas 4:f4852befd69c 101 turnWheels();//frame, speed); //includes setAccel();
lmstthomas 4:f4852befd69c 102 //setAccel(frame, speed);
zamatthews 3:dadfc15fc2d1 103 //} //end if(startFinish(frame))
zamatthews 3:dadfc15fc2d1 104 }//while 1
zamatthews 3:dadfc15fc2d1 105 }//main