Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@6:54991513b762, 2017-03-02 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |