Hallo,
ich bin zur Zeit dabei den Winkel eines Potentiometers zu bestimmt. Dieses soll sich immer hin und zurück drehen und ich brauche den maximalen und den minimalen Winkel. Bisher schaffe ich es, dass solange die Funktion zunimmt der Winkel für den Maximalwert ebenfalls zunimmt. Sobald ich dann in die andere Richtung drehe und der Winkel somit wieder abnimmt bleibt der Maximalwert stehen und nun überschreibt sich der alte Minimalwert. Im Wendepunkt bleibt dann hier wiederrum der Minimalwert stehen und sobald die Steigung der Funktion wieder positiv ist überschreibt sich der Maximalwert.
Ich hoffe diese Erklärung war einigermaßen verständlich...
Für den Winkel selber reicht das im Prinzip, mein Problem ist jedoch, dass ich mit den Extrempunkten noch weiter rechnen möchte. Das heist ich brauche eine Variable, die wirklich nur den Extrempunkt angibt und nicht den Winkel unter der Bedingung dass dieser zunimmt bzw. abnimmt.
Um dies zu lösen habe ich versucht eine weitere Variable einzubauen und die Bedingung zu schaffen, dass der Winkel größer ist als der vorherige, aber auch größer als der nachfolgende. Sobald ich die Bedingung jedoch hinzugefügt hatte, bekam ich keine vernünftigen Werte mehr. Kann mir vielleicht jemand sagen was mit meinem code nicht stimmt?
int pot1Pin = 2;
int pot2Pin = 1;
int val1 = 0;
int val2 = 0;
int Winkel1 = 0;
int Winkel2 = 0;
int prev1;
int prev2;
int pre1;
int pre2;
int Vorlage1;
int Vorlage2;
int Rucklage1;
int Rucklage2;
#include <SoftwareSerial.h>
SoftwareSerial BTserial(10, 11);
void setup() {
Serial.begin(9600);
BTserial.begin(9600);
int prev1 = 0;
int prev2 = 0;
}
void loop() {
val1 = analogRead(pot1Pin);
val2 = analogRead(pot2Pin);
pre1 = (val1 - 512) * 0.2571428571;
pre2 = (val2 - 512) * 0.2571428571;
if ((Winkel1 > prev1) && (Winkel1 > pre1)){
Vorlage1 = Winkel1;
}
else if ((Winkel1 < prev1) && (Winkel1 < pre1)){
Rucklage1 = Winkel1;
}
prev1 = Winkel1;
delay(1);
Winkel1 = pre1;
if ((Winkel2 > prev2) && (Winkel2 > pre2)){
Vorlage2 = Winkel2;
}
else if ((Winkel2 < prev2) && (Winkel2 < pre2)){
Rucklage2 = Winkel2;
}
prev2 = Winkel2;
delay(1);
Winkel2 = pre2;
BTserial.print(Vorlage1);
BTserial.print(",");
BTserial.print(Rucklage1);
BTserial.print(",");
BTserial.print(Vorlage2);
BTserial.print(",");
BTserial.print(Rucklage2);
BTserial.print(";");
delay(20);
}
Ich würde mich sehr über Ratschläge freuen
MfG