0.1.3 MINMAX

This commit is contained in:
rob tillaart 2022-11-17 17:36:35 +01:00
parent 5c081a6e56
commit 88a726341f
8 changed files with 162 additions and 32 deletions

View File

@ -1,3 +1,18 @@
platforms:
rpipico:
board: rp2040:rp2040:rpipico
package: rp2040:rp2040
gcc:
features:
defines:
- ARDUINO_ARCH_RP2040
warnings:
flags:
packages:
rp2040:rp2040:
url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
compile: compile:
# Choosing to run compilation tests on 2 different Arduino platforms # Choosing to run compilation tests on 2 different Arduino platforms
platforms: platforms:
@ -8,4 +23,5 @@ compile:
- m4 - m4
- esp32 - esp32
# - esp8266 # - esp8266
# - mega2560 # - mega2560
- rpipico

View File

@ -0,0 +1,32 @@
# Change Log MINMAX
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## [0.1.3] - 2022-11-17
- add RP2040 in build-CI
- add changelog.md
- edit readme.md
- add callback()
- add lastValue()
- add lastMin() && lastMax() - timestamps of the peaks
- add example callback()
## [0.1.2] - 2021-12-21
- update library.json
- update license
- minor edits
- defined constants
## [0.1.1] - 2021-11-09
- update readme, parameters
- add getAutoResetCount()
- rename setAutoResetCount()
## [0.1.0] - 2021-10-14
- initial version.

View File

@ -2,22 +2,15 @@
// //
// FILE: MINMAX.h // FILE: MINMAX.h
// AUTHOR: Rob Tillaart // AUTHOR: Rob Tillaart
// VERSION: 0.1.2 // VERSION: 0.1.3
// DATE: 2021-10-14 // DATE: 2021-10-14
// PURPOSE: MINMAX library - simple peak finder // PURPOSE: MINMAX library - simple peak finder
//
// HISTORY:
// 0.1.0 2021-10-14 initial version
// 0.1.1 2021-11-09 update readme, parameters
// add getAutoResetCount()
// rename setAutoResetCount()
// 0.1.2 2021-12-21 update library.json, license, minor edits
// defined constants
#include "Arduino.h" #include "Arduino.h"
#define MINMAX_LIB_VERSION (F("0.1.2")) #define MINMAX_LIB_VERSION (F("0.1.3"))
#define MINMAX_NO_CHANGE 0X00 #define MINMAX_NO_CHANGE 0X00
#define MINMAX_MIN_CHANGED 0X01 #define MINMAX_MIN_CHANGED 0X01
@ -33,12 +26,14 @@ public:
{ {
reset(); reset();
_resetCount = 0; _resetCount = 0;
_callback = NULL;
} }
uint8_t add(const float value) uint8_t add(const float value)
{ {
uint8_t rv = MINMAX_NO_CHANGE; uint8_t rv = MINMAX_NO_CHANGE;
_lastValue = value;
if ((_resetCount != 0) && (_resetCount == _count)) if ((_resetCount != 0) && (_resetCount == _count))
{ {
reset(); reset();
@ -47,29 +42,41 @@ public:
if ((value < _minimum) || (_count == 0)) if ((value < _minimum) || (_count == 0))
{ {
_minimum = value; _minimum = value;
_lastMin = millis();
rv |= MINMAX_MIN_CHANGED; rv |= MINMAX_MIN_CHANGED;
} }
if ((value > _maximum) || (_count == 0)) if ((value > _maximum) || (_count == 0))
{ {
_maximum = value; _maximum = value;
_lastMax = millis();
rv |= MINMAX_MAX_CHANGED; rv |= MINMAX_MAX_CHANGED;
} }
_count++; _count++;
if ((rv != MINMAX_NO_CHANGE) && (_callback != NULL)) _callback();
return rv; return rv;
} }
void reset() void reset()
{ {
_lastValue = 0;
_minimum = 0; _minimum = 0;
_maximum = 0; _maximum = 0;
_count = 0; _count = 0;
_lastMin = 0;
_lastMax = 0;
} }
void autoReset(uint32_t count) // obsolete 0.2.0 void addCallBack( void (* func)(void) )
{ {
_resetCount = count; _callback = func;
};
void autoReset(uint32_t count) // obsolete 0.2.0
{
setAutoResetCount(count);
}; };
@ -85,16 +92,24 @@ public:
}; };
float lastValue() { return _lastValue; };
float minimum() { return _minimum; }; float minimum() { return _minimum; };
float maximum() { return _maximum; }; float maximum() { return _maximum; };
uint32_t count() { return _count; }; uint32_t count() { return _count; };
uint32_t lastMin() { return _lastMin; };
uint32_t lastMax() { return _lastMax; };
private: private:
float _lastValue;
float _minimum; float _minimum;
float _maximum; float _maximum;
uint32_t _count; uint32_t _count;
uint32_t _resetCount; uint32_t _resetCount;
void (* _callback)(void);
uint32_t _lastMin;
uint32_t _lastMax;
}; };

View File

@ -8,47 +8,51 @@
# MINMAX # MINMAX
Library for finding peaks (minimum and maximum) in signal. Library for finding peaks (minimum and maximum) in a signal.
## Description ## Description
The MINMAX library is a simple peak finder in a stream of floats. The MINMAX library is a simple peak finder in a stream of floats.
It indicates if after adding a number the minimum and/or the maximum value has been The **add()** function indicates after adding a number if the minimum and/or the maximum value has been
changed by means of a bit flag that is returned. changed by means of a bit flag that is returned.
If a peak is found, it will be used as the new reference until a reset. If a peak is found, it will be used as the new reference until a call to **reset()**.
The library can reset the minimum and maximum to 0 to start again. The library can **reset()** the minimum and maximum to 0 to start again.
The library has also the option to auto-reset after a predefined number of **add()** calls. The library has also the option to auto-reset after a predefined number of **add()** calls.
lastMin() timestamp in millis() when minimum was last updated.
lastMax() timestamp in millis() when maximum was last updated.
## Interface ## Interface
- **MINMAX** Constructor - **MINMAX** Constructor,
- **uint8_t add(float value)** add next value. Returns status (bit flags), see table below. - **uint8_t add(float value)** add next value. Returns status (bit flags), see table below.
- **void reset()** resets the minimum and maximum to 0. - **void reset()** resets the minimum and maximum to 0.
- **void setAutoResetCount(uint32_t count)** sets an auto-reset moment after count calls to **add()**. - **void setAutoResetCount(uint32_t count)** sets an auto-reset moment after count calls to **add()**.
There will be at least one value processed. There will be at least one value processed.
- **uint32_t getAutoResetCount()** returns set value. - **uint32_t getAutoResetCount()** returns set value.
- **float minimum()** returns last minimum. Can be higher than previous call due to **reset()** or **autoReset()**. - **float minimum()** returns last minimum. Can be higher than previous call due to **reset()** or **autoReset()**.
If no call to **add()** is made it will return 0. If no call to **add()** is made yet it will return 0.
- **float maximum()** returns last maximum. Can be lower than previous call due to **reset()** or **autoReset()**. - **float maximum()** returns last maximum. Can be lower than previous call due to **reset()** or **autoReset()**.
If no call to **add()** is made it will return 0. If no call to **add()** is made yet it will return 0.
- **uint32_t count()** returns number of **add()** calls since last (auto)reset. - **uint32_t count()** returns number of **add()** calls since last (auto)reset.
Return flags of **add()** - is a bitmask Return flags of **add()** - is a bit mask.
| flag | value | description | | flag | value | description |
|:-------------------|:-----:|:----------------| |:---------------------|:-------:|:------------------|
| MINMAX_NO_CHANGE | 0x00 | no change | | MINMAX_NO_CHANGE | 0x00 | no change |
| MINMAX_MIN_CHANGED | 0x01 | minimum changed | | MINMAX_MIN_CHANGED | 0x01 | minimum changed |
| MINMAX_MAX_CHANGED | 0x02 | maximum changed | | MINMAX_MAX_CHANGED | 0x02 | maximum changed |
| MINMAX_RESET_DONE | 0x80 | reset done | | MINMAX_RESET_DONE | 0x80 | reset done |
NOTE: After a reset() the next add() will return both MINMAX_MIN_CHANGED and MINMAX_MAX_CHANGED (0x03)
## Obsolete ## Obsolete
@ -63,7 +67,13 @@ The examples show the basic working of the functions.
## Future ## Future
#### must
- update documentation. - update documentation.
#### should
- move code to .cpp (0.2.0)
#### could
- define FLAGS - define FLAGS
- add call back functions? - add call back functions?
- thresholds, windowing + triggers (separate class?) - thresholds, windowing + triggers (separate class?)
@ -74,5 +84,5 @@ The examples show the basic working of the functions.
- Template class to allow other types - Template class to allow other types
- int32_t uint64_t double etc. - int32_t uint64_t double etc.
- now you loose precision - now you loose precision
- - add AVG **average()** \_sum / \_count (like a DMM)

View File

@ -0,0 +1,44 @@
//
// FILE: minmax_new.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.0
// PURPOSE: demo
// DATE: 2021-10-14
// URL: https://github.com/RobTillaart/minmax
#include "MINMAX.h"
MINMAX mm;
uint32_t start, stop;
void setup()
{
Serial.begin(115200);
Serial.println(__FILE__);
mm.autoReset(10000);
mm.addCallBack(display);
}
void loop()
{
int r = random(10001) - 5000;
mm.add(r);
}
void display()
{
Serial.print(mm.count());
Serial.print("\t");
Serial.print(mm.minimum());
Serial.print("\t");
Serial.print(mm.maximum());
Serial.print("\n");
}
// -- END OF FILE --

View File

@ -15,7 +15,7 @@
"type": "git", "type": "git",
"url": "https://github.com/RobTillaart/MINMAX.git" "url": "https://github.com/RobTillaart/MINMAX.git"
}, },
"version": "0.1.2", "version": "0.1.3",
"license": "MIT", "license": "MIT",
"frameworks": "arduino", "frameworks": "arduino",
"platforms": "*", "platforms": "*",

View File

@ -1,5 +1,5 @@
name=MINMAX name=MINMAX
version=0.1.2 version=0.1.3
author=Rob Tillaart <rob.tillaart@gmail.com> author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com> maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=MINMAX library for Arduino. sentence=MINMAX library for Arduino.

View File

@ -26,8 +26,6 @@
#include "Arduino.h" #include "Arduino.h"
#include "MINMAX.h" #include "MINMAX.h"
#define A0 0
unittest_setup() unittest_setup()
{ {
@ -70,6 +68,9 @@ unittest(test_reset)
{ {
mm.add(i); mm.add(i);
} }
assertEqual(0, mm.minimum());
assertEqual(9, mm.maximum());
assertEqual(10, mm.count());
mm.reset(); mm.reset();
assertEqual(0, mm.minimum()); assertEqual(0, mm.minimum());
assertEqual(0, mm.maximum()); assertEqual(0, mm.maximum());
@ -93,6 +94,18 @@ unittest(test_autoReset)
} }
unittest(test_lastValue)
{
MINMAX mm;
for (int i = 0; i < 10; i++)
{
mm.add(i);
}
assertEqual(9, mm.lastValue());
}
unittest_main() unittest_main()