Brendon Ky
/
cs_335_speedometer
Speedometer for CS 335 final project.
main.cpp@18:ef0569bea7e9, 2020-12-01 (annotated)
- Committer:
- bky
- Date:
- Tue Dec 01 12:27:22 2020 +0000
- Revision:
- 18:ef0569bea7e9
- Parent:
- 16:def6abcb4294
Dobby is a free elf
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bky | 10:8d86e59fb408 | 1 | # include "mbed.h" |
bky | 16:def6abcb4294 | 2 | # include "rtos.h" |
bky | 10:8d86e59fb408 | 3 | # include "Timer.h" |
bky | 16:def6abcb4294 | 4 | # include "displayDriver.h" |
bky | 9:b7e8d0372f53 | 5 | |
bky | 10:8d86e59fb408 | 6 | # include <time.h> |
bky | 10:8d86e59fb408 | 7 | # define NUM_HOLES 32 |
bky | 10:8d86e59fb408 | 8 | # define CIRCUMFRENCE_CM 48.6946861 |
bky | 9:b7e8d0372f53 | 9 | |
bky | 18:ef0569bea7e9 | 10 | # define LIGHT_SENSOR_PIN p18 |
bky | 14:8ceaa97cc85c | 11 | # define FLASH_THRESHOLD 0.02 |
bky | 14:8ceaa97cc85c | 12 | # define PERIOD_MS 500 |
bky | 16:def6abcb4294 | 13 | # define RUNTIME 120000 // 2 mins |
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 | 16:def6abcb4294 | 19 | float velocity = 0.0; // used by display thread |
bky | 16:def6abcb4294 | 20 | |
bky | 9:b7e8d0372f53 | 21 | void sendFloat(float value) { |
bky | 9:b7e8d0372f53 | 22 | for (int i=0; i<4; i++) |
bky | 9:b7e8d0372f53 | 23 | pc.putc(*(((char*) &value)+i)); |
bky | 9:b7e8d0372f53 | 24 | } |
bky | 9:b7e8d0372f53 | 25 | |
bky | 16:def6abcb4294 | 26 | void displayThread_cb() { |
bky | 16:def6abcb4294 | 27 | while(velocity >= 0) { |
bky | 18:ef0569bea7e9 | 28 | display_num(velocity); |
bky | 16:def6abcb4294 | 29 | } |
bky | 16:def6abcb4294 | 30 | return; |
bky | 14:8ceaa97cc85c | 31 | } |
bky | 14:8ceaa97cc85c | 32 | |
bky | 14:8ceaa97cc85c | 33 | int main() { |
bky | 16:def6abcb4294 | 34 | Thread displayThread; |
bky | 16:def6abcb4294 | 35 | displayThread.start(displayThread_cb); |
bky | 16:def6abcb4294 | 36 | |
bky | 16:def6abcb4294 | 37 | Timer t0; |
bky | 16:def6abcb4294 | 38 | t0.start(); |
bky | 16:def6abcb4294 | 39 | |
bky | 16:def6abcb4294 | 40 | while(t0.read_ms() < RUNTIME) { |
bky | 14:8ceaa97cc85c | 41 | float minVoltage = 1.1; // voltage will never go above 1.0 |
bky | 14:8ceaa97cc85c | 42 | int voltagePeaks = 0; |
bky | 13:a1a9f2282f15 | 43 | |
bky | 16:def6abcb4294 | 44 | Timer t1; |
bky | 16:def6abcb4294 | 45 | t1.start(); |
bky | 13:a1a9f2282f15 | 46 | |
bky | 16:def6abcb4294 | 47 | while(t1.read_ms() < PERIOD_MS) { |
bky | 14:8ceaa97cc85c | 48 | float currVoltage = lightSensorVoltage.read(); |
bky | 14:8ceaa97cc85c | 49 | if(currVoltage < minVoltage) { |
bky | 14:8ceaa97cc85c | 50 | minVoltage = currVoltage; |
bky | 14:8ceaa97cc85c | 51 | } else if (currVoltage - minVoltage > FLASH_THRESHOLD) { |
bky | 14:8ceaa97cc85c | 52 | voltagePeaks++; |
bky | 14:8ceaa97cc85c | 53 | minVoltage = 1.1; |
bky | 14:8ceaa97cc85c | 54 | } |
bky | 14:8ceaa97cc85c | 55 | wait(0.01); |
bky | 10:8d86e59fb408 | 56 | } |
bky | 13:a1a9f2282f15 | 57 | |
bky | 16:def6abcb4294 | 58 | t1.stop(); |
bky | 13:a1a9f2282f15 | 59 | |
bky | 14:8ceaa97cc85c | 60 | // calculate velocity |
bky | 16:def6abcb4294 | 61 | velocity = (voltagePeaks * CIRCUMFRENCE_CM * 1000) / (NUM_HOLES * PERIOD_MS); |
bky | 13:a1a9f2282f15 | 62 | |
bky | 14:8ceaa97cc85c | 63 | //send |
bky | 14:8ceaa97cc85c | 64 | sendFloat(velocity); |
bky | 7:12eed49f95fc | 65 | } |
bky | 16:def6abcb4294 | 66 | |
bky | 16:def6abcb4294 | 67 | t0.stop(); |
bky | 16:def6abcb4294 | 68 | velocity = -1; // tells the display thread to stop |
bky | 16:def6abcb4294 | 69 | displayThread.join(); |
bky | 16:def6abcb4294 | 70 | |
bky | 14:8ceaa97cc85c | 71 | return 0; |
bky | 10:8d86e59fb408 | 72 | } |