CE201 Embedded : 2022-23 / Mbed 2 deprecated Car

Dependencies:   mbed

Committer:
fjwats
Date:
Fri Feb 17 01:34:30 2017 +0000
Revision:
4:54544a7dcbe0
Parent:
3:147e7a35d2c3
Child:
5:66527172b136
- telemUpdate overloaded into one for Temperature sensor and one for Steering/speed; - turnWheels optimised; - setSpeed added (badly)

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
fjwats 4:54544a7dcbe0 30 int getPing();
iainsc0574 0:6bf5faf294b7 31
iainsc0574 0:6bf5faf294b7 32 int main() {
iainsc0574 0:6bf5faf294b7 33 int iCount = 0;
iainsc0574 0:6bf5faf294b7 34 int measured = 0;
fjwats 1:832c213480a8 35
iainsc0574 0:6bf5faf294b7 36 while(iCount <= 5){
iainsc0574 0:6bf5faf294b7 37 setActiveUS(iCount);
iainsc0574 0:6bf5faf294b7 38 measured = getPing();
iainsc0574 0:6bf5faf294b7 39 rawUS_data[iCount] = measured;
fjwats 1:832c213480a8 40 }
fjwats 4:54544a7dcbe0 41
iainsc0574 0:6bf5faf294b7 42 US1_mean[0]=rawUS_data[0];
iainsc0574 0:6bf5faf294b7 43 US2_mean[0]=rawUS_data[1];
iainsc0574 0:6bf5faf294b7 44 US3_mean[0]=rawUS_data[2];
iainsc0574 0:6bf5faf294b7 45 US4_mean[0]=rawUS_data[3];
iainsc0574 0:6bf5faf294b7 46 US5_mean[0]=rawUS_data[4];
fjwats 1:832c213480a8 47
iainsc0574 0:6bf5faf294b7 48 }
iainsc0574 0:6bf5faf294b7 49
iainsc0574 0:6bf5faf294b7 50 void setActiveUS(int chan){
iainsc0574 0:6bf5faf294b7 51 switch(chan){
iainsc0574 0:6bf5faf294b7 52 case 0:
iainsc0574 0:6bf5faf294b7 53 //ultrasonic 1
iainsc0574 0:6bf5faf294b7 54 break;
iainsc0574 0:6bf5faf294b7 55
iainsc0574 0:6bf5faf294b7 56 case 1:
iainsc0574 0:6bf5faf294b7 57 //ultrasonic 2
iainsc0574 0:6bf5faf294b7 58 break;
iainsc0574 0:6bf5faf294b7 59
iainsc0574 0:6bf5faf294b7 60 case 2:
iainsc0574 0:6bf5faf294b7 61 //ultrasonic 3
iainsc0574 0:6bf5faf294b7 62 break;
iainsc0574 0:6bf5faf294b7 63
iainsc0574 0:6bf5faf294b7 64 case 3:
iainsc0574 0:6bf5faf294b7 65 //ultrasonic 4
iainsc0574 0:6bf5faf294b7 66 break;
iainsc0574 0:6bf5faf294b7 67
iainsc0574 0:6bf5faf294b7 68 case 4:
iainsc0574 0:6bf5faf294b7 69 //ultrasonic 5
iainsc0574 0:6bf5faf294b7 70 break;
iainsc0574 0:6bf5faf294b7 71
iainsc0574 0:6bf5faf294b7 72 }
fjwats 1:832c213480a8 73 }
iainsc0574 0:6bf5faf294b7 74
fjwats 4:54544a7dcbe0 75 int getPing(){
iainsc0574 0:6bf5faf294b7 76 int result=0;
iainsc0574 0:6bf5faf294b7 77 //write ultrasonic code
iainsc0574 0:6bf5faf294b7 78 //return measured value
iainsc0574 0:6bf5faf294b7 79
fjwats 1:832c213480a8 80 return result; //should just do "return [operation that gives result];" for efficiency
fjwats 1:832c213480a8 81 }
fjwats 1:832c213480a8 82
fjwats 3:147e7a35d2c3 83 // Opens set file for logging, appends some data, then returns.
fjwats 4:54544a7dcbe0 84 // This method is only called for speed and heading changes.
fjwats 4:54544a7dcbe0 85 void telemUpdate(float steer, float speed) {
fjwats 4:54544a7dcbe0 86 std::ofstream stream;
fjwats 4:54544a7dcbe0 87 stream.open(telemFile, std::ios::app);
fjwats 4:54544a7dcbe0 88 stream << "steer:" << data << " speed:" << speed << "\n";
fjwats 4:54544a7dcbe0 89 }
fjwats 4:54544a7dcbe0 90
fjwats 4:54544a7dcbe0 91 // Opens set file for logging, appends some data, then returns.
fjwats 4:54544a7dcbe0 92 // This method is only called for ambient temperature readings.
fjwats 4:54544a7dcbe0 93 void telemUpdate(float temp) {
fjwats 3:147e7a35d2c3 94 std::ofstream stream;
fjwats 3:147e7a35d2c3 95 stream.open(telemFile, std::ios::app);
fjwats 4:54544a7dcbe0 96 stream << "temp: " << temp << "\n";
fjwats 4:54544a7dcbe0 97 }
fjwats 4:54544a7dcbe0 98
fjwats 4:54544a7dcbe0 99 // Alters the cars steering angle based on the float passed to it.
fjwats 4:54544a7dcbe0 100 // Float s is valued between -1 and +1. ERRONEOUS VALUES ARE IGNORED.
fjwats 4:54544a7dcbe0 101 void turnWheels(float s) {
fjwats 4:54544a7dcbe0 102 if (s++>=0&&s<=2) {steer.pulsewidth(s/2000+0.001}} // This is Nicolae's code, simplified and included by Frank
fjwats 4:54544a7dcbe0 103 telemUpdate()
fjwats 4:54544a7dcbe0 104 }
fjwats 4:54544a7dcbe0 105
fjwats 4:54544a7dcbe0 106 // Alters the cars velocity based on the float passed to it.
fjwats 4:54544a7dcbe0 107 // Float s is valued between -1 and +1. ERRONEOUS VALUES ARE IGNORED.
fjwats 4:54544a7dcbe0 108 void setSpeed(float s) {
fjwats 4:54544a7dcbe0 109 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 110 telemUpdate() // Someone who knows how PWM works - fix this please
fjwats 4:54544a7dcbe0 111 }