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);
    }
}