Thanks to visit codestin.com
Credit goes to github.com

Skip to content

investigate / add estimateMidPointAC() #37

@RobTillaart

Description

@RobTillaart

A non-blocking idea to estimate the midpoint. From #35

//    FILE: estimateMidPointAC.ino
//  AUTHOR: Rob Tillaart
// PURPOSE: experimental 
//     URL: https://github.com/RobTillaart/ACS712

#include "Arduino.h"

uint32_t start, stop;
int _pin = A0;
uint32_t count = 0;
volatile uint16_t mp;
float conf = 0;

uint16_t estimateMidPointAC(float &confidence, bool reset = false)
{
  static bool _firstCall = true;
  static float _minimum, _maximum, _confidence;

  int value = analogRead(_pin);
  if (_firstCall || reset)
  {
    _firstCall = false;
    _minimum = _maximum = value;
    _confidence = 0;
    confidence = _confidence;
    return _minimum;
  }
  if (value > _maximum)
  {
    _maximum = value;
    _confidence /= 2;
  }
  else if (value < _minimum)
  {
    _minimum = value;
    _confidence /= 2;
  }
  else if (_confidence < 100)
  {
    _confidence += 1;
  }
  confidence = _confidence;
  return (_minimum + _maximum) / 2;
}

void setup()
{
  Serial.begin(115200);
  while (!Serial);
  Serial.println(__FILE__);
}

void loop()
{
  count++;
  start = micros();
  mp = estimateMidPointAC(conf, true);
  stop = micros();
  Serial.print(millis());
  Serial.print("\t");
  Serial.print(count);
  Serial.print("\t");
  Serial.print(conf);
  Serial.print("\t");
  Serial.print(mp);
  Serial.print("\t");
  Serial.print(stop - start);
  Serial.println();
  delay(random(100));
}

//  -- END OF FILE --

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions