Code for Technion Formula car sensors reader
Dependencies: mbed Buffer FATFileSystem
Fork of SX1272PingPong by
This is code is part of a Technion course project in advanced IoT, implementing a device to read and transmit sensors data from a Formula racing car built by students at Technion - Israel Institute of Technology.
How to install
- Create an account on Mbed: https://os.mbed.com/account/signup/
- Import project into Compiler
- In the Program Workspace select "Formula_Nucleo_Reader"
- Select a Platform like so:
- Click button at top-left
- Add Board
- Search "NUCLEO F103RB" and then "Add to your Mbed Compiler"
- Finally click "Compile", if the build was successful, the binary would download automatically
- To install it on device simply plug it in to a PC, open device drive and drag then drop binary file in it
main.cpp@15:2e0d977dbb31, 2018-05-17 (annotated)
- Committer:
- wardm
- Date:
- Thu May 17 20:37:41 2018 +0000
- Revision:
- 15:2e0d977dbb31
- Parent:
- 14:ab6eecd44b7a
V1.0.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GregCr | 0:1ed39951ab7b | 1 | #include "mbed.h" |
GregCr | 4:5ece30264cd9 | 2 | #include "main.h" |
wardm | 15:2e0d977dbb31 | 3 | #include "string.h" |
GregCr | 13:edb9b443c1dd | 4 | #include "sx1272-hal.h" |
wardm | 15:2e0d977dbb31 | 5 | #include "DS3231.h" |
wardm | 15:2e0d977dbb31 | 6 | #include "LSM303DLHC.h" |
wardm | 15:2e0d977dbb31 | 7 | #include "SDFileSystem.h" |
wardm | 15:2e0d977dbb31 | 8 | // #include "EncoderCounter.h" |
wardm | 15:2e0d977dbb31 | 9 | |
wardm | 15:2e0d977dbb31 | 10 | /* |
wardm | 15:2e0d977dbb31 | 11 | * Technion - Formula Car Telemetry |
wardm | 15:2e0d977dbb31 | 12 | * Part 1: Reading data signals from the car sensors and broadcasting them |
wardm | 15:2e0d977dbb31 | 13 | */ |
GregCr | 0:1ed39951ab7b | 14 | |
GregCr | 0:1ed39951ab7b | 15 | /* Set this flag to '1' to display debug messages on the console */ |
GregCr | 13:edb9b443c1dd | 16 | #define DEBUG_MESSAGE 1 |
GregCr | 0:1ed39951ab7b | 17 | |
GregCr | 0:1ed39951ab7b | 18 | #define BUFFER_SIZE 32 // Define the payload size here |
GregCr | 0:1ed39951ab7b | 19 | |
GregCr | 8:f956dee63a56 | 20 | #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) ) |
mluis | 14:ab6eecd44b7a | 21 | DigitalOut led( LED2 ); |
GregCr | 3:8b9e2a4df4b5 | 22 | #else |
mluis | 14:ab6eecd44b7a | 23 | DigitalOut led( LED1 ); |
GregCr | 3:8b9e2a4df4b5 | 24 | #endif |
GregCr | 3:8b9e2a4df4b5 | 25 | |
mluis | 14:ab6eecd44b7a | 26 | int main( void ) |
GregCr | 0:1ed39951ab7b | 27 | { |
wardm | 15:2e0d977dbb31 | 28 | // ENCODER enc(1); |
wardm | 15:2e0d977dbb31 | 29 | // int x = enc.XAxisGetCount(); |
wardm | 15:2e0d977dbb31 | 30 | AnalogIn sus_rf(PA_0); |
wardm | 15:2e0d977dbb31 | 31 | AnalogIn sus_rr(PA_1); |
wardm | 15:2e0d977dbb31 | 32 | AnalogIn sus_lf(PA_4); // check if connected |
wardm | 15:2e0d977dbb31 | 33 | AnalogIn sus_lr(PB_0); |
wardm | 15:2e0d977dbb31 | 34 | AnalogIn wheel_ang(PC_1); |
wardm | 15:2e0d977dbb31 | 35 | AnalogIn front_brake(PC_0); |
wardm | 15:2e0d977dbb31 | 36 | AnalogIn rear_brake(PC_3); // check if connected |
wardm | 15:2e0d977dbb31 | 37 | DS3231 TC(PB_7,PB_6); |
wardm | 15:2e0d977dbb31 | 38 | |
wardm | 15:2e0d977dbb31 | 39 | //PinName mosi, PinName miso, PinName sclk, PinName cs |
wardm | 15:2e0d977dbb31 | 40 | SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd"); |
wardm | 15:2e0d977dbb31 | 41 | sd.mount(); |
wardm | 15:2e0d977dbb31 | 42 | |
wardm | 15:2e0d977dbb31 | 43 | FILE *fp = fopen("/sd/formola_run.csv", "w"); |
wardm | 15:2e0d977dbb31 | 44 | |
wardm | 15:2e0d977dbb31 | 45 | LSM303DLHC lsm303(PB_11, PB_10); |
wardm | 15:2e0d977dbb31 | 46 | |
wardm | 15:2e0d977dbb31 | 47 | // Real Time Clock |
wardm | 15:2e0d977dbb31 | 48 | int year = 0, month = 0, dayOfWeek = 0, date = 0, hours = 0, min = 0, sec = 0; |
wardm | 15:2e0d977dbb31 | 49 | TC.readDateTime(&dayOfWeek, &date, &month, &year, &hours, &min, &sec); |
wardm | 15:2e0d977dbb31 | 50 | |
wardm | 15:2e0d977dbb31 | 51 | BufferedSerial* ser = new BufferedSerial(USBTX,USBRX); |
wardm | 15:2e0d977dbb31 | 52 | ser->baud(115200*2); |
wardm | 15:2e0d977dbb31 | 53 | ser->format(8); |
wardm | 15:2e0d977dbb31 | 54 | |
wardm | 15:2e0d977dbb31 | 55 | fprintf(fp, "dayOfWeek: %d,date %d,month: %d,year: %d,hours: %d,minutes: %d,sec: %d\r\n", dayOfWeek,date,month,year,hours,min,sec); |
wardm | 15:2e0d977dbb31 | 56 | ser->printf("dayOfWeek: %d,date %d,month: %d,year: %d,hours: %d,minutes: %d,sec: %d\r\n", dayOfWeek,date,month,year,hours,min,sec); |
wardm | 15:2e0d977dbb31 | 57 | |
wardm | 15:2e0d977dbb31 | 58 | fprintf(fp, "sus_rf,sus_rr,sus_lf,sus_lr,wheel_ang,front_brake,accx,accy \r\n"); |
wardm | 15:2e0d977dbb31 | 59 | ser->printf("sus_rf,sus_rr,sus_lf,sus_lr,wheel_ang,front_brake,accx,accy \r\n"); |
wardm | 15:2e0d977dbb31 | 60 | |
wardm | 15:2e0d977dbb31 | 61 | |
wardm | 15:2e0d977dbb31 | 62 | |
wardm | 15:2e0d977dbb31 | 63 | while(1){ |
wardm | 15:2e0d977dbb31 | 64 | float accelReading[3] = {0.0, 0.0, 0.0}; |
wardm | 15:2e0d977dbb31 | 65 | lsm303.GetAcc(accelReading); |
wardm | 15:2e0d977dbb31 | 66 | |
wardm | 15:2e0d977dbb31 | 67 | ser->printf("%f,%f,%f,%f,%f,%f,%f,%f\n", sus_rf.read(), sus_rr.read(), |
wardm | 15:2e0d977dbb31 | 68 | sus_lf.read(), sus_lr.read(), wheel_ang.read(), front_brake.read(), |
wardm | 15:2e0d977dbb31 | 69 | rear_brake.read(), accelReading[0], accelReading[1]); |
wardm | 15:2e0d977dbb31 | 70 | |
wardm | 15:2e0d977dbb31 | 71 | wait(1); |
GregCr | 2:59e108728d71 | 72 | } |
wardm | 15:2e0d977dbb31 | 73 | |
GregCr | 0:1ed39951ab7b | 74 | } |