sdfd
Dependencies: BNO055 GPS IntegrationCAN SD_CARD_TWO mbed
Fork of MAIN_UNIT_FSRA_test by
main.cpp
- Committer:
- nemanja1994
- Date:
- 2018-06-24
- Revision:
- 12:3c500a06c5f3
- Parent:
- 10:2e912e37ee6d
File content as of revision 12:3c500a06c5f3:
/*------------------LIBS------------------*/ #include "mbed.h" #include "BNO055.h" #include "GPS.h" #include "SDBlockDevice.h" #include "FATFileSystem.h" #include "sample_hardware.hpp" #include "CAN_library.h" #include <string> /*---------------DATA TYPES---------------*/ //GPS GPS gps(PC_6, PC_7); int NMEA_TYPE = 0; //10DOF BNO055 imu(PB_9, PB_8); //DEBUG SERIAL Serial pc(USBTX, USBRX, 57600); //SD Card Object SDBlockDevice sd(PB_5, PB_4, PB_3, PA_4); //CAN CAN can(PD_0, PD_1, 1000000); //tRF Serial tRF(PC_12, PD_2, 19200); //CANMsg CANMessage msgDTA1; // RPM, TPS %, Water temp C, Air temp C CANMessage msgDTA2; // MAP Kpa, Lambda x1000, KPH x10, Oil P Kpa CANMessage msgDTA3; // Fuel P Kpa, Oil temp C, Volts x10, Fuel Con. L/Hr x10 CANMessage msgDTA4; // Gear, Advance Deg x10, Injection ms x100, Fuel Con L/100km x10 CANMessage msgDTA5; // Ana1 mV, Ana2 mV, Ana3 mV, Cam Advance x10 CANMessage msgDTA6; // Cam Targ x10, Cam PWM x10, Crank Errors, Cam Errors CANMessage msgLVDTFront; // Left, Right, Steering Wheel CANMessage msgLVDTRear; // Left, Right CANMessage msgBrakes; // Brake system preassure, Braking On/Off CANMessage msgKm; // KM CANMessage msgGPS; // GPS position data CANMessage msgGForce; // Accel data CANMessage msgGyro; // Gyro data CANMessage msgTest; char* temp_string; // Temp data char* msgGyro1; // Temp data char* msgGForce1; // Temp data char* msgGps1; int CANlen = 0; //Some stuff for CAN // Variables received from DTA, LVDTs and brakes uint16_t Steer0, Rpm0=0,Speed0=0,Gear0=0,Water_Temp0=0,Oil_Temp0=0,TPS0=0,Brakes0=0,Oil_P0=0,MAP0=0,Air_Temp0=0,Lambda0=0,Volts0=0,Crank0=0,BF_Oil_P0,BR_Oil_P0; uint16_t Steer, Rpm=0,Speed=0,Gear=0,Water_Temp=0,Oil_Temp=0,TPS=0,Brakes=0,Oil_P=0,MAP=0,Air_Temp=0,Lambda=0,Volts=0,Crank=0,BF_Oil_P,BR_Oil_P; int FL_LVDT0=0,FR_LVDT0=0,RL_LVDT0=0,RR_LVDT0=0,FL_LVDT=0,FR_LVDT=0,RL_LVDT=0,RR_LVDT=0; //Referrent LVDT values. First received value is referrent. int FL_LVDT_Ref,FR_LVDT_Ref,RL_LVDT_Ref,RR_LVDT_Ref; uint16_t rx_flag=0x0000; // Receive specific CAN data message uint8_t lvdtref=0x0F; // Flag if refferent LVDT value is received (first received LVDT value, 1=no, 0=yes). From highest to lowest bit: LL,LR,RL,RR. float kilometraza; /*-----------tRF Send Telemetry-----------*/ void tRF_sendCAN(CANMessage SendMe) { tRF.printf("S%x%02x%02x%02x%02x%02x%02x%02x%02x\n", SendMe.id, SendMe.data[1],SendMe.data[0],SendMe.data[3],SendMe.data[2],SendMe.data[5],SendMe.data[4],SendMe.data[7],SendMe.data[6]); } /*------------------MAIN------------------*/ int main() { // Attach interrupt function to CAN RX can.attach(&CANMsgReceive,CAN::RxIrq); //10DOF INIT imu.reset(); // pc.printf("RESET DONE!"); while(!imu.check()){ //pc.printf("ejbg"); } //pc.printf("CHECK DONE!"); //10DOF SET MODE AND CALIBRATE imu.setmode(OPERATION_MODE_IMUPLUS); imu.get_calib(); // Display sensor information /*pc.printf("BNO055 found\r\n\r\n"); pc.printf("Chip ID: %0z\r\n",imu.ID.id); pc.printf("Accelerometer ID: %0z\r\n",imu.ID.accel); pc.printf("Gyroscope ID: %0z\r\n",imu.ID.gyro); pc.printf("Magnetometer ID: %0z\r\n\r\n",imu.ID.mag); pc.printf("Firmware version v%d.%0d\r\n",imu.ID.sw[0],imu.ID.sw[1]); pc.printf("Bootloader version v%d\r\n\r\n",imu.ID.bootload);*/ // Display chip serial number /*for (int i = 0; i<4; i++){ pc.printf("%0z.%0z.%0z.%0z\r\n",imu.ID.serial[i*4],imu.ID.serial[i*4+1],imu.ID.serial[i*4+2],imu.ID.serial[i*4+3]); }*/ //pc.printf("\r\n"); //tRF INIT tRF.printf("+++"); tRF.printf("ATR\r"); // Freq tRF.printf("ATS206=12\r"); // Channel tRF.printf("ATS200=3\r"); // Speed transmit uart tRF.printf("ATS210=5\r"); // Radio baud tRF.printf("S201=4\r"); // Go to send mode tRF.printf("ATO\r"); // pc.printf("tRF INIT END\n"); //SD CARD //printf("Initialise\n"); //FileSystemLike(*sd); // call the SDBlockDevice instance initialisation method. (not needed) if ( sd.init() != 0) { //printf("Init failed \n"); errorCode(FATAL); } //Create a filing system for SD Card FATFileSystem fs("sd", &sd); // Open to WRITE //printf("Write to a file\n"); FILE* fp = fopen("/sd/FSRA18_LOG.txt","a"); fprintf(fp, "\nNovi Podaci\n"); //FILE* km = fopen("/sd/kilometraza.txt","r+"); if (fp == NULL) { error("Could not open file for read\n"); errorCode(FATAL); } /*if (km == NULL) { error("Could not open file for read\n"); errorCode(FATAL); } fscanf(km, "%f", &kilometraza);*/ //Write something to SD //fputs("Drumska Strela!\r\n", fp); /* //Close File fclose(fp); //Close down SD sd.deinit(); printf("All done...\n"); errorCode(OK); */ /*----------------MAIN LOOP----------------*/ while (true) { UpdateInfo(); //printf("In while\n"); //GET YPR imu.get_angles(); //pc.printf("Yaw: %5.1f Pitch: %5.1f Roll: %5.1f\r\n", imu.euler.yaw, imu.euler.pitch, imu.euler.roll); fprintf(fp, "Yaw: %5.1f Pitch: %5.1f Roll: %5.1f\r\n", imu.euler.yaw, imu.euler.pitch, imu.euler.roll); //GET ACCEL imu.get_accel(); // pc.printf("ACX: %5.1f ACY: %5.1f ACZ: %5.1f\r\n", imu.accel.x, imu.accel.y, imu.accel.z); fprintf(fp, "ACX: %5.1f ACY: %5.1f ACZ: %5.1f\r\n", imu.accel.x, imu.accel.y, imu.accel.z); //GET GPS DATA //printf("GPS\n"); NMEA_TYPE = gps.sample(); if (1) { //pc.printf("LON: %f, LAT: %f, SIV: %d, TYPE: %d\r\n",gps.get_nmea_longitude(), gps.get_dec_latitude(), gps.get_satelites(), NMEA_TYPE); fprintf(fp, "LON: %f, LAT: %f, SIV: %d, TYPE: %d\r\n",gps.get_nmea_longitude(), gps.get_dec_latitude(), gps.get_satelites(), NMEA_TYPE); } //CAN TEST //printf("CANUpdate\n"); //Send telemetry data //tRF.printf("POYY KEJTERI\n"); //Store data //fprintf(fp, "Rpm0: %d, Speed0: %d, Gear0: %d, Water_Temp0: %d, Oil_Temp0: %d, TPS0: %d, Brakes0: %d, Oil_P0: %d, MAP0: %d, Air_Temp0: %d, Lambda0: %d, Volts0: %d, Crank0%d\r\n",\ //Rpm0,Speed0,Gear0,Water_Temp0,Oil_Temp0,TPS0,Brakes0,Oil_P0,MAP0,Air_Temp0,Lambda0,Volts0,Crank0); fprintf(fp, "Rpm: %d, Speed: %d, Gear: %d, Water_Temp: %d, Oil_Temp: %d, TPS: %d, MAP: %d, Air_Temp: %d, Lambda: %d, Volts: %d, \r\n",\ Rpm,Speed,Gear,Water_Temp,Oil_Temp,TPS,MAP,Air_Temp,Lambda,Volts); fprintf(fp, "Steer: %d, FL_LVDT: %d, FR_LVDT: %d, RL_LVDT: %d, RR_LVDT: %d, BF_Oil_P: %d, BR_Oil_P: %d Brakes= %d\r\n",\ Steer, FL_LVDT,FR_LVDT,RL_LVDT,RR_LVDT,BF_Oil_P,BR_Oil_P,Brakes); //pc.printf("id=2001, MAP= %d, Lambda= %d, Speed= %d, Oil_P= %d",Lambda,Speed,Oil_P); //tRF SendAll //printf("sendCAN\n"); tRF_sendCAN(msgDTA1); tRF_sendCAN(msgDTA2); tRF_sendCAN(msgDTA3); tRF_sendCAN(msgDTA4); tRF_sendCAN(msgDTA5); tRF_sendCAN(msgDTA6); tRF_sendCAN(msgLVDTFront); tRF_sendCAN(msgLVDTRear); tRF_sendCAN(msgBrakes); sprintf(msgGyro1, "S1011%.2fY%.2fP%.2fR", imu.euler.yaw, imu.euler.pitch, imu.euler.roll); //pc.printf("%s\n",temp_string); tRF.printf("%s\n",msgGyro1); sprintf(msgGForce1, "S1010%.2fX%.2fY%.2fZ", imu.accel.x, imu.accel.y, imu.accel.z); tRF.printf("%s\n",msgGForce1); //sprintf(msgGps1, "S1012%.5fN%.5fE%dSIV", gps.get_nmea_longitude(), gps.get_dec_latitude(),gps.get_satelites()); //tRF.printf("%s\n",msgGps1); /*while(1) { sprintf(temp_string, "401236789"); CANlen = strlen(temp_string); tRF_sendCAN(CANMessage(0x2001, temp_string, CANlen)); wait(1); tRF.printf("S20012D123678\n"); }*/ /*sprintf(temp_string, "%.5fN%.5fE", gps.get_nmea_longitude(), gps.get_dec_latitude()); CANlen = strlen(temp_string); msgGPS = CANMessage(0x0009, temp_string, CANlen); tRF_sendCAN(msgGPS); sprintf(temp_string, "%.5fY%.5fP%.5fR", imu.euler.yaw, imu.euler.pitch, imu.euler.roll); CANlen = strlen(temp_string); msgGForce= CANMessage(0x0010, temp_string, CANlen); tRF_sendCAN(msgGForce); sprintf(temp_string, "%.5fX%.5fY%.5fZ", imu.accel.x, imu.accel.y, imu.accel.z); CANlen = strlen(temp_string); msgGyro= CANMessage(0x0011, temp_string, CANlen);*/ } }