![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Version 3 is with update to the test rig with a linear actuator
Dependencies: SPTE_10Bar_5V mbed AS5048 SDFileSystem MODSERIAL PinDetect LCM101 LinearActuator
Diff: main.cpp
- Revision:
- 4:1cdce6c6c94e
- Parent:
- 2:84d479fe9b5e
- Child:
- 5:63063a9fa51c
--- a/main.cpp Tue Jun 05 08:51:45 2018 +0000 +++ b/main.cpp Fri Oct 12 12:12:55 2018 +0000 @@ -1,5 +1,5 @@ #include "mbed.h" -#include "string.h" +#include <string> #include "bench.h" #include "PinDetect.h" @@ -9,16 +9,22 @@ #define PI 3.14159265 // User io + +PinDetect forceNull(PTB16,PullUp); +PinDetect press0Null(PTA4,PullUp); + PinDetect sw2(SW2,PullUp); PinDetect sw3(SW3,PullUp); DigitalOut led_g(LED_GREEN); +void ResetForce(); +void ResetPress(); void TogglePrinting(); void ToggleLogging(); void ShowAlive(); // Bench -Bench leg(AS5048_MOSI, AS5048_MISO, AS5048_SCLK, AS5048_CS, LCM101); +Bench leg(AS5048_MOSI, AS5048_MISO, AS5048_SCLK, AS5048_CS, LCM101,SPTE_0,SPTE_1); void Update() { leg.Update(); @@ -41,6 +47,8 @@ // Timing Ticker tick_update, tick_serial, tick_logging; Timer timer; +int firstReadMS = 0; //first timer value read +bool startedLogging = false; //in the middle of a logging cycle /** * Main loop/ @@ -57,6 +65,12 @@ PrintMenu(); + forceNull.attach_asserted(&ResetForce); + press0Null.attach_asserted(&ResetPress); + + forceNull.setSampleFrequency(); + press0Null.setSampleFrequency(); + sw2.attach_asserted(&TogglePrinting); sw3.attach_asserted(&ToggleLogging); @@ -92,6 +106,17 @@ // IMPLEMENTATION USER IO // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +void ResetForce() +{ + leg.nullForce(); +} + +void ResetPress() +{ + leg.nullPressure0(); + leg.nullPressure1(); +} + bool is_printing = false; void TogglePrinting() { @@ -119,17 +144,33 @@ // IMPLEMENTATION SERIAL COM // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = const int kNumJoints = 4; -const char *kJointNames[kNumJoints] = {"Toes","Ankle","knee","Hip"}; +const char *kJointNames[kNumJoints] = {"Toes","Ankle","Knee","Hip"}; + +bool sd_card_present = false; +int fname_prepend = 0; void PrintStatus() { led_g = !led_g; if (is_printing) { pc.printf("\r\nLEG STATUS (%s)\r\n",led_g?"+":"*"); + pc.printf("\tSD card detected? %9s\r\n",sd_card_present?"Yes":"No"); + if(sd_card_present) + { + pc.printf("\tFile number %15i\r\n", fname_prepend); + pc.printf("\tLogging? %18s\r\n",is_logging?"Yes":"No"); + } + pc.printf("\n\t%15s %7.2f\r\n","Pressure0 (kPa)", leg.getPressure0()*100); + pc.printf("\t%15s %7.2f\r\n","Pressure1 (kPa)", leg.getPressure1()*100); + for (int i=0; i<kNumJoints; ++i) - pc.printf("\t%5s %7.2f\r\n",kJointNames[i], leg.getDegrees(i)); - pc.printf("\t%5s %7.2f\r\n","Force", leg.getForce()); - pc.printf("\t%5s %7.2f\r\n","Torque", getTorque(leg.getDegrees(3),leg.getDegrees(2),leg.getForce())); + { + string jointName = kJointNames[i]; + jointName = jointName + " (deg)"; + pc.printf("\t%15s %7.2f\r\n",jointName, leg.getDegrees(i)); + } + pc.printf("\t%15s %7.2f\r\n","Force (N)", leg.getForce()); + pc.printf("\t%15s %7.2f\r\n","Torque (Nm)", getTorque(leg.getDegrees(3),leg.getDegrees(2),leg.getForce())); } } @@ -138,6 +179,13 @@ pc.printf("\r\nMENU\r\n"); pc.printf("\t> Press SW2 to toggle printing leg status\r\n"); pc.printf("\t> Press SW3 to toggle data logging\r\n"); + + pc.printf("\tSD card detected? %9s\r\n",sd_card_present?"Yes":"No"); + if(sd_card_present) + { + pc.printf("\tFile number %15i\r\n", fname_prepend); + pc.printf("\tLogging? %18s\r\n",is_logging?"Yes":"No"); + } } // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = @@ -146,8 +194,7 @@ FILE * fp_data; -bool sd_card_present = false; -int fname_prepend = 0; + /** * Check contents of SD card and count files in order @@ -210,9 +257,11 @@ pc.printf("\t> ERROR: failed to open log file (t=%d ms)\r\n", timer.read_ms()); } else { - fprintf(fp_data, "time_ms, theta_toe, theta_ankle, theta_knee, theta_hip, force, torque"); + fprintf(fp_data, "time (s), theta_toe (deg), theta_ankle (deg), theta_knee (deg), theta_hip (deg), force (N), torque (Nm), pressure0 (kPa), pressure1 (kPa)"); tick_logging.attach_us(&LogData,timing::kTimeLogDataUs); timer.start(); + startedLogging = true; + pc.printf("\t> Logging started.\r\n"); is_logging = true; @@ -220,6 +269,7 @@ } else { pc.printf("\t> No SD Card; no data will be logged.\r\n"); + startedLogging = false; } } @@ -243,22 +293,30 @@ is_logging = false; } - /** * Log data */ void LogData() { + int currTime = timer.read_ms(); + if(startedLogging) { + firstReadMS = currTime; + startedLogging = false; + } + double currTimeS = ((double)currTime - firstReadMS)/1000; + // time - fprintf(fp_data,"\n%d", timer.read_ms()); + fprintf(fp_data,"\n%+f",currTimeS); // bench: joint angles and force sensor - fprintf(fp_data,", %+f, %+f, %+f, %+f, %+f, %+f", + fprintf(fp_data,", %+f, %+f, %+f, %+f, %+f, %+f, %+f, %+f", leg.getDegrees(0), leg.getDegrees(1), leg.getDegrees(2), leg.getDegrees(3), leg.getForce(), - getTorque(leg.getDegrees(3),leg.getDegrees(2),leg.getForce()) + getTorque(leg.getDegrees(3),leg.getDegrees(2),leg.getForce()), + leg.getPressure0()*100, + leg.getPressure1()*100 ); } \ No newline at end of file