2021-05-26 05:31:36 -04:00
|
|
|
#pragma once
|
|
|
|
//
|
|
|
|
// FILE: SRF05.h
|
|
|
|
// AUTHOR: Rob Tillaart
|
2022-11-25 13:11:37 -05:00
|
|
|
// VERSION: 0.1.3
|
2021-05-26 05:31:36 -04:00
|
|
|
// DATE: 2021-05-17
|
|
|
|
// PURPOSE: Arduino library for SRF05 distance sensor
|
|
|
|
// URL: https://github.com/RobTillaart/SRF05
|
|
|
|
|
|
|
|
|
|
|
|
#include "Arduino.h"
|
|
|
|
|
2022-11-25 13:11:37 -05:00
|
|
|
#define SRF05_LIB_VERSION (F("0.1.3"))
|
|
|
|
|
|
|
|
|
|
|
|
const uint8_t SRF05_MODE_SINGLE = 0;
|
|
|
|
const uint8_t SRF05_MODE_AVERAGE = 1;
|
|
|
|
const uint8_t SRF05_MODE_MEDIAN = 2;
|
|
|
|
const uint8_t SRF05_MODE_RUN_AVERAGE = 3;
|
2021-05-26 05:31:36 -04:00
|
|
|
|
|
|
|
|
|
|
|
class SRF05
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
explicit SRF05(const uint8_t trigger, const uint8_t echo, const uint8_t out = 0);
|
|
|
|
|
|
|
|
|
2022-11-25 13:11:37 -05:00
|
|
|
// configuration
|
2021-05-26 05:31:36 -04:00
|
|
|
void setSpeedOfSound(float sos = 340);
|
|
|
|
float getSpeedOfSound();
|
|
|
|
|
2022-11-25 13:11:37 -05:00
|
|
|
// adjust timing
|
|
|
|
void setCorrectionFactor(float factor = 1);
|
|
|
|
float getCorrectionFactor();
|
2021-05-26 05:31:36 -04:00
|
|
|
|
|
|
|
|
2022-11-25 13:11:37 -05:00
|
|
|
// operational mode
|
2021-05-26 05:31:36 -04:00
|
|
|
void setModeSingle();
|
2021-11-18 07:52:59 -05:00
|
|
|
void setModeAverage(uint8_t count);
|
|
|
|
void setModeMedian(uint8_t count);
|
2021-05-26 05:31:36 -04:00
|
|
|
void setModeRunningAverage(float alpha);
|
|
|
|
uint8_t getOperationalMode();
|
|
|
|
|
|
|
|
|
2022-11-25 13:11:37 -05:00
|
|
|
// get distance
|
|
|
|
uint32_t getTime(); // uSec
|
|
|
|
uint32_t getMillimeter(); // mm
|
|
|
|
float getCentimeter(); // cm
|
|
|
|
float getMeter(); // m
|
|
|
|
float getInch(); // inch = 2.54 cm
|
|
|
|
float getFeet(); // feet = 12 inch
|
2021-05-26 05:31:36 -04:00
|
|
|
|
|
|
|
|
2022-11-25 13:11:37 -05:00
|
|
|
// Experimental - calibration
|
2021-05-26 05:31:36 -04:00
|
|
|
float determineSpeedOfSound(uint16_t distance);
|
|
|
|
|
|
|
|
|
2022-11-25 13:11:37 -05:00
|
|
|
// Experimental - adjust trigger length - gain is a few usec at best.
|
|
|
|
// 10 microseconds is advised minimum
|
|
|
|
// void setTriggerLength(uint8_t length = 10) { _triggerLength = length; };
|
|
|
|
// uint8_t getTriggerLength() { return _triggerLength; };
|
2021-05-26 05:31:36 -04:00
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
uint8_t _trigger;
|
|
|
|
uint8_t _echo;
|
|
|
|
uint8_t _out;
|
2022-11-25 13:11:37 -05:00
|
|
|
uint8_t _mode = SRF05_MODE_SINGLE;
|
2021-11-18 07:52:59 -05:00
|
|
|
uint8_t _count = 1;
|
2021-05-26 05:31:36 -04:00
|
|
|
float _alpha = 1.0;
|
2021-11-18 07:52:59 -05:00
|
|
|
float _value = 0;
|
2021-05-26 05:31:36 -04:00
|
|
|
float _correctionFactor = 1;
|
2021-11-18 07:52:59 -05:00
|
|
|
uint8_t _triggerLength = 10;
|
2022-11-25 13:11:37 -05:00
|
|
|
float _speedOfSound = 340; // 20°C
|
2021-05-26 05:31:36 -04:00
|
|
|
|
|
|
|
uint32_t _read();
|
|
|
|
void _insertSort(uint32_t * array, uint8_t size);
|
|
|
|
};
|
|
|
|
|
2021-11-18 07:52:59 -05:00
|
|
|
|
2021-05-26 05:31:36 -04:00
|
|
|
// -- END OF FILE --
|
2021-11-18 07:52:59 -05:00
|
|
|
|