Brendon Ky / Mbed 2 deprecated cs_335_speedometer

Dependencies:   mbed mbed-rtos

Committer:
bky
Date:
Tue Dec 01 05:17:25 2020 +0000
Revision:
13:a1a9f2282f15
Parent:
12:cb9118a081fa
Child:
14:8ceaa97cc85c
Unchanged velocity now is understood to be 0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bky 10:8d86e59fb408 1 # include "mbed.h"
bky 10:8d86e59fb408 2 # include "Timer.h"
bky 9:b7e8d0372f53 3
bky 10:8d86e59fb408 4 # include <stdlib.h>
bky 10:8d86e59fb408 5 # include <time.h>
bky 11:dd860c2e12ec 6 # include <limits>
bky 11:dd860c2e12ec 7 # include <queue>
bky 10:8d86e59fb408 8
bky 10:8d86e59fb408 9 # define NUM_HOLES 32
bky 10:8d86e59fb408 10 # define CIRCUMFRENCE_CM 48.6946861
bky 9:b7e8d0372f53 11
bky 9:b7e8d0372f53 12 # define LIGHT_SENSOR_PIN p15
bky 11:dd860c2e12ec 13 # define FLASH_THRESHOLD 0.97
bky 9:b7e8d0372f53 14
bky 9:b7e8d0372f53 15
bky 9:b7e8d0372f53 16 AnalogIn lightSensorVoltage(LIGHT_SENSOR_PIN);
bky 9:b7e8d0372f53 17 Serial pc(USBTX, USBRX);
bky 0:d724bf9c4031 18
bky 0:d724bf9c4031 19 DigitalOut myled(LED1);
bky 0:d724bf9c4031 20
bky 10:8d86e59fb408 21 int lastFlash = 0;
bky 10:8d86e59fb408 22 float prevVoltReading = 0.0;
bky 10:8d86e59fb408 23 float currVoltReading = 0.0;
bky 11:dd860c2e12ec 24 float miliPerRotation = std::numeric_limits<float>::max();
bky 11:dd860c2e12ec 25
bky 11:dd860c2e12ec 26 //float getAverage(queue<float> q) {
bky 11:dd860c2e12ec 27 //printf("g");
bky 11:dd860c2e12ec 28 // float sum = 0;
bky 11:dd860c2e12ec 29 // while(!q.empty()) {
bky 11:dd860c2e12ec 30 //printf("h");
bky 11:dd860c2e12ec 31 // sum += q.front();
bky 11:dd860c2e12ec 32 // q.pop();
bky 11:dd860c2e12ec 33 // }
bky 11:dd860c2e12ec 34 //
bky 11:dd860c2e12ec 35 // return sum / q.size();
bky 11:dd860c2e12ec 36 //}
bky 9:b7e8d0372f53 37
bky 9:b7e8d0372f53 38 void sendFloat(float value) {
bky 9:b7e8d0372f53 39 for (int i=0; i<4; i++)
bky 9:b7e8d0372f53 40 pc.putc(*(((char*) &value)+i));
bky 9:b7e8d0372f53 41 }
bky 9:b7e8d0372f53 42
bky 0:d724bf9c4031 43 int main() {
bky 10:8d86e59fb408 44 Timer timer;
bky 10:8d86e59fb408 45 timer.start();
bky 10:8d86e59fb408 46 int currTime = 0;
bky 10:8d86e59fb408 47 int prevTime = 0;
bky 10:8d86e59fb408 48
bky 13:a1a9f2282f15 49 float currVelocity = 0;
bky 13:a1a9f2282f15 50 float prevVelocity = 0;
bky 10:8d86e59fb408 51
bky 11:dd860c2e12ec 52 sendFloat(0);
bky 7:12eed49f95fc 53 while(1) {
bky 10:8d86e59fb408 54 currVoltReading = lightSensorVoltage.read();
bky 13:a1a9f2282f15 55
bky 13:a1a9f2282f15 56 prevVelocity = currVelocity;
bky 13:a1a9f2282f15 57
bky 11:dd860c2e12ec 58 //printf("volt %f\n", currVoltReading);
bky 11:dd860c2e12ec 59 if(currVoltReading - prevVoltReading > 0.02) {
bky 10:8d86e59fb408 60 currTime = timer.read_ms();
bky 11:dd860c2e12ec 61 //printf("currTime %i\n", currTime);
bky 11:dd860c2e12ec 62 //printf("prevTime %i\n", prevTime);
bky 11:dd860c2e12ec 63 miliPerRotation = (currTime - prevTime) * NUM_HOLES;
bky 11:dd860c2e12ec 64 //printf("time diff %i\n", currTime - prevTime);
bky 11:dd860c2e12ec 65 //printf("MPRs %f\n", miliPerRotation);
bky 10:8d86e59fb408 66
bky 10:8d86e59fb408 67 prevTime = currTime;
bky 13:a1a9f2282f15 68 currVelocity = CIRCUMFRENCE_CM * 1000 / miliPerRotation;
bky 10:8d86e59fb408 69 }
bky 13:a1a9f2282f15 70
bky 13:a1a9f2282f15 71 if(currVelocity != 0 && currVelocity == prevVelocity) {
bky 13:a1a9f2282f15 72 currVelocity = 0;
bky 13:a1a9f2282f15 73 }
bky 13:a1a9f2282f15 74
bky 13:a1a9f2282f15 75 sendFloat(currVelocity);
bky 13:a1a9f2282f15 76
bky 11:dd860c2e12ec 77 //printf("velocity %f\n", velocity);
bky 10:8d86e59fb408 78 prevVoltReading = currVoltReading;
bky 12:cb9118a081fa 79 wait(0.05);
bky 7:12eed49f95fc 80 }
bky 10:8d86e59fb408 81 }