// https://wokwi.com/projects/380383323394002945
// https://forum.arduino.cc/t/how-to-identify-moment-of-analog-sinusoidal-signal-peaking/1184837
int localMax;
int globalMax;
bool seenZero;
void setup() {
Serial.begin(115200);
Serial.println("hello there.");
seenZero = false;
}
void loop() {
delay(100); // whoa!
int reading = analogRead(A0) - 512; // -512 to 512 then
// Serial.println(reading);
// first get the green marks point
if (reading < 0) {
if (!seenZero) {
Serial.println("crossed zero going down");
seenZero = true;
// bump globalMax if
if (localMax > globalMax) {
globalMax = localMax;
Serial.print("new global max "); Serial.println(globalMax);
}
else { // test for
Serial.print("SO IT WAS "); Serial.println(globalMax);
globalMax = 0; // reset for next cycle
}
localMax = 0; // reset search for local maximum
}
}
else /* reading >= 0 */ seenZero = false;
if (reading > localMax) {
Serial.print("new local max ");Serial.println(reading);
localMax = reading;
}
}
/* hacking fragments you have been warned
return;
needGlobal = true;
if (reading < 0) {
needLocal = true;
if (testMax > globalMax) {
globalMax = testMax;
Serial.print("new global max "); Serial.println(globalMax);
}
localMax = 0;
testMax = 0;
}
if (needLocal && reading > 0) {
if (reading > testMax) {
testMax = reading;
}
Serial.print(" max "); Serial.println(testMax);
// found local max, assumes monotonic increasing input
// if (testMax > localMax) {
// testMax = localMax;
// }
}
if (reading < 0) {
if (testMax > globalMax) {
globalMax = testMax;
}
else {
// new local maximum is less than candidate globalMax, so
if (globalMax > 0) {
Serial.print(" HERE "); Serial.println(globalMax);
}
globalMax = 0;
// Serial.flush();
// for (; ;); // figure out how to get out of here and reset the mechanism
}
}
}
////
else {
// here now is new candidate for global max
Serial.println("now going down");
}
*/
/*
else {
if (needGlobal) {
Serial.println(" here");
needGlobal = false;
if (globalMax > trueMax) {
trueMax = globalMax;
}
else {
Serial.print("true maximum is "); Serial.println(globalMax);
needGlobal = false;
}
}
}
*/