Simple test program to get familiar with functionality of MBED RTOS on ST Nucleo-F411RE. Tasks for LED blinking, user button, temperature measurement with DS1620, temperature measurement with internal temperature sensor of ST32F411RE, ultrasonic distance measurement and displaying result on 16x2 TextLCD.
Dependencies: DS1620_improved TextLCD_improved mbed-rtos mbed
tsk_dist.cpp
- Committer:
- Jan Tetour
- Date:
- 2015-12-18
- Revision:
- 18:be0130c42925
- Parent:
- 17:94c385ff2641
File content as of revision 18:be0130c42925:
/*
* TSK_DIST.CPP
*/
#include "mbed.h"
#include "rtos.h"
#include "tsk_main.h"
#include "tsk_dist.h"
struct dist_data_struct dist_data;
static DigitalOut trigDist(PB_9);
static InterruptIn echoDist(PA_6);
static Timer timer;
uint32_t initDist(void const *args) {
dist_data.distance = 0.0f;
dist_data.timerTicks = 0;
trigDist = 0;
return 1;
}
static void rising(void) {
timer.start();
}
static void falling(void) {
timer.stop();
echoDist.rise(0);
echoDist.fall(0);
// mutexDist.lock();
dist_data.timerTicks = timer.read_us();
// 340 ms-1
dist_data.distance = (timer.read()/2.0f - 0.0f)*340.0f*1000.0f;
// mutexDist.unlock();
// Vynuluj timer
timer.reset();
}
void dist_thread(void const *args) {
while (true) {
// Dej puls na trig
trigDist = 1;
Thread::wait(1);
trigDist = 0;
if (echoDist != 0) {
mutexDist.lock();
dist_data.timerTicks = 0;
dist_data.distance = 0.0f;
mutexDist.unlock();
} else {
// Vynuluj timer
timer.stop();
timer.reset();
// Cekej na hrany na Echo
echoDist.rise(&rising);
echoDist.fall(&falling);
}
Thread::wait(1000);
}
}