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:
dzoni
Date:
2015-12-14
Revision:
15:a627638edd9c
Parent:
13:f62b10a6e1c5
Child:
17:94c385ff2641

File content as of revision 15:a627638edd9c:

#include "mbed.h"
#include "rtos.h"

#include "tsk_dist.h"


struct dist_data_struct dist_data = { 10000, 10.0f };


static DigitalOut  trigDist(PB_9);
static InterruptIn echoDist(PA_6);

static Timer   timer;

static void rising(void) {
    timer.start();
}

static void falling(void) {
    timer.stop();
    echoDist.rise(0);
    echoDist.fall(0);

    dist_data.timerTicks = timer.read_us();
        
    // 340 ms-1
    dist_data.distance = (timer.read()/2.0f - 0.0f)*340.0f*1000.0f;

    // 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) {
            dist_data.timerTicks = 0;
            dist_data.distance = 0.0f;
        } else {
            // Vynuluj timer
            timer.stop();
            timer.reset();
                
            // Cekej na hrany na Echo
            echoDist.rise(&rising);
            echoDist.fall(&falling);
        }
        
        Thread::wait(500);
    }
}