Code for Technion Formula car sensors reader

Dependencies:   mbed Buffer FATFileSystem

Fork of SX1272PingPong by Semtech

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:
  1. Click button at top-left
  2. Add Board
  3. 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
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?

UserRevisionLine numberNew 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 }