CE201 Embedded : 2022-23 / Mbed 2 deprecated Car

Dependencies:   mbed

Committer:
fjwats
Date:
Thu Mar 02 15:01:36 2017 +0000
Revision:
5:66527172b136
Parent:
4:54544a7dcbe0
Child:
6:54991513b762
Update

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 4:54544a7dcbe0 26 std::string telemFile; // file 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 4:54544a7dcbe0 66 std::ofstream stream;
fjwats 4:54544a7dcbe0 67 stream.open(telemFile, std::ios::app);
fjwats 4:54544a7dcbe0 68 stream << "steer:" << data << " speed:" << speed << "\n";
fjwats 4:54544a7dcbe0 69 }
fjwats 4:54544a7dcbe0 70
fjwats 4:54544a7dcbe0 71 // Opens set file for logging, appends some data, then returns.
fjwats 4:54544a7dcbe0 72 // This method is only called for ambient temperature readings.
fjwats 4:54544a7dcbe0 73 void telemUpdate(float temp) {
fjwats 3:147e7a35d2c3 74 std::ofstream stream;
fjwats 3:147e7a35d2c3 75 stream.open(telemFile, std::ios::app);
fjwats 5:66527172b136 76 stream << "temp:" << temp << "\n";
fjwats 4:54544a7dcbe0 77 }
fjwats 4:54544a7dcbe0 78
fjwats 4:54544a7dcbe0 79 // Alters the cars steering angle based on the float passed to it.
fjwats 4:54544a7dcbe0 80 // Float s is valued between -1 and +1. ERRONEOUS VALUES ARE IGNORED.
fjwats 4:54544a7dcbe0 81 void turnWheels(float s) {
fjwats 4:54544a7dcbe0 82 if (s++>=0&&s<=2) {steer.pulsewidth(s/2000+0.001}} // This is Nicolae's code, simplified and included by Frank
fjwats 4:54544a7dcbe0 83 telemUpdate()
fjwats 4:54544a7dcbe0 84 }
fjwats 4:54544a7dcbe0 85
fjwats 4:54544a7dcbe0 86 // Alters the cars velocity based on the float passed to it.
fjwats 4:54544a7dcbe0 87 // Float s is valued between -1 and +1. ERRONEOUS VALUES ARE IGNORED.
fjwats 4:54544a7dcbe0 88 void setSpeed(float s) {
fjwats 4:54544a7dcbe0 89 if (s++>=0&&s<=2) {speed.pulsewidth(s/2000+0.001)} // THIS CODE IS NOT VERY GOOD and will not work without changes
fjwats 4:54544a7dcbe0 90 telemUpdate() // Someone who knows how PWM works - fix this please
fjwats 4:54544a7dcbe0 91 }
fjwats 5:66527172b136 92
fjwats 5:66527172b136 93
fjwats 5:66527172b136 94 int main() {
fjwats 5:66527172b136 95 int iCount = 0;
fjwats 5:66527172b136 96 int measured = 0;
fjwats 5:66527172b136 97
fjwats 5:66527172b136 98 while(iCount <= 5){
fjwats 5:66527172b136 99 setActiveUS(iCount);
fjwats 5:66527172b136 100 measured = getPing();
fjwats 5:66527172b136 101 rawUS_data[iCount] = measured;
fjwats 5:66527172b136 102 }
fjwats 5:66527172b136 103
fjwats 5:66527172b136 104 US1_mean[0]=rawUS_data[0];
fjwats 5:66527172b136 105 US2_mean[0]=rawUS_data[1];
fjwats 5:66527172b136 106 US3_mean[0]=rawUS_data[2];
fjwats 5:66527172b136 107 US4_mean[0]=rawUS_data[3];
fjwats 5:66527172b136 108 US5_mean[0]=rawUS_data[4];
fjwats 5:66527172b136 109
fjwats 5:66527172b136 110 }