- version 0.1.7 - refactor constructor, get examples working

This commit is contained in:
RobTillaart 2017-07-15 18:28:01 +02:00
parent 4eb699209f
commit 745cf64697
5 changed files with 160 additions and 18 deletions

View File

@ -1,17 +1,18 @@
//
// FILE: FastMap.cpp
// AUTHOR: Rob Tillaart
// VERSION: 0.1.06
// PURPOSE: class implementation of map function - library for Arduino
// VERSION: 0.1.7
// PURPOSE: class with fast map function - library for Arduino
// URL: http://forum.arduino.cc/index.php?topic=276194
//
// HISTORY:
// 0.1.06 2015-03-08 replaced double by double (support ARM)
// 0.1.7 2017-04-28 cleaned up, get examples working again
// 0.1.06 2015-03-08 replaced float by double (support ARM)
// 0.1.05 2014-11-02 stripped of bit mask experimental code
// 0.1.04 add back() - the inverse map
// tested with bit mask for constrain code (Perfomance was killed)
// 0.1.03 proper name
// 0.1.02 squized the code (first public version)
// 0.1.02 sqeezed the code (first public version)
// 0.1.01 refactor
// 0.1.00 initial version
//
@ -22,6 +23,11 @@
//
// PUBLIC
//
FastMap::FastMap()
{
init(0, 1, 0, 1);
}
void FastMap::init(double in_min, double in_max, double out_min, double out_max)
{
_in_min = in_min;

View File

@ -1,7 +1,7 @@
//
// FILE: FastMap.h
// AUTHOR: Rob Tillaart
// VERSION: 0.1.06
// VERSION: 0.1.7
// PURPOSE: class with fast map function - library for Arduino
// URL: http://forum.arduino.cc/index.php?topic=276194
//
@ -18,19 +18,21 @@
#include <Arduino.h>
#endif
#define FASTMAP_LIB_VERSION (F("0.1.06"))
#define FASTMAP_LIB_VERSION (F("0.1.7"))
class FastMap
{
public:
void init(double in_min, double in_max, double out_min, double out_max);
FastMap();
double inline map(double value) { return _base + value * _factor; }
double inline back(double value) { return _backbase + value * _backfactor; }
void init(const double in_min, const double in_max, const double out_min, const double out_max);
double constrainedMap(double value);
double lowerConstrainedMap(double value);
double upperConstrainedMap(double value);
double inline map (const double value) { return _base + value * _factor; }
double inline back (const double value) { return _backbase + value * _backfactor; }
double constrainedMap(const double value);
double lowerConstrainedMap(const double value);
double upperConstrainedMap(const double value);
private:
double _in_min, _in_max, _out_min, _out_max;

View File

@ -1,6 +1,6 @@
// FILE: fastMapDemo3.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.00
// VERSION: 0.1.1
// PURPOSE: demo of FastMap class ==> a faster map function
// DATE: 2014-11-02
// URL: http://forum.arduino.cc/index.php?topic=276194
@ -31,13 +31,13 @@ void setup()
Serial.print(char(176));
Serial.println('C');
f = CtoF.map(163, CONSTRAIN_UPPER);
f = CtoF.upperConstrainedMap(163);
Serial.print(f);
Serial.print(char(176));
Serial.println('F');
c = CtoF.back(f, CONSTRAIN_BOTH);
Serial.print(c);
f = CtoF.lowerConstrainedMap(163);
Serial.print(f);
Serial.print(char(176));
Serial.println('C');
@ -49,4 +49,3 @@ void loop()
//
// END OF FILE
//

View File

@ -0,0 +1,135 @@
//
// FILE: fastMapDemo4.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.00
// PURPOSE: demo of FastMap class ==> a faster map function
// DATE: 2014-11-02
// URL:
//
// Released to the public domain
//
// works only with 0.1.04
#include "FastMap.h"
uint32_t start;
uint32_t stop;
uint32_t reference;
volatile long zz = 3000, yy = 20000;
volatile float x;
FastMap mapper;
void setup()
{
Serial.begin(115200);
Serial.print("Start fastMapDemo\nlib version: ");
Serial.println(FASTMAP_LIB_VERSION);
Serial.println();
// Get a non optimizable value;
int z = analogRead(A0);
// REFERENCE
start = micros();
for (int i = 0; i < 10000; i++)
{
x = map(z, 0, 1023, yy, zz);
}
stop = micros();
reference = stop-start;
Serial.print("map():\t");
Serial.println(reference);
Serial.print(z);
Serial.print(" -> ");
Serial.println(x);
Serial.println();
// FASTMAP
mapper.init(0, 1023, yy, zz);
start = micros();
for (int i = 0; i < 10000; i++)
{
x = mapper.map(z);
}
stop = micros();
Serial.print("fastmap.map():\t");
Serial.println(stop-start);
Serial.print(z);
Serial.print(" -> ");
Serial.println(x);
// GAIN
Serial.print("Performance factor: ");
Serial.println((float)reference/(stop-start));
Serial.println();
// constrainedMap
mapper.init(0, 1023, yy, zz);
start = micros();
for (int i = 0; i < 10000; i++)
{
x = mapper.constrainedMap(z);
}
stop = micros();
Serial.print("fastmap.constrainedMap():\t");
Serial.println(stop-start);
Serial.print(z);
Serial.print(" -> ");
Serial.println(x);
// GAIN
Serial.print("Performance factor: ");
Serial.println((float)reference/(stop-start));
Serial.println();
// lowerConstrainedMap
mapper.init(0, 1023, yy, zz);
start = micros();
for (int i = 0; i < 10000; i++)
{
x = mapper.lowerConstrainedMap(z);
}
stop = micros();
Serial.print("fastmap.lowerConstrainedMap():\t");
Serial.println(stop-start);
Serial.print(z);
Serial.print(" -> ");
Serial.println(x);
// GAIN
Serial.print("Performance factor: ");
Serial.println((float)reference/(stop-start));
Serial.println();
// upperConstrainedMap
mapper.init(0, 1023, yy, zz);
start = micros();
for (int i = 0; i < 10000; i++)
{
x = mapper.upperConstrainedMap(z);
}
stop = micros();
Serial.print("fastmap.upperConstrainedMap():\t");
Serial.println(stop-start);
Serial.print(z);
Serial.print(" -> ");
Serial.println(x);
// GAIN
Serial.print("Performance factor: ");
Serial.println((float)reference/(stop-start));
Serial.println();
Serial.println("done...");
}
void loop()
{
}
//
// END OF FILE
//

View File

@ -1,5 +1,5 @@
name=FastMap
version=0.1.6
version=0.1.7
author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Library with fast map function for Arduino.