CE201 Embedded : 2022-23 / Mbed 2 deprecated Car

Dependencies:   mbed

Committer:
fjwats
Date:
Thu Mar 02 15:37:30 2017 +0000
Revision:
6:54991513b762
Parent:
5:66527172b136
Program now compiles. woohoo!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
iainsc0574 0:6bf5faf294b7 1 #include "mbed.h"
fjwats 2:7cb9c966a781 2 #include <fstream>
iainsc0574 0:6bf5faf294b7 3
fjwats 1:832c213480a8 4 #define MAX 0x0A
iainsc0574 0:6bf5faf294b7 5
fjwats 4:54544a7dcbe0 6 DigitalOut led_1(LED1); // program running.
fjwats 4:54544a7dcbe0 7 DigitalOut led_2(LED2); // sensors operating.
fjwats 4:54544a7dcbe0 8 DigitalOut led_3(LED3); // is moving.
fjwats 4:54544a7dcbe0 9 DigitalOut led_4(LED4); // is complete.
fjwats 1:832c213480a8 10
fjwats 4:54544a7dcbe0 11 PwmOut steer(p21); // Pulse width modulation pins that control direction
fjwats 4:54544a7dcbe0 12 PwmOut speed(p22); // and speed
fjwats 4:54544a7dcbe0 13
fjwats 4:54544a7dcbe0 14 DigitalOut Bit1(p25); // multiplexor pins
fjwats 1:832c213480a8 15 DigitalOut Bit2(p24); //
fjwats 1:832c213480a8 16 DigitalOut Bit3(p23); //
iainsc0574 0:6bf5faf294b7 17
fjwats 4:54544a7dcbe0 18 int rawUS_data[5]={0,0,0,0,0}; // raw data{chan1,chan2,chan3,chan4,chan5}
fjwats 1:832c213480a8 19
fjwats 1:832c213480a8 20 int US1_mean[MAX]={0,0,0,0,0,0,0,0,0,0}; // Structures holding recently recorded distances for each respective
fjwats 1:832c213480a8 21 int US2_mean[MAX]={0,0,0,0,0,0,0,0,0,0}; // ultrasonic sensor.
iainsc0574 0:6bf5faf294b7 22 int US3_mean[MAX]={0,0,0,0,0,0,0,0,0,0};
iainsc0574 0:6bf5faf294b7 23 int US4_mean[MAX]={0,0,0,0,0,0,0,0,0,0};
iainsc0574 0:6bf5faf294b7 24 int US5_mean[MAX]={0,0,0,0,0,0,0,0,0,0};
iainsc0574 0:6bf5faf294b7 25
fjwats 6:54991513b762 26 std::ofstream stream ("DriveData.txt");; // file object for holding info about telem data gathered since last power on
fjwats 2:7cb9c966a781 27
iainsc0574 0:6bf5faf294b7 28 void setActiveUS(int chan);
fjwats 1:832c213480a8 29
iainsc0574 0:6bf5faf294b7 30 void setActiveUS(int chan){
iainsc0574 0:6bf5faf294b7 31 switch(chan){
iainsc0574 0:6bf5faf294b7 32 case 0:
iainsc0574 0:6bf5faf294b7 33 //ultrasonic 1
iainsc0574 0:6bf5faf294b7 34 break;
iainsc0574 0:6bf5faf294b7 35
iainsc0574 0:6bf5faf294b7 36 case 1:
iainsc0574 0:6bf5faf294b7 37 //ultrasonic 2
iainsc0574 0:6bf5faf294b7 38 break;
iainsc0574 0:6bf5faf294b7 39
iainsc0574 0:6bf5faf294b7 40 case 2:
iainsc0574 0:6bf5faf294b7 41 //ultrasonic 3
iainsc0574 0:6bf5faf294b7 42 break;
iainsc0574 0:6bf5faf294b7 43
iainsc0574 0:6bf5faf294b7 44 case 3:
iainsc0574 0:6bf5faf294b7 45 //ultrasonic 4
iainsc0574 0:6bf5faf294b7 46 break;
iainsc0574 0:6bf5faf294b7 47
iainsc0574 0:6bf5faf294b7 48 case 4:
iainsc0574 0:6bf5faf294b7 49 //ultrasonic 5
iainsc0574 0:6bf5faf294b7 50 break;
iainsc0574 0:6bf5faf294b7 51
iainsc0574 0:6bf5faf294b7 52 }
fjwats 1:832c213480a8 53 }
iainsc0574 0:6bf5faf294b7 54
fjwats 4:54544a7dcbe0 55 int getPing(){
iainsc0574 0:6bf5faf294b7 56 int result=0;
iainsc0574 0:6bf5faf294b7 57 //write ultrasonic code
iainsc0574 0:6bf5faf294b7 58 //return measured value
iainsc0574 0:6bf5faf294b7 59
fjwats 1:832c213480a8 60 return result; //should just do "return [operation that gives result];" for efficiency
fjwats 1:832c213480a8 61 }
fjwats 1:832c213480a8 62
fjwats 3:147e7a35d2c3 63 // Opens set file for logging, appends some data, then returns.
fjwats 4:54544a7dcbe0 64 // This method is only called for speed and heading changes.
fjwats 4:54544a7dcbe0 65 void telemUpdate(float steer, float speed) {
fjwats 6:54991513b762 66 stream << "steer:" << steer << " speed:" << speed << "\n";
fjwats 4:54544a7dcbe0 67 }
fjwats 4:54544a7dcbe0 68
fjwats 4:54544a7dcbe0 69 // Opens set file for logging, appends some data, then returns.
fjwats 4:54544a7dcbe0 70 // This method is only called for ambient temperature readings.
fjwats 4:54544a7dcbe0 71 void telemUpdate(float temp) {
fjwats 5:66527172b136 72 stream << "temp:" << temp << "\n";
fjwats 4:54544a7dcbe0 73 }
fjwats 4:54544a7dcbe0 74
fjwats 4:54544a7dcbe0 75 // Alters the cars steering angle based on the float passed to it.
fjwats 4:54544a7dcbe0 76 // Float s is valued between -1 and +1. ERRONEOUS VALUES ARE IGNORED.
fjwats 4:54544a7dcbe0 77 void turnWheels(float s) {
fjwats 6:54991513b762 78 if (s++>=0&&s<=2) {
fjwats 6:54991513b762 79 steer.pulsewidth(s/2000+0.001);
fjwats 6:54991513b762 80 } // This is Nicolae's code, simplified and included by Frank
fjwats 6:54991513b762 81 telemUpdate(0.0);
fjwats 4:54544a7dcbe0 82 }
fjwats 4:54544a7dcbe0 83
fjwats 4:54544a7dcbe0 84 // Alters the cars velocity based on the float passed to it.
fjwats 4:54544a7dcbe0 85 // Float s is valued between -1 and +1. ERRONEOUS VALUES ARE IGNORED.
fjwats 4:54544a7dcbe0 86 void setSpeed(float s) {
fjwats 6:54991513b762 87 if (s++>=0&&s<=2) {speed.pulsewidth(s/2000+0.001);} // THIS CODE IS NOT VERY GOOD and will not work without changes
fjwats 6:54991513b762 88 telemUpdate(0.0); // Someone who knows how PWM works - fix this please
fjwats 4:54544a7dcbe0 89 }
fjwats 5:66527172b136 90
fjwats 5:66527172b136 91
fjwats 5:66527172b136 92 int main() {
fjwats 5:66527172b136 93 int iCount = 0;
fjwats 5:66527172b136 94 int measured = 0;
fjwats 5:66527172b136 95
fjwats 5:66527172b136 96 while(iCount <= 5){
fjwats 5:66527172b136 97 setActiveUS(iCount);
fjwats 5:66527172b136 98 measured = getPing();
fjwats 5:66527172b136 99 rawUS_data[iCount] = measured;
fjwats 5:66527172b136 100 }
fjwats 5:66527172b136 101
fjwats 5:66527172b136 102 US1_mean[0]=rawUS_data[0];
fjwats 5:66527172b136 103 US2_mean[0]=rawUS_data[1];
fjwats 5:66527172b136 104 US3_mean[0]=rawUS_data[2];
fjwats 5:66527172b136 105 US4_mean[0]=rawUS_data[3];
fjwats 5:66527172b136 106 US5_mean[0]=rawUS_data[4];
fjwats 5:66527172b136 107
fjwats 5:66527172b136 108 }