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.
main.cpp
- Committer:
- pmic
- Date:
- 2021-03-13
- Revision:
- 5:887081decd5c
- Parent:
- 4:dcdcb25d1069
- Child:
- 6:6c1c38d4faa4
File content as of revision 5:887081decd5c:
#include "mbed.h"
#include "platform/mbed_thread.h"
#include "iostream"
#include "string"
#include "BufferedSerial.h"
#include <math.h>
#include <stdio.h>
#define pi 3.14159265358979323846
using namespace std::chrono;
InterruptIn user_button(USER_BUTTON);
DigitalOut led(LED1);
BufferedSerial pc(USBTX, USBRX);
bool executeMainTask = false;
Timer user_button_timer, loop_timer;
int Ts_ms = 1000;
void button_fall(); // stuff
void button_rise(); // stuff
void reverse(char* str, int len);
int intToStr(int x, char str[], int d);
void ftoa(float n, char* res, int afterpoint);
AnalogIn analogIn(PA_0);
float dist = 0.0f;
int main()
{
// pc.baud(115200);
user_button.fall(&button_fall);
user_button.rise(&button_rise);
loop_timer.reset();
while (true) {
/* ------------- start hacking ------------- -------------*/
if(executeMainTask) {
// dist = analogIn.read()*3.3f;
// printf("measurement: %d\r\n", (static_cast<int>(dist * 1000)));
Timer s;
s.start();
char res0[20];
float val0 = 233.007;
ftoa(val0, res0, 4);
pc.write(res0, sizeof(res0));
int buffered_time_ftoa = duration_cast<milliseconds>(s.elapsed_time()).count();
thread_sleep_for(100);
s.reset();
char res1[20];
float val1 = 233.007;
ftoa(val1, res1, 4);
printf("%s\r\n", res1);
int polled_time_ftoa = duration_cast<milliseconds>(s.elapsed_time()).count();
thread_sleep_for(100);
s.reset();
char msg[] = "Hello World - buffered\n";
pc.write(msg, sizeof(msg));
int buffered_time = duration_cast<milliseconds>(s.elapsed_time()).count();
thread_sleep_for(100);
s.reset();
printf("Hello World - blocking\n");
int polled_time = duration_cast<milliseconds>(s.elapsed_time()).count();
s.stop();
thread_sleep_for(100);
printf("printf buffered took %d us\n", buffered_time_ftoa);
printf("printf blocking took %d us\n", polled_time_ftoa);
printf("printf buffered took %d us\n", buffered_time);
printf("printf blocking took %d us\n", polled_time);
thread_sleep_for(100);
} else {
}
/* ------------- stop hacking ------------- -------------*/
if(executeMainTask) {
led = !led;
}
int dT_loop = Ts_ms - duration_cast<milliseconds>(loop_timer.elapsed_time()).count();
thread_sleep_for(dT_loop);
}
}
void button_fall()
{
user_button_timer.reset();
user_button_timer.start();
}
void button_rise()
{
int t_button = duration_cast<milliseconds>(user_button_timer.elapsed_time()).count();
user_button_timer.stop();
if(t_button > 200) executeMainTask = !executeMainTask;
}
void reverse(char* str, int len)
{
int i = 0, j = len - 1, temp;
while (i < j) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
i++;
j--;
}
}
int intToStr(int x, char str[], int d)
{
int i = 0;
while (x) {
str[i++] = (x % 10) + '0';
x = x / 10;
}
// If number of digits required is more, then
// add 0s at the beginning
while (i < d)
str[i++] = '0';
reverse(str, i);
str[i] = '\0';
return i;
}
void ftoa(float n, char* res, int afterpoint)
{
// Extract integer part
int ipart = (int)n;
// Extract floating part
float fpart = n - (float)ipart;
// convert integer part to string
int i = intToStr(ipart, res, 0);
// check for display option after point
if (afterpoint != 0) {
res[i] = '.'; // add dot
// Get the value of fraction part upto given no.
// of points after dot. The third parameter
// is needed to handle cases like 233.007
fpart = fpart * pow(10, afterpoint);
intToStr((int)fpart, res + i + 1, afterpoint);
}
}