Test funkcnosti HCSR501

Dependencies:   USBDevice mbed millis

main.cpp

Committer:
venhy
Date:
2018-01-13
Revision:
1:ca6f01b3d4ad
Parent:
0:6238d7962d9f

File content as of revision 1:ca6f01b3d4ad:

#include "mbed.h"
#include "USBSerial.h"
#include "millis.h"


DigitalOut  myLed(LED1);
DigitalIn   digitalOutputPIR(PTB0);
USBSerial   serial;


int MeasureTriggerDelay(void) {
    
    uint8_t measureFlagON = 0;
    uint8_t completeMeasureFlag = 0;
    time_t triggerTime, offTime;
    
    while(!completeMeasureFlag){
    
        if(digitalOutputPIR) {
        
            myLed = 0;
            if(!measureFlagON) {
            
                triggerTime = millis() / 1000;
                serial.printf("/KALIBRACE/ Detekovan pohyb /KALIBRACE/\r\n");
            
            }
            measureFlagON = 1;
               
        }
        else {
            
            myLed = 1;
            offTime = millis() / 1000;
            serial.printf("/KALIBRACE/ Vystup odpojen, trigger delay je %d sekund /KALIBRACE/\r\n", offTime - triggerTime);
            if(measureFlagON) completeMeasureFlag = 1;
             
       }         

    }
    
    return (offTime - triggerTime);
}


int main() {

    int triggerDelayTime = 3; //vychozi nastaveni 3 sekundy
    uint8_t repeatTriggerCount = 0;
    int printFlag = 0;
    int triggerTime = 0;
    myLed = 1;
      
    millisStart();
    wait(6);
    
    serial.printf("Zjistuji dobu aktivniho vystupu - trigger delay\r\n");
    while(digitalOutputPIR != 1) {};
    triggerDelayTime = MeasureTriggerDelay();
    
    while(1) {
        
        if(digitalOutputPIR)
        {
            myLed = 0;
            if(!printFlag) {
                
                triggerTime = millis()/1000;  
                serial.printf("Detekovan pohyb %d sekund od zapnuti FRDM\r\n", triggerTime);
                printFlag = 1;
                   
            }
        }
        else { 
            
            int offTime = millis() / 1000;
            if(printFlag) {
                
                repeatTriggerCount = ((offTime - triggerTime) / triggerDelayTime) - 1;
                if(((offTime - triggerTime) / triggerDelayTime - 1) < 0) repeatTriggerCount = 0;
        
                serial.printf("LED vypnuta po %d sekundach od sepnuti\r\n", offTime - triggerTime);
                serial.printf("Opakovany trigger probehl %dx krat\r\n", repeatTriggerCount);
                      
            }
            myLed = 1;
            printFlag = 0;
            
        }
    }
}