Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MMA8452Q MS5837 SDFileSystem SCI_SENSOR
Diff: main.cpp
- Revision:
- 0:6e97f9a6aca0
- Child:
- 1:e1a2b47c3098
diff -r 000000000000 -r 6e97f9a6aca0 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Nov 28 15:38:48 2021 +0000 @@ -0,0 +1,174 @@ +/* +Author Mingxi Zhou +OCE360 underwater float template program +*/ +#include "mbed.h" +#include "MMA8452Q.h" //accelerometer library +#include "MS5837.h" //pressure sensor library*** +#include "SCI_SENSOR.h" //science sensor library*** +#include "SDFileSystem.h" // SD card library + +DigitalOut led1(LED1); +DigitalOut led2(LED2); + +Serial pc(USBTX, USBRX); //initial serial +Serial BLE(p13,p14); //Bluetooth +MMA8452Q accel(p28,p27,0x1D); //initial accelerometer +LM19 temp(p19); +PhotoCell light(p20); +MS5837 p_sensor(p9, p10, ms5837_addr_no_CS); //pressure sensor +PwmOut thruster(p21); //set PWM pin //max 1.3ms min 1.1ms +PwmOut thruster2(p22); //set PWM pin +SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board + +//global ticker +Ticker log_ticker; +Ticker accel_ticker; +// global timer +Timer t; + +///File +FILE *fp; +char fname[100]; +float PI = 3.14159265358979323846f; + +//float operation parameters +float target_depth=0; //global target depth default 0 +int yo_num=0; //global yo_num default 0 +float thrust_on_time=0; //global thrust_on time default 0 +float accelData[3]; //global accel data + +//functions +void welcome(); +void log_data(); +//IMU related +void accel_update(); //update accelerometer related variables. we use imu_ticker to call this function +//Control related functions +void thrust_on(float pw, float on_time); //input is pulse width + +//-------------Main functions----------------------------------------------------------------------------------------- +int main() +{ +//-----Initialization realted code-------// + //inital set the thruster esc to 1ms duty cycle + thruster.period(0.002); // 2 ms period + thruster.pulsewidth(1.0/1000.000); + //Initialize accelerometer: + accel.init(); + led1=1; + //initialize pressure sensor + pc.printf("setting the pressure sensor\r\n"); + p_sensor.MS5837Reset(); + p_sensor.MS5837Init(); + pc.printf("settting the tickers\r\n"); + t.start(); + led2=1; + welcome(); + //-----setup ticker-------// + //setup ticker to separate log and IMU data update. + //so we could have all our control code in the while loop + // //log at 2 Hz + accel_ticker.attach(&accel_update,0.1); //10Hz + log_ticker.attach(&log_data,0.5); + wait(1); + while(1) + { + // put your main control code here + } + +} + +//-------------Customized functions---------------------------------------------//---------------------------------------- +///-----------Welcome menu---------------------/// +void welcome() +{ + char buffer[100]={0}; + int flag=1; + //Flush the port + while(BLE.readable()) + { + BLE.getc(); + } + while(flag) + { + BLE.printf("### I am alive\r\n"); + BLE.printf("### Please enter the log file name you want\r\n"); + if(BLE.readable()) + { + BLE.scanf("%s",buffer); + sprintf(fname,"/sd/mydir/%s.txt",buffer); //make file name + + flag = 0; //set the flag to 0 to break the while + } + wait(1); + } + //print name + BLE.printf("### name received\r\n"); + BLE.printf("### file name and directory is: \r\n %s\r\n",fname); //file name and location + //open file test + mkdir("/sd/mydir",0777); //keep 0777, this is magic # + fp = fopen(fname, "a"); + if(fp == NULL){ + BLE.printf("Could not open file for write\n"); + } + else + { + BLE.printf("##file open good \n"); //open file and tell if open + fprintf(fp, "Hello\r\n"); + fclose(fp); + } + + BLE.printf("### The main program will start in 10 seconds\r\n"); + wait(5); +} + +///-----------log functions---------------------/// +void log_data() +{ + //log system time t.read() + // log imu data, log science data + // log pulse width + // log pressure sensor data. + //science sensor: temp.temp(), light.light() + //IMU sensor + +} + +///-----------acceleromter related functions---------------------/// +void accel_update() +{ + accelData[0] = accel.readX(); + accelData[1] = accel.readY(); + accelData[2] = accel.readZ(); +} + +///-----------Control related functions---------------------/// +////Thruster on control, pw->pulse width in milli-second// +//// pw range between 1 to 1.5// +//// on_time-> thruster on time. +void thrust_on(float pw, float on_time) //input is pulse width +{ + float pw_max=2.0; + if(pw>pw_max) + { + pw=pw_max; //hard limitation + } + Timer tt; + tt.reset(); + tt.start(); + // lets set the pulse width + //thruster.period(20.0/1000.00); // 20 ms period + thruster.pulsewidth(pw/1000.00); + thruster2.pulsewidth(pw/1000.00); + //PWM will be kept until time out + while(tt.read()<=on_time) + { + } + //stop the timer + tt.stop(); + //turn off the thruster + thruster.pulsewidth(1.0/1000.00); + thruster2.pulsewidth(1.0/1000.00); + +} +