Brendon Ky / Mbed 2 deprecated cs_335_speedometer

Dependencies:   mbed mbed-rtos

Files at this revision

API Documentation at this revision

Comitter:
bky
Date:
Tue Dec 01 09:08:37 2020 +0000
Parent:
13:a1a9f2282f15
Child:
15:e073df8f635b
Commit message:
created header file for 7 segment display driver

Changed in this revision

displayDriver.h Show annotated file Show diff for this revision Revisions of this file
inputHandler.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/displayDriver.h	Tue Dec 01 09:08:37 2020 +0000
@@ -0,0 +1,5 @@
+# ifndef DISPLAY_DRIVER_H
+# define DISPLAY_DRIVER_H
+void display(float);
+
+# endif
--- a/main.cpp	Tue Dec 01 05:17:25 2020 +0000
+++ b/main.cpp	Tue Dec 01 09:08:37 2020 +0000
@@ -1,81 +1,53 @@
 # include "mbed.h"
 # include "Timer.h"
 
-# include <stdlib.h>
 # include <time.h>
-# include <limits>
-# include <queue>
-
 # define NUM_HOLES 32
 # define CIRCUMFRENCE_CM 48.6946861
 
 # define LIGHT_SENSOR_PIN p15
-# define FLASH_THRESHOLD 0.97
+# define FLASH_THRESHOLD 0.02
+# define PERIOD_MS 500
 
 
 AnalogIn lightSensorVoltage(LIGHT_SENSOR_PIN);
 Serial pc(USBTX, USBRX);
 
-DigitalOut myled(LED1);
-
-int lastFlash = 0;
-float prevVoltReading = 0.0;
-float currVoltReading = 0.0;
-float miliPerRotation = std::numeric_limits<float>::max();
-
-//float getAverage(queue<float> q) {
-//printf("g");
-//    float sum = 0;
-//    while(!q.empty()) {
-//printf("h");
-//        sum += q.front();
-//        q.pop();
-//    }
-//    
-//    return sum / q.size();
-//}
-
 void sendFloat(float value) {
     for (int i=0; i<4; i++)
         pc.putc(*(((char*) &value)+i));
 }
 
-int main() {
-    Timer timer;
-    timer.start();
-    int currTime = 0;
-    int prevTime = 0;
+void displayThread() {
     
-    float currVelocity = 0;
-    float prevVelocity = 0;
-    
-    sendFloat(0);
-    while(1) {
-        currVoltReading = lightSensorVoltage.read();
+}
+
+int main() {
+    while(true) {
+        float minVoltage = 1.1; // voltage will never go above 1.0
+        int voltagePeaks = 0;
         
-        prevVelocity = currVelocity;
+        Timer t;
+        t.start();
         
-//printf("volt %f\n", currVoltReading);
-        if(currVoltReading - prevVoltReading > 0.02) {
-            currTime = timer.read_ms();
-//printf("currTime %i\n", currTime);
-//printf("prevTime %i\n", prevTime);
-            miliPerRotation = (currTime - prevTime) * NUM_HOLES;
-//printf("time diff %i\n", currTime - prevTime);
-//printf("MPRs %f\n", miliPerRotation);
-            
-            prevTime = currTime;
-            currVelocity = CIRCUMFRENCE_CM * 1000 / miliPerRotation;
+        while(t.read_ms() < PERIOD_MS) {
+            float currVoltage = lightSensorVoltage.read();
+            if(currVoltage < minVoltage) {
+                minVoltage = currVoltage;
+            } else if (currVoltage - minVoltage > FLASH_THRESHOLD) {
+                voltagePeaks++;
+                minVoltage = 1.1;
+            }
+            wait(0.01);
         }
         
-        if(currVelocity != 0 && currVelocity == prevVelocity) {
-            currVelocity = 0;    
-        }
+        t.stop();
         
-        sendFloat(currVelocity);
+        // calculate velocity
+        float velocity = (voltagePeaks * CIRCUMFRENCE_CM * 1000) / (NUM_HOLES * PERIOD_MS);
         
-//printf("velocity %f\n", velocity);
-        prevVoltReading = currVoltReading;
-        wait(0.05);
+        //send 
+        sendFloat(velocity);
     }
+    return 0;    
 }
\ No newline at end of file